2010-08-22 519 views
5

我正在WebGL中運行一些實驗,其中一個是XOR效果片段着色器。出於某種原因,所有的按位運算符都在GLSL中保留,並在使用時導致編譯器錯誤。爲什麼這些運營商非法?我可以使用什麼來代替|在這種情況下?GLSL - 爲什麼預留位運算符?什麼是使用按位運算的好替代(浮點運算按位模擬)

+0

您提到了XOR效應,但後來你說「而不是'|'」(按位或運算符)。你的意思是「而不是'^'」? – LarsH 2011-05-18 19:32:57

+0

那麼,我是第一個效果這個帖子 - http://mrdoob.com/blog/post/623作者稱它爲'異或'效應,所以猴子看到猴子這樣做。它的名字可能與效果的外觀有關,而不是影響它的代碼。 – schellsan 2011-05-19 17:23:24

回答

3

在GLSL 1.0規範中,它們被保留「供將來使用」,這是1.3規範。它允許使用無符號和有符號整數,包括標量和矢量。

你應該

#version 130 
+1

謝謝,我想1.3版不支持Chromium的webgl,因爲我得到的錯誤'ESSL不支持的版本號' – schellsan 2010-08-23 17:02:36

+0

大多數情況下,您可以用if():i = 0解決xor問題。如果(cond1)i ++; if(cond2)i ++;如果(i == 1)... – Calvin1602 2010-08-23 17:15:37

+0

邏輯XOR,是的...但問題是*位* XOR;你如何解決這個問題? – LarsH 2011-05-18 19:32:19

2

開始你的shader我就遇到了這個問題太多,例如試圖使用Chrome在Shader Toy中運行Slisesix。

This question有兩個答案,顯示瞭如何在不使用按位運算符的情況下實現按位異或。他們可能會很慢,但在某些情況下,他們會很快。有總比沒有好。

您可能還會看到+是否足夠接近按位XOR,取決於您的要求。

+1

謝謝!我希望我也可以選擇這個答案。 – schellsan 2011-05-19 22:06:33