为什么我不能在GLSL(WebGL)中设置一个等于函数返回值的变量?

时间:2012-03-23 04:38:41

标签: glsl webgl shader

我刚刚开始使用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;}

我不确定为什么会这样。我猜这是片段着色器的一些我不知道的东西。如果有人能解释我做错了什么会很棒,谢谢。

1 个答案:

答案 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;}