GLSL шейдеры и функции: ошибка C1108 - PullRequest
0 голосов
/ 17 января 2011

Я пытаюсь написать базовый вершинный шейдер в GLSL и просто для ясности хочу добавить некоторые функции для создания матриц и выполнения других простых операций вне цикла main ().

Однако, когда я пытаюсь выполнить:

uniform float scale;

void main()
{
vec4 pos = gl_ProjectionMatrix * gl_Vertex;
pos *= scaleMatrix(scale);

gl_Position = pos;

gl_TexCoord[0] = gl_MultiTexCoord0;

gl_FrontColor = gl_Color;           
} 

mat4 scaleMatrix(const in float s) {
return mat4(s, 0.0, 0.0, 0.0,
            0.0, s, 0.0, 0.0,
            0.0, 0.0, s, 0.0,
            0.0, 0.0, 0.0, 1.0 );
}

Я получаю ошибку: ошибка C1008: неопределенная переменная "scaleMatrix". Однако

uniform float scale;

void main()
{
vec4 pos = gl_ProjectionMatrix * gl_Vertex;
pos *= mat4(s, 0.0, 0.0, 0.0,
            0.0, s, 0.0, 0.0,
            0.0, 0.0, s, 0.0,
            0.0, 0.0, 0.0, 1.0 );

gl_Position = pos;

gl_TexCoord[0] = gl_MultiTexCoord0;

gl_FrontColor = gl_Color;           
} 

работает просто отлично. Кто-нибудь может пролить свет на это для меня?

1 Ответ

4 голосов
/ 17 января 2011

Попытайтесь поместить объявление вашей функции вверху вашего файла кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...