Чтение 32-битных значений RGBA с плавающей точкой в ​​GLSL - PullRequest
0 голосов
/ 22 декабря 2009

Я пытаюсь отправить некоторые 32-битные данные с плавающей точкой в ​​шейдер, но результаты ошибочны. Если я тестирую с полностью белым (1,1,1,1), все значения равны нулю. Это мой код для создания текстуры:

gl.glTexImage2D(GL.GL_TEXTURE_2D, 0, GL.GL_RGBA32F_ARB, 512, 512, 0, GL.GL_RGBA, GL.GL_FLOAT, data);

и чтение из него в GLSL:

uniform sampler2D u_tex1;

varying vec2 v_uv;

void main()
{
    gl_FragColor = texture2D(u_tex1, v_uv);
}

Если я устанавливаю текстуру на случайные значения, что-то появляется, но это не правильно. Это правильный способ чтения из текстуры RGBA32F или я что-то упустил?

1 Ответ

0 голосов
/ 22 декабря 2009

Вы не даете много информации о том, что вы сделали <Код, который вы показываете, является правильным. </p>

Некоторые вещи, которые я могу придумать, могут быть неправильными:

  • ваш data не имеет нужных данных (есть ли там поплавки?)
  • ваша текстура не отфильтрована должным образом (поскольку вы предоставляете только 1 уровень MIP, вам необходимо , чтобы отключить MIP-отображение)
  • ваша текстура не привязана к единице текстуры для сэмплера u_tex1 (так что вы можете не получать ее).
  • ваши текстурные координаты не такие, как вы думаете (и, в зависимости от вашего режима зажима / обтекания, это может привести к небелому текстелю. Используйте GL_CLAMP_TO_EDGE или GL_REPEAT, чтобы не взаимодействовать с границей текстуры )

Есть много способов, чтобы текстура не работала, надеюсь, я выбрал правильный в этом списке!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...