2013-02-07 43 views
3

我搜索了很多,但無法找到,如果下面的語句是在一個#version 330頂點着色器的法律:GLSL載體加標

#define note_the_following_whitespaces   0x01 

(layout location = 7) vec3 out ov; 
(layout location = 8) vec3 out rv; 
void main() { 
    rv = vec3(1.0,2.0,3.0); 
    ov = (1.0+rv)/2.0; 
    gl_Position = [whatever]... 
} 

我指特別是對(1.0+rv) - 着色器編譯每個nVidia的罰款卡,但拒絕在ATI卡上編譯。不幸的是我沒有確切的編譯結果,我只知道編譯失敗。

回答

8

http://www.opengl.org/registry/doc/GLSLangSpec.3.30.6.pdf

5.9

算術二元運算加(+),減( - ),乘(*),除(/)上整數操作和 浮點標量,矢量和矩陣。

(...)

一個操作數是一個標量,而另一個是一個矢量或矩陣。在這種情況下,標量運算是獨立應用於向量或矩陣的每個分量的 ,導致相同大小的向量或矩陣。

因此,如果它不能在ATI上編譯,它只是意味着它的驅動程序在這方面是不正確的。

+0

不是真的,我半天看了看那個非常相同的文件,沒有找到你引用的第二段,對不起。所以如果這是完全合法的,那麼爲什麼它不能在ati卡上編譯?我找不到有關空格的東西 – user815129

+3

@ user815129是的,ATI寫terribad司機 –