Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

glsl vector plus scalar

Tags:

glsl

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.

like image 593
user815129 Avatar asked Jan 14 '23 07:01

user815129


1 Answers

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.

like image 137
Bartek Banachewicz Avatar answered Feb 03 '23 13:02

Bartek Banachewicz