Javascript WebGL2 texelFetch&x27;对纹理进行渲染会产生意外的结果

Javascript WebGL2 texelFetch&x27;对纹理进行渲染会产生意外的结果,javascript,opengl-es,webgl2,Javascript,Opengl Es,Webgl2,我创建了一个1x1纹理,参数为gl.R8、gl.RED、gl.UNSIGNED_字节到gl.texImage2D 我想这实际上只是创建一个1字节的缓冲区 现在我想使用texelFetch访问片段着色器中的这个1字节缓冲区,但是我没有得到我上传的1字节缓冲区 我创建了一个简单的示例来说明我的问题: 本质上,当我对上传值“1”的纹理进行texelFetch时,它会返回一些不是1的非零数字。我可以推断出这个返回值的唯一属性是val&0x01000000返回true。但是,即使val==0x010000

我创建了一个1x1纹理,参数为gl.R8、gl.RED、gl.UNSIGNED_字节到gl.texImage2D

我想这实际上只是创建一个1字节的缓冲区

现在我想使用texelFetch访问片段着色器中的这个1字节缓冲区,但是我没有得到我上传的1字节缓冲区

我创建了一个简单的示例来说明我的问题:

本质上,当我对上传值“1”的纹理进行texelFetch时,它会返回一些不是1的非零数字。我可以推断出这个返回值的唯一属性是val&0x01000000返回true。但是,即使val==0x01000000也不会返回true,这有点令人困惑


我做错了什么?

您使用了错误的内部格式
GL_R8
表示
float
,而
GL_R8UI
表示
unsigned int
。同样,您也使用了错误的格式。在这里,您同样需要使用
GL\u RED\u INTEGER
(与前面的原因相同)

您还必须将过滤设置为最近的
GL\u

gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);

您使用了错误的内部格式
GL_R8
表示
float
,而
GL_R8UI
表示
unsigned int
。同样,您也使用了错误的格式。在这里,您同样需要使用
GL\u RED\u INTEGER
(与前面的原因相同)

您还必须将过滤设置为最近的
GL\u

gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);

谢谢你,你太棒了。谢谢你,你太棒了。
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);