我想在GLSL中編寫一個基本的頂點着色器,爲了清楚起見,我想添加一些函數來創建矩陣並執行其他簡單操作()循環。GLSL着色器和函數:錯誤C1108
然而,當我嘗試執行:
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;
}
工作得很好。任何人都可以爲我闡明這一點嗎?
你不應該在着色器中真正計算你可以作爲制服傳遞的矩陣。好的編譯器可能會優化它,但它很糟糕。最好的做法是隻計算那些受變化/屬性/ in影響的東西。無論穿什麼衣服都應該穿制服。 – datenwolf