【问题标题】:GLSL - Why are bitwise operators reserved? What is a good alternative to using bitwise ops (floating point ops that emulate bitwise)GLSL - 为什么保留按位运算符?使用按位运算(模拟按位的浮点运算)有什么好的替代方法
【发布时间】:2023-04-06 19:45:01
【问题描述】:

我正在 WebGL 中进行一些实验,其中之一是 XOR 效果片段着色器。由于某种原因,所有按位运算符都保留在 GLSL 中,并且在使用时会导致编译器错误。为什么这些运营商是非法的?我可以用什么代替 |在这种情况下?

【问题讨论】:

  • 您提到了异或效应,但随后您说“而不是|”(按位或运算符)。您的意思是“而不是^”吗?
  • 好吧,我正在研究这篇文章的第一个效果-mrdoob.com/blog/post/623作者称之为“异或”效果,所以猴子看猴子做。它的名称可能更多地与效果的外观有关,而不是影响它的代码。

标签: opengl shader glsl webgl


【解决方案1】:

我也遇到过这个问题,例如尝试使用 Chrome 在Shader Toy 中运行 Sliseix。

This question 有两个答案,展示了无需按位运算符即可实现按位异或的方法。它们可能很慢,但在某些情况下它们会足够快。总比没有好。

您可能还会看到+ 是否足够接近按位异或的近似值,具体取决于您的要求。

【讨论】:

  • 谢谢!我希望我也能选择这个答案。
【解决方案2】:

在 GLSL 1.0 规范中,它们被保留为“供将来使用”,即 1.3 规范。它允许用于无符号和有符号整数,标量和向量。

你应该从

开始你的着色器
#version 130

【讨论】:

  • 谢谢,我猜 Chromium 的 webgl 不支持 1.3 版,因为我收到错误消息“ESSL 不支持版本号”
  • 大多数情况下,您可以使用 if() 解决 xor 问题:i=0;如果(条件1)我++;如果(条件2)我++;如果 (i==1)....
  • 对于逻辑异或,是的......但问题是 bitwise XOR;你如何解决这个问题?
  • 我猜你几乎被卡住了。想到的唯一解决方案是预先计算整数纹理中的所有内容并访问它。当然非常有限。顺便说一句,请确保您的驱动程序是最新的,永远不知道。
  • 请注意,整数支持和位运算符不是一回事。位运算符是 EXT_GPU_shader4 功能(核心 OpenGL 3.2),在 GLSL 中需要 #version 1.50(或更高版本)。
猜你喜欢
  • 2019-05-31
  • 2011-07-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-03
  • 2015-05-25
  • 1970-01-01
相关资源
最近更新 更多