2016-08-05 23 views
1

我发现了一些有趣的东西,我想理解它。glsl中的显式或隐式vec4

使用GLSL#version 330

gl_Position类型是vec4

这些行编译细:

gl_Position = vec4(0, 0, 0, 0); 
gl_Position = vec4(vec3(0, 0, 0), 0); 
gl_Position = vec4(vec2(0, 0), vec2(0, 0)); 
... 

不知何故:

gl_Position = (vec2(0, 0), vec2(0, 0)); 

提出:

error C1035: assignment of incompatible types 

编译器能够解析(vec2(0, 0), vec2(0, 0))而不会引起语法错误。我想知道这个说法是什么意思,我相信它是正确的,并且具有不同的类型,然后vec4

问:是什么(vec2(0, 0), vec2(0, 0))意味着GLSL

编辑:

编译:

float x = (0.0, 1.0, 1.0, 2.0, 3.0, 5.0, 8.0); 

语法错误:

float x = 0.0, 1.0, 1.0, 2.0, 3.0, 5.0, 8.0; 

回答

3

您使用comma operator,创造一个vec2,然后又vec2,这是最后的vec2,这是表达式的结果。

+0

为什么呢?这是标准吗?有什么理由允许这样做? –

+1

@DombiSzabolcs [逗号运算符](https://en.wikipedia.org/wiki/Comma_o​​perator)是所有基于C的语言(包括GLSL)的标准运算符。它用于对表达式进行排序。 –

+2

享受https://www.opengl.org/registry/doc/GLSLangSpec.4.50.pdf – Mars