我正在使用此网站进行测试:http : //glslsandbox.com/
这显示为红色:
#ifdef GL_ES
precision mediump float;
#endif
void main( void ) {
vec4 c = vec4(1.0, 0.0, 0.0, 1.0);
gl_FragColor = c;
}
我可以用不同的方式更改色线,有时可以编译,有时不能:
vec4 c = vec4(1.0, vec2(0.0), vec4(1.0)); // works
vec4 c = vec4(vec2(1.0), vec2(0.0), 0.0); // doesn't compile
vec4 c = vec4(1.0, vec2(0.0), vec2(1.0)); // works
vec4 c = vec4(1.0, vec4(0.0), 0.0); // doesn't compile
vec4 c = vec4(vec4(1.0), vec4(0.0)); // doesn't compile
为什么传递过多的参数有时会起作用,有时却没有呢?
请参阅OpenGL阴影语言4.60规范(HTML)-5.4.2。向量和矩阵构造函数:
[...]参数将被从左到右使用,每个参数将按顺序消耗其所有组件,然后再消耗下一个参数的任何组件。[...]
在这些情况下,必须有在参数设置,以提供用于在构建的值的每个分量的初始值设定足够的组件。在此最后使用的参数之外提供额外的参数是编译时错误。
因此,允许以下操作:
vec4 c = vec4(1.0, 2.0, 3.0, vec4(4.0));
vec3 c = vec3(vec4(4.0));
但是,以下内容是不允许的,因为构造函数(vec4(4.0)
)中的最后一个元素会导致编译时错误(提供超出最后使用的参数的额外参数是编译时错误。):
vec3 c = vec3(1.0, 2.0, 3.0, vec4(4.0));
这样做的原因是应该允许从较大的向量(或矩阵)构造较小的向量(或矩阵)。例如:
vec4 v4;
vec3 v3 = vec3(v4);
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句