У меня есть карта высот из 16 бит целых чисел со знаком. Если я пробовал текстуру с использованием нормализованного поплавка, он будет отображен в порядке. Таким образом, для нормированных поплавками я загрузить текстуру как:Цепочки выборки в шейдере OpenGL не работают. Результат всегда 0
glTexImage2D(GL_TEXTURE_2D, 0, GL_R16_SNORM, 512, 512, 0, GL_RED, GL_SHORT, data);
Тогда в затенении я делаю:
layout (binding = 0) uniform sampler2D heightmap;
float height = texture(heightmap, inTexCoords).r;
Тогда высота является -32768 до +32767 нормированы на -1,0 и 1,0. Это прекрасно работает. Но я хочу, чтобы прочитать значение как целое, так что я:
glTexImage2D(GL_TEXTURE_2D, 0, GL_R16I, 512, 512, 0, GL_RED, GL_SHORT, data);
И в шейдере:
layout (binding = 0) uniform isampler2D heightmap; // < -- Notice I put isampler here
float height = texture(heightmap, inTexCoords).r; // < -- This should return an ivec4, the r value should have my 16 bit signed value, right?
Но независимо от того, что я делаю это ВСЕГДА образцы 0. Я не знаю, что делать, я попытался отключить фильтрацию текстур и смешение (как я слышал, они могут не работать) и все равно ничего.
Правильны ли другие аргументы для glTexImage2D? GL_RED и GL_SHORT?
спасибо.
Спасатель, спасибо. – Zebrafish