You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GLSL片段着色器报assignment to read-only variable错误且变量未声明uniform

问题产生原因

在SFML默认使用的旧版兼容GLSL规范中,varying类型变量的定位是顶点着色器到片段着色器的插值传递变量:

  • 顶点着色器中可对varying变量执行写入操作
  • 片段着色器中拿到的是光栅化阶段插值完成的最终值,属于只读变量,禁止直接赋值修改

你触发报错的原因是在片段着色器中直接对varying类型的vTexCoord执行了+=赋值操作,和该变量是否为uniform类型无关。

解决方法

不要直接修改传入的varying变量,声明一个本地临时变量存储修改后的纹理坐标即可,修改后的片段着色器代码如下:

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);
    // 声明本地临时变量存储偏移后的纹理坐标
    vec2 offsetTexCoord = vTexCoord;
    offsetTexCoord.y += coef * 0.03;
    gl_FragColor = vColor * texture2D(uTexture, offsetTexCoord);
}

内容的提问来源于stack exchange,提问作者user16484137

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.11 21:00:02