gl_VertexID破坏渲染

3

我有以下GLSL着色器(加载到OpenGL 3.3前向上下文中,但在2.1中获得相同的行为):

const GLchar* const glsl_vertex_timeseries = {
    "#version 330\n"
    "#extension GL_EXT_gpu_shader4 : enable\n"
    ""
    "in vec2 in_Y;"
    ""
    "void main()"
    "{"
//  "   int dummy = gl_VertexID;"
    "   gl_Position = vec4(in_Y, 0.0, 1.0);"
    "}"
};

为了定位问题,这里进行了大量简化。

如图所示,它已经编译、链接并显示了几何图形。

如果取消注释,它会编译和链接但没有警告,但什么都不渲染(glClear 仍然有效,但不是 glDrawArrays)。

需要什么来使 gl_VertexID 正常工作?

该应用程序是在 Windows 7 64 位上运行的 32 位 C++ 程序。视频卡是 ATI Mobility Radeon 5650,Catalyst 8.812。

1个回答

0

神奇的是,使用 Catalyst 8.821 就不再出现这种情况了。

我不确定这是因为修复了一个错误,还是因为驱动程序安装程序重置了一些奇怪的状态。

编辑:考虑到更新的驱动程序在两台不同的计算机上都解决了问题,看起来这一定是最近修复的一个错误。


我记得大约2-3个月前在OpenGL论坛上看到一个帖子,关于ATI驱动程序在非零_first_参数下生成不正确的gl_VertexID,所以我的猜测是“错误修复”。 - Damon
刚刚确定问题也出现在另一台电脑上,Radeon 5770 Catalyst 8.791。正在升级,如果新版本也能解决这个问题,我就会信服了。 - Ben Voigt
我在将近一年前看到了同样的行为。在一个简单的情况下,gl_VertexID没有起作用。当我让着色器做更多的工作时,它神奇地工作了。看起来ATI仍然存在一些问题... - kvark
@kvark:在我的情况下,甚至不是gl_VertexID无法工作,读取它实际上会破坏其他所有内容(尽管以有用的方式使用它是下一步)。但很高兴知道其他人之前已经走过这条路。 - Ben Voigt
不,我的经验与描述完全相同 - 如果我尝试读取这个值,什么也没有被绘制出来。 - kvark

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接