Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
587 views
in Technique[技术] by (71.8m points)

glsl vector plus scalar

I searched a lot but could not find if the following statements are legal in a #version 330 vertex shader:

#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]...
}

I'm referring particularly to the (1.0+rv) - the shader compiles fine on every nVidia card, but refuses to compile on ATI cards. Unfortunately I don't have the exact compilation result, I just know that the compilation was unsuccessful.

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

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

From 5.9

The arithmetic binary operators add (+), subtract (-), multiply (*), and divide (/) operate on integer and floating-point scalars, vectors, and matrices.

(...)

One operand is a scalar, and the other is a vector or matrix. In this case, the scalar operation is applied independently to each component of the vector or matrix, resulting in the same size vector or matrix.

So if it doesn't compile on ATI, it just means its driver is incorrect in that regard.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...