我可以在 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 位值吗?的主要内容,如果未能解决你的问题,请参考以下文章

webGL2统一缓冲区对象和布局的使用(std140)

WebGL 2.0:即使 VBO 被删除,Draw 调用也会成功

WebGL2:不完整的帧缓冲区

stm32之ADC(规则通道)

图像格式中的Alpha通道是指啥?

stm32f103rct6的adc有多少通道