首页 > 解决方案 > WebGL2 片段着色器中的按位 OR Texels

问题描述

我正在尝试使用 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 配置为在写入纹理时始终执行按位或

标签: javascriptgpuwebglgpgpuwebgl2

解决方案


没有按位或写入。通常,您从某些纹理中读取,按位或在着色器中,写入新纹理

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


推荐阅读