#version 450
#extension GL_ARB_separate_shader_objects : enable
out gl_PerVertex {
vec4 gl_Position;
};
vec2 positions[3] = vec2[](
vec2(0.0, -0.5),
vec2(0.5, 0.5),
vec2(-0.5, 0.5)
);
void main() {
gl_Position = vec4(positions[gl_VertexIndex], 0.0, 1.0);
}
问题1:这指定了什么?
out gl_PerVertex {
vec4 gl_Position;
};
问题2:语法vec2 positions[3] = vec2[](...)
的解释是什么?要初始化数组,不应该是语法
vec2 positions[3] = {
vec2(0.0, -0.5),
vec2(0.5, 0.5),
vec2(-0.5, 0.5)
};
这是特定于着色器的语法,还是arrayType[](...)
可以在C ++中用作构造函数?
答案 0 :(得分:1)
问题1 :这指定了什么?
此
<!DOCTYPE html>
<html>
<body>
<embed src="http://example.com/game.swf" width="800" height="600">
</body>
</html>
是Output Interface Block。 (进一步查看GLSL Specification - 4.3.9 Interface Blocks)
问题2 :什么解释了语法vec2位置3 = vec2?要初始化数组,语法不应该是......
没有
可以使用数组构造函数语法构造数组。在这种情况下, type还包含[]数组表示法:
out gl_PerVertex { vec4 gl_Position; };
见GLSL Specification - 4.1.11 Initializers:
如果初始值设定项是用大括号括起来的初始值设定项列表,则声明的变量必须是a 向量,矩阵,数组或结构。
const float array[3] = float[3](2.5, 7.0, 1.5);
...
以下所有声明都会导致编译时错误。
int i = { 1 }; // illegal, i is not a composite
...
如果为未大小的数组提供了初始化程序(任何一种形式),则数组的大小由 初始化程序中的顶级(非嵌套)初始值设定项的数量。所有以下声明都会创建 数组显式大小为五个元素:
float a[2] = { 3.4, 4.2, 5.0 }; // illegal