WebGL2 片段着色器中的按位或纹理元素

Bitwise OR Texels in WebGL2 fragment shader

我正在尝试使用 WebGL2 进行一些 GPGPU 计算。其中的一个关键组成部分是将纹理元素的值设置为其自身与片段着色器中计算的新值的按位或。有没有办法将这种按位运算应用于每个片段而不是完全覆盖值?

相关代码如下:

precision mediump float;
varying float id; // integer passed though the vertex shader, value is in range [1, 32].

void main() {
  if (id == 1.0) {
    gl_FragColor = vec4(0.0039, 0.0, 0.0, 0.0);
  } else if (id == 2.0) {
    gl_FragColor = vec4(0.0078, 0.0, 0.0, 0.0);
  } else if (id == 3.0) {
    ...
  }
}

为了阐明所需的行为,假设我们正在写入的纹理元素的值为 0b01。我在片段着色器中执行一些计算并写入值 0b10。我希望结果是 0b11.

我知道对单个纹理的读取和写入操作是互斥的,所以我想知道是否有办法将 WebGL2 配置为 总是 执行按位或时写入纹理

没有按位或的写法。通常你从一些纹理中读取,按位或在着色器中,写入一个新的纹理

顺便说一句,webgl2 有有符号和无符号整数纹理。