2016-07-19 1 views
0

동일한 "텍스처 메모리"를 다른 크기의 텍스처에 바인딩하려면 어떻게해야합니까?동일한 "텍스처 메모리"를 다른 차원의 텍스처에 바인딩

예를 들어, 그래픽 카드 메모리에 데이터를 두 번로드하고 저장하지 않고도 셰이더에서 sampler2DArray을 사용하고 다른 셰이더에서 sampler3D을 사용하여 2D 이미지 배열에 액세스해야합니다.

glActiveTexture(GL_TEXTURE1); 
glBindTexture(GL_TEXTURE_3D, tex); // "reuse" the texture storage with a 
             // different dimensionality in another 
             // texture unit 

을하지만 마지막 줄은 분명히 잘못되었습니다 다음

glActiveTexture(GL_TEXTURE0); 
glBindTexture(GL_TEXTURE_2D_ARRAY, tex); 
glTexImage3D(GL_TEXTURE_2D_ARRAY, ...); // allocate & store pixel data 

과 :

나는 같은 것을 할 싶습니다.

이와 비슷한 방법이 있습니까?

답변

0

OpenGL (4.3+)에는 view textures이라는 개념이 있습니다. immutable storage으로 텍스처를 생성하면 해당 변경 불가능한 스토리지를 참조하는 텍스처를 생성 할 수 있습니다. 또는 그 불변 스토리지의 일부. 이미지 형식 (호환되는 경우) 및 텍스처 대상까지도 변경할 수 있습니다. 2D 배열의 단일 요소를 추출하여 일반 2D 텍스처로 사용할 수 있습니다. 또는 2D 텍스처를 1 레이어의 2D 배열로 바꿀 수 있습니다.

그러나 2D 배열 텍스처의 저장소를 3D 텍스처로 볼 수 없습니다. 혹은 그 반대로도. 그들의 밉맵은 같은 방식으로 작동하지 않습니다. 3 차원 텍스처에서 밉맵은 2 차원 배열 텍스처에서 X, Y 및 Z를 감소, 그들은 단지 X와 Y의 작은 얻을

심지어 VULKAN 당신은 3D 이미지보기를하는 VkImageView를 만들 수 없습니다 배열 된 2D 이미지로 할당 된 VkImage (또는 그 반대)

관련 문제