#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)
возвращает aivec4
.