问题:
我正在从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);