Почему я не могу установить переменную, равную значению, возвращаемому функцией в GLSL (WebGL)? - PullRequest
0 голосов
/ 23 марта 2012

Я только начал играть с 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 Ответ

1 голос
/ 23 марта 2012

Вы, вероятно, привыкли к таким языкам, как JavaScript или Python, где вы можете получить доступ к значениям (например, функциям), которые были объявлены после того момента, когда вы пытаетесь их использовать.GLSL смоделирован после C и C ++, так что это невозможно.

Если вы не хотите определять test до main, то вам нужно как минимум объявить it:

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;}
...