问题:

我正在从http://www.arcsynthesis.org/gltut/index.html教程中学习OpenGL,但我很难让教程13:Geometry Impostors正常工作(超过6个小时),并且在对代码进行了很小的更改之后现在可以正常工作了,而该更改实际上应该是不操作的,我们需要您的帮助,以了解为什么它会更改任何内容。

说明-已编辑:

问题在于,使用不变的代码,片段着色器无法从几何着色器获得正确的输入,但是通过替换几何着色器的out接口块以分离变量或为该块指定实例名称可以使程序正常工作。但是这些更改应该是无人操作的。

问题可能是名称冲突。

像这样,它不起作用:

in VertexData
{
    vec3 cameraSpherePos;
    float sphereRadius;
} vert[];

out FragData
{
    flat vec3 cameraSpherePos;
    flat float sphereRadius;
    smooth vec2 mapping;
};

void main()
{
     mapping =
     cameraSpherePos =
     sphereRadius =
     EmitVertex();
     /* mapping's value doesn't get to the fragment shader correctly */
}


但是,给FragData一个实例名称(如frag),并使用frag.mappaing instad映射,或使用3个​​单独的变量都可以解决此问题。

如果没有实例名称,为什么它不起作用?

编辑:这似乎是一个驱动程序问题。

最佳答案

为所有接口块创建实例名称,例如:

FragData { /* ... */ } gs2fs;


然后:

gs2fs.cameraCornerPos = vec4(vert[0].cameraSpherePos, 1.0);

07-24 09:25