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

时间:2010-11-27 14:17:01

标签: opengl glsl drivers opengl-3

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

我认为制作一个小清单非常有用:

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

请务必发布相关的显卡驱动程序版本

2 个答案:

答案 0 :(得分: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(9-28-2010)
  • 上确认
  • 状态:截至2010-11-27,它有一个修复程序,但它似乎没有达到公共驱动程序版本(所以即使修复程序发布,使用不那么新版本的驱动程序的用户仍然会受到影响的几个月)
  • 说明

如果在您的顶点着色器中有attributein)变量,其名称在gl_之后以词汇方式存在,则您无法使用内置属性,即gl_VertexIDgl_InstanceID。如果您尝试,着色器将无法工作(可能是空白屏幕)。

  • 解决方法(新):

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

通过在顶点着色器中将layout(location=0)附加到其声明中,将任何属性的位置显式定义为等于0。您可以,但不需要将此用于其他属性;重要的是,任何属性都需要具有等于0的位置。执行此操作后,命名不再重要。

  • 解决方法(替代方案):

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

答案 1 :(得分:1)

另一个gl_VertexID错误:

  • GPU:NVIDIA GeForce 9400M
  • 类型:GLSL问题
  • 驱动程序版本:NVDANV50Hal 1.6.36
  • OpenGL版本:2.1,GLSL 1.2使用GL_EXT_gpu_shader4扩展名

这在Macbook上发生。 OS X Lion附带的支持OpenGL 3.2的新驱动程序可能已经解决了这个问题,但是许多框架只配置为使用旧版2.1驱动程序,因此这仍然是相关的。

如果在读取顶点着色器中的另一个属性之前读取gl_VertexID,则后一个属性将返回垃圾数据。如果另一个属性是gl_Color,无论它是如何使用的,都不会呈现任何内容。访问其他内置属性可能会导致其他奇怪的行为。

  • 解决方法:

如果必须使用gl_VertexID,请先阅读所需的所有其他属性。如果您首先读取另一个属性,然后是gl_VertexID,则该属性的任何后续读取都将正常工作。