问题:
我学习的OpenGL从http://www.arcsynthesis.org/gltut/index.html教程中,我有很艰难的时期越来越教程13:几何冒名顶替工作(6+小时),现在是在代码实际上应该没有任何操作的情况下进行一些非常小的修改后工作,我需要您的帮助以了解它为什么会改变任何内容。GLSL,接口模块
说明 - 编辑:
的问题是与不变的代码片段着色器没有从几何着色器得到正确的输入,但无论是更换几何着色器的出接口块分离变量或给该块的实例名称使程序正常工作。但是这些改变应该是无效的。
问题可能是名称冲突。
喜欢这个不起作用:
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个独立的变量解决了这个问题。
为什么没有实例名称就无法工作?
编辑:这似乎是一个驱动程序问题。
你在运行什么硬件? –
程序正在运行#verison 330: Geforce GTS 360M - “3.30 NVIDIA via Cg compiler” – IceCool
嗯,更多着色器和C++代码将有助于给出更准确的答案。在您的gs着色器中,在调用EmitVertex()之前,您正在初始化/设置每个顶点迭代的FragData的每个成员。此外,如果您有多个调用 - 请确保您已将FragData设置为正确。 – dinony