OpenGL 3,OpenGL 4实现中的已知错误
题
众所周知,最终,规范是一件事,实现是另一回事。我们会引起大多数错误,但有时并非如此。
我相信列出一小部分:
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_VertexID
和 gl_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,则该属性的任何后续读取都可以正常工作。
不隶属于 StackOverflow