我刚刚开始使用GLSL Sandbox(http://glsl.heroku.com),我注意到如果我声明一个函数并尝试将其返回值传递给一个变量,代码将无法编译主功能。这就是我现在所拥有的:
#ifdef GL_ES
precision mediump float;
#endif
uniform float time;
void main( void ) {
float color = test(); // code breaks here
gl_FragColor = vec4( vec3( color, color * 0.5, sin( color + time / 3.0 ) * 0.75 ), 1.0 );
}
float test(){return 5.0;}
我不确定为什么会这样。我猜这是片段着色器的一些我不知道的东西。如果有人能解释我做错了什么会很棒,谢谢。
答案 0 :(得分:1)
您可能习惯使用JavaScript或Python等语言,您可以在其中访问在您尝试使用它们之后声明的值(如函数)。 GLSL以C和C ++为模型,因此不可能。
如果您不想在test
之前定义main
,那么您至少需要声明:
float test();
void main( void ) {
float color = test(); // code breaks here
gl_FragColor = vec4( vec3( color, color * 0.5, sin( color + time / 3.0 ) * 0.75 ), 1.0 );
}
float test(){return 5.0;}