我可以在 webgl2 的单通道中存储签名的 16 位值吗?
Posted
技术标签:
【中文标题】我可以在 webgl2 的单通道中存储签名的 16 位值吗?【英文标题】:Can I store signed 16bit value in single channel in webgl2? 【发布时间】:2022-01-15 11:17:54 【问题描述】:有没有办法在单通道内存储带符号的 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】:对于整数数据,格式参数必须是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);
【讨论】:
谢谢,它有效。我有一个后续问题,您知道如何在着色器中获取此通道吗?texture(u_image, v_texCoord).r;
导致 Mismatch between texture format and sampler type (signed/unsigned/float/shadow)
@ffsa 采样器类型必须为 isampler2D
。见Sampler (GLSL)。在这种情况下,texture(u_image, v_texCoord)
返回一个ivec4
。以上是关于我可以在 webgl2 的单通道中存储签名的 16 位值吗?的主要内容,如果未能解决你的问题,请参考以下文章