javascript - 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 配置为在写入纹理时始终执行按位或
解决方案
没有按位或写入。通常,您从某些纹理中读取,按位或在着色器中,写入新纹理
顺便说一句,webgl2 有有符号和无符号整数纹理。
推荐阅读
- java - 在 Java 中获取 nanos unix 纪元时间的最快方法
- sql - 如何选择有关系的最早日期?
- angular - Angular8 ngfor FormControl
- javascript - 实现未读消息
- php - 从远程数据库获取异常下载 JSON
- android - Recyclerview 每页只显示一个项目,但滚动显示其余项目
- ngrok - 如何让 ngrok 客户端监听特定的主机名而不是 localhost?
- c# - C#:Microsoft.VisualBasic.Interaction.AppActivate 没有效果
- c# - EventGridTrigger Azure 函数 - 如何立即将错误请求返回到死信
- java - 将文件/文件夹复制到剪贴板,以允许通过 Windows 资源管理器(通过 MTP)手动粘贴到 Android