Могу ли я сохранить подписанное 16-битное значение в одном канале в webgl2?

#javascript #html5-canvas #webgl2

#javascript #html5-canvas #webgl #webgl2

Вопрос:

Есть ли способ сохранить подписанное 16-битное значение внутри одного канала?

Я пытаюсь сохранить его внутри красного канала следующим образом:

   gl.texImage2D(gl.TEXTURE_2D, 0, gl.R16I, width, height, 0, gl.RED, gl.SHORT, image);
 

но это приводит к ошибке:

 [.WebGL-000022F401016900] GL_INVALID_OPERATION: Invalid combination of format, type and internalFormat.
 

Ответ №1:

Для целых данных аргумент format должен быть gl.RED_INTEGER :

gl.texImage2D(gl.TEXTURE_2D, 0, gl.R16I, width, height, 0, gl.RED, gl.SHORT, image);

 gl.texImage2D(gl.TEXTURE_2D, 0, gl.R16I, width, height, 0, gl.RED_INTEGER, gl.SHORT, image);
 

Комментарии:

1. Спасибо, это работает. У меня есть следующий вопрос, вы знаете, как я могу получить этот канал в шейдере? texture(u_image, v_texCoord).r; результаты в Mismatch between texture format and sampler type (signed/unsigned/float/shadow)

2. @ffsa Тип сэмплера должен быть isampler2D . См. Sampler (GLSL) . В этом случае texture(u_image, v_texCoord) возвращает a ivec4 .