2015-08-18 3 views
0

Я использую GL_TEXTURE_2D_ARRAY для отправки нескольких текстур в фрагментарные шейдеры.GL_TEXTURE_2D_ARRAY привязка пустой экран

int width, height; 

unsigned char* image1 = SOIL_load_image("border_small.png",&width, &height,0,SOIL_LOAD_RGBA); 
unsigned char* image2 = SOIL_load_image("tile1_small.png", &width, &height,0,SOIL_LOAD_RGBA); 


glActiveTexture(GL_TEXTURE1); 
GLuint textures; 
glGenTextures(1, &textures); 
glBindTexture(GL_TEXTURE_2D_ARRAY, textures); 
glUniform1i(glGetUniformLocation(p_myGLSL->getProgramID(),"baseTextures"), 1); 

glTexStorage3D(GL_TEXTURE_2D_ARRAY, 1, GL_RGBA, width, height, 2); 

glTexSubImage3D(GL_TEXTURE_2D_ARRAY, 
       0, 
       0,0, 
       1, 
       width, height, 
       1, 
       GL_RGBA, 
       GL_UNSIGNED_BYTE, 
       image1); 

glTexSubImage3D(GL_TEXTURE_2D_ARRAY, 
       0, 
       0,0, 
       2, 
       width, height, 
       1, 
       GL_RGBA, 
       GL_UNSIGNED_BYTE, 
       image2); 

glTexParameteri(GL_TEXTURE_2D_ARRAY,GL_TEXTURE_MIN_FILTER,GL_LINEAR); 
glTexParameteri(GL_TEXTURE_2D_ARRAY,GL_TEXTURE_MAG_FILTER,GL_LINEAR); 
glTexParameteri(GL_TEXTURE_2D_ARRAY,GL_TEXTURE_WRAP_S,GL_CLAMP_TO_EDGE); 
glTexParameteri(GL_TEXTURE_2D_ARRAY,GL_TEXTURE_WRAP_T,GL_CLAMP_TO_EDGE); 

Фрагмент шейдеры:

layout (binding = 1) uniform sampler2DArray baseTextures; 
FragColor = texture(baseTextures, vec3(TexCoord.xy, 0)); 

код генерировать пустой экран. Как исправить эту проблему?

ответ

1

Возможно, вы копируете данные в offset = 1 and 2 блока текстуры, но читаете offset = 0 в шейдере фрагмента.

+0

Спасибо. Я устанавливаю смещение в 0 и 1, а смещение шейдера должно быть 0 или 1 и по-прежнему иметь пустой экран. Я дважды проверял данные image1 и image2. –

+0

@DzungNguyen 'glTexStorage3D (GL_TEXTURE_2D_ARRAY, 1, GL_RGBA, ширина, высота, 2);' должен быть изменен на 'glTexStorage3D (GL_TEXTURE_2D_ARRAY, 1, GL_RGBA32F, width, height, 2);'. Потому что это внутренний формат, поэтому он также должен сказать, насколько велик каждый элемент текстуры. – mmostajab

+0

ДА, это сработало! Не могли бы вы рассказать о проблеме? –