Я успешно загружаю и загружаю данные в целочисленную текстуру с R32UI в качестве внутреннего формата. Пишу текстурой 1000x600. Я задаю каждому пикселю уникальное значение (x + y * высота). При обратном чтении текстуры значения верны.
Проблема в шейдере / рендеринге. При использовании «texture ()» в «usampler2D» диапазон [0 - 255] расширяется до [0 - 2 ^ 32-1]. Похоже, что к значению текселя применяется модуль 256, затем делится на 256, а затем умножается на 2 ^ 32-1.
Визуальный:
Фрагментный шейдер
#version 430
in vec2 gTextCoord;
layout(binding = 0) uniform usampler2D uInputImg;
out vec4 FragColor;
void main()
{
FragColor = vec4(vec3(texture(uInputImg, gTextCoord).rgb) / 4294967295.0, 1);
}
Загрузка:
int id = GL11.glGenTextures();
GL11.glBindTexture(GL11.GL_TEXTURE_2D, id);
GL11.glTexImage2D(
GL11.GL_TEXTURE_2D,
0,
GL30.GL_R32UI,
width,
height,
0,
GL30.GL_RED_INTEGER,
GL11.GL_UNSIGNED_INT,
data);
GL11.glBindTexture(GL11.GL_TEXTURE_2D, 0);
Обвязка:
GL13.glActiveTexture(GL13.GL_TEXTURE0 + binding);
GL11.glBindTexture(GL11.GL_TEXTURE_2D, id);
Я хотел бы получить значение, которое я повлиял на каждый тексель. Является ли это возможным ? Если да, то что мне не хватает? Если нет, то что такое блокирование и какие есть альтернативы?
Спасибо.
GL_NEAREST
. - person derhass   schedule 19.04.2015