GLSL着色器和函数:错误C1108

时间:2011-01-17 13:01:50

标签: function opengl glsl shader vertex

我正在尝试在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 个答案:

答案 0 :(得分:4)

尝试将函数声明放在代码文件的顶部。