【发布时间】:2021-07-20 00:15:35
【问题描述】:
我在片段着色器中收到以下错误。我很困惑,因为变量没有被声明为统一的。
为了编译着色器,我使用了 SFML 的 loadFromFile() 函数。
我的.frag着色器
varying vec4 vColor;
varying vec2 vTexCoord;
uniform sampler2D uTexture;
uniform float uTime;
void main() {
float coef = sin(gl_FragCoord.y * 0.1 + 1.0 * uTime);
vTexCoord.y += coef * 0.03;
gl_FragColor = vColor * texture2D(uTexture, vTexCoord);
我的.vert 着色器
varying vec4 vColor;
varying vec2 vTexCoord;
void main() {
vColor = gl_Color;
vTexCoord = (gl_TextureMatrix[0] * gl_MultiTexCoord0).xy;
gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
}
错误信息:
0:10(2):错误:赋值给只读变量“vTexCoord”
【问题讨论】:
-
它可能来自
void main()。main函数返回int。总是。 -
感谢您的反馈,但我不明白这两者之间有什么关系。同样从我看到的所有示例中,在 GLSL 中,main 被声明为 void。
-
@ThomasMatthews 我相信
void main()是着色器的正确签名。 -
@ThomasMatthews 在 C++ 中,当然,但不是在 GLSL 中。