GLSL片段着色器修改fs_in.tc时报error C7565错误该如何解决
报错核心原因
- 触发
C7565报错的直接原因,是违反了GLSL的接口变量访问规则:所有标记为in的接口块成员,也就是从顶点/几何着色器经光栅化插值传入片段着色器的变量,属于只读属性,编译层面完全禁止对这类变量直接做赋值修改。你代码中直接对fs_in.tc.y赋值的写法,刚好踩了这个规则。
正确修改方式
- 不需要改动接口块的定义,也不需要额外设置fs_in里的tc变量——这个变量的赋值是上游顶点着色器的工作。你只需要在main函数内部定义一个局部变量,承接从fs_in传入的原始纹理坐标,对这个局部变量做翻转运算,再用处理后的坐标完成纹理采样即可。
修改后可正常编译运行的代码
#version 330 core layout(location = 0) out vec4 colour; in DATA { vec2 tc; } fs_in; uniform sampler2D tex; uniform int top; void main() { // 定义局部变量承接原始纹理坐标,避免修改只读的in接口变量 vec2 texCoord = fs_in.tc; if (top == 1) texCoord.y = 1.0 - texCoord.y; colour = texture(tex, texCoord); if (colour.w < 1.0) discard; }
内容的提问来源于stack exchange,提问作者ImmanuelC
相关产品推荐
相关产品推荐

