我的GLSL着色器有问题。 当我想编译片段着色器部分时,我收到以下错误:
0:24: error(#181) Cannot be used with a structure: out
error(#273) 1 compilation errors. No code generated
所以问题就在于我的变量,我假设。 这是我的片段着色器:
#version 410
uniform mat4 gWVP;
uniform mat4 gWorld;
uniform sampler2D gColorMap;
in VSOutput
{
vec3 WorldSpacePos;
vec2 TexCoord;
vec3 Normal;
} FSin;
struct FSOutput
{
vec3 WorldSpacePos;
vec3 Diffuse;
vec3 Normal;
vec3 TexCoord;
};
out FSOutput FSOut;
void main()
{
FSOut.WorldSpacePos = FSin.WorldSpacePos;
FSOut.Diffuse = texture(gColorMap, FSin.TexCoord).xyz;
FSOut.Normal = normalize(FSin.Normal);
FSOut.TexCoord = vec3(FSin.TexCoord, 0.0);
}
我知道应该可以在OpenGL 4.0+中输出结构,不应该吗?所以我没有得到错误,是驱动程序问题还是类似的东西? 我正在运行带有13.4驱动程序的Radeon HD 6950。
答案 0 :(得分:5)
我知道应该可以在OpenGL 4.0+中输出结构,不应该吗?
不,它不应该。
GLSL规范非常清楚:顶点着色器输入和片段着色器输出不能结构。从GLSL 4.4规范,第4.3.6节:
片段输出只能是float,单精度浮点向量,有符号或无符号整数或整数向量,或任何这些的数组。将任何双精度类型,矩阵或结构声明为输出是一个编译时错误。
如果您想知道,它们也无法汇总到interface blocks。它们必须是松散的变量。