opengl - 当变量未声明为统一时,编译错误显示“赋值给只读变量”
问题描述
我在片段着色器中收到以下错误。我很困惑,因为变量没有被声明为统一的。
为了编译着色器,我使用了 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”
解决方案
片段着色器中的可变变量是只读的,片段着色器中的可变变量意味着顶点着色器可以通过该变量将不同的值传递给片段着色器,而统一 var 将获得相同的值。您需要在片段着色器 main() 中引入一个局部变量,根据需要设置其值并使用此局部变量对纹理进行采样。
推荐阅读
- node.js - Mikro ORM:属性在 orm.em.create() 上有任何类型;
- rust - 为什么在 rust 中写入文件时出现“错误的文件描述符”错误?
- c++ - 如何在 Visual Studio 项目中使用 C++ 库方法
- hex - 假设您购买具有 512 MB RAM 的 32 位 PC。已安装内存的最后一个字节的 8 位十六进制数字地址是什么?
- python - 如何检测图像中的凸/凹曲线?
- c++ - 深色主题不适用于标题栏
- python - Selenium 找不到 xpath 或 css 选择器
- mysql - mysql: Media Wiki Extension 问题(空白页)
- javascript - 使用 BroadcastChannel API 反应获取错误
- sql - SQL 表转换 - 在“Select”命令中使用“if”语句将列中的文本拆分为它们自己的行