众所周知,最终,规范是一件事,实现是另一回事。我们会引起大多数错误,但有时并非如此。

我相信列出一小部分:

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

请记住要始终发布相关 图形卡驱动程序版本.

有帮助吗?

解决方案

让我开始:

  • 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,它已经有一个修复程序,但它尚未达到公共驱动程序的发布(因此,即使释放了修复程序,但驱动程序版本不太如此的用户仍然会受到影响像几个月)
  • 描述:

如果在您的顶点着色器中 attribute (in)变量的名称是词汇之后 gl_, ,那么您不能使用内置属性,即 gl_VertexIDgl_InstanceID. 。如果尝试,着色器将无法正常工作(空白屏幕,可能)。

  • 解决方法(新):

仅适用于GLSL 3.3及以上或 gl_arb_explitic_attrib_location 延期。

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

  • 解决方法(替代):

使用名称惯例,要求您命名属性变量以开头 a_, ,这不会伤害您的代码可读性,并且会使所有这些都变得词汇 gl_ (安全区)。

其他提示

另一个gl_vertexid错误:

  • GPU:NVIDIA GEFORCE 9400m
  • 类型:GLSL问题
  • 驱动程序版本:NVDANV50HAL 1.6.36
  • OpenGL版本:2.1,GLSL 1.2使用GL_EXT_GPU_SHADER4扩展

这发生在MacBooks上。 OS X Lion随附的新驱动程序可能已解决了问题,但是许多框架仅配置为使用Legacy 2.1驱动程序,因此这仍然是相关的。

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

  • 解决方法:

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top