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));
код генерировать пустой экран. Как исправить эту проблему?
Спасибо. Я устанавливаю смещение в 0 и 1, а смещение шейдера должно быть 0 или 1 и по-прежнему иметь пустой экран. Я дважды проверял данные image1 и image2. –
@DzungNguyen 'glTexStorage3D (GL_TEXTURE_2D_ARRAY, 1, GL_RGBA, ширина, высота, 2);' должен быть изменен на 'glTexStorage3D (GL_TEXTURE_2D_ARRAY, 1, GL_RGBA32F, width, height, 2);'. Потому что это внутренний формат, поэтому он также должен сказать, насколько велик каждый элемент текстуры. – mmostajab
ДА, это сработало! Не могли бы вы рассказать о проблеме? –