GLSL片段着色器结构输出

C0d*_*0dR 1 opengl shader compilation glsl

我的GLSL着色器有问题.当我想编译片段着色器部分时,我收到以下错误:

0:24: error(#181) Cannot be used with a structure: out
error(#273) 1 compilation errors. No code generated
Run Code Online (Sandbox Code Playgroud)

所以问题就在于我的变量,我假设.这是我的片段着色器:

#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);              
}
Run Code Online (Sandbox Code Playgroud)

我知道应该可以在OpenGL 4.0+中输出结构,不应该吗?所以我没有得到错误,是驱动程序问题还是类似的东西?我正在运行带有13.4驱动程序的Radeon HD 6950.

Nic*_*las 5

我知道应该可以在OpenGL 4.0+中输出结构,不应该吗?

不,它不应该.

GLSL规范非常清楚:顶点着色器输入和片段着色器输出不能是结构.从GLSL 4.4规范,第4.3.6节:

片段输出只能是浮点数,单精度浮点数向量,有符号或无符号整数或整数向量,或任何这些的数组.将任何双精度类型,矩阵或结构声明为输出是编译时错误.

如果您想知道,它们也不能聚合到接口块中.它们必须是松散的变量.