OpenGL 3,OpenGL 4实现中的已知错误

Kos*_*Kos 9 opengl drivers glsl opengl-3

正如我们最终都知道的那样,规范是一回事,而实现则是另一回事.我们自己造成的大多数错误,但有时并非如此.

我相信制作一个小清单是有用的:

GPU驱动程序中目前已知的错误是什么,与最近版本的OpenGL和GLSL的实现有关?

请记得始终发布相关的显卡驱动程序版本.

Kos*_*Kos 2

让我开始:

  • GPU:在 AMD/ATI Radeon HD 4650 上得到确认
  • 类型:GLSL问题
  • GL 版本相关:在 3.3 上确认,可能是 3.1 及更高版本(甚至更早)
  • 相关链接:http://forums.amd.com/devforum/messageview.cfm ?catid=392&threadid=139288
  • 驱动程序版本:在 Catalyst 10.10 上确认(2010 年 9 月 28 日)
  • 状态:截至 2010 年 11 月 27 日,它已经有了修复程序,但显然尚未达到公共驱动程序版本(因此即使修复程序发布,使用不太最新版本驱动程序的用户仍将受到影响像几个月)
  • 描述:

如果在顶点着色器中,有任何attribute( in) 变量,其名称在词法上位于 之后gl_,则不能使用内置属性,即gl_VertexIDgl_InstanceID。如果您尝试,着色器将无法工作(可能是空白屏幕)。

  • 解决方法(新):

仅适用于 GLSL 3.3 及更高版本,或使用GL_ARB_explicit_attrib_location扩展。

layout(location=0)通过附加到顶点着色器中的声明,将任何属性的位置显式定义为等于 0 。您可以但不需要将其用于其他属性;重要的是任何属性的位置都需要等于 0。这样做之后,命名就不再重要了。

  • 解决方法(替代):

使用命名约定,要求您以 开头的命名属性变量a_,这不会损害代码的可读性,并且会使所有这些变量在词法上都位于之前gl_(安全区)。

  • @Nicol,这是真的,但与这个问题无关。请再读一遍:) (3认同)