为什么可以';我是否在GLSL(WebGL)中设置一个等于函数返回值的变量?

为什么可以';我是否在GLSL(WebGL)中设置一个等于函数返回值的变量?,glsl,webgl,shader,Glsl,Webgl,Shader,我刚开始玩GLSL沙盒(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( vec

我刚开始玩GLSL沙盒(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;}

我真的不知道为什么会这样。我想这是关于碎片着色器的一些事情,我不知道。如果有人能解释我做错了什么,那就太棒了,谢谢

您可能已经习惯了JavaScript或Python等语言,在这些语言中,您可以访问在尝试使用值之后声明的值(如函数)。GLSL是在C和C++之后建模的,所以不可能。 如果您不想在
main
之前定义
test
,那么您至少需要声明它:


德普。我早该知道的。非常感谢。
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;}