严格的nVidia OpenGL支持(OpenGL 3.2)

时间:2013-09-16 08:24:15

标签: opengl nvidia

虽然AMD非常严格地遵循OpenGL规范,但即使不遵守规范,nVidia也经常有效。一个例子是nVidia在CPU内存上支持元素incides(在glDrawElements中使用),而AMD仅支持元素数组缓冲区中的元素索引。

我的问题是:有没有办法使用nVidia驱动程序强制执行严格的OpenGL行为?目前我对Windows / OpenGL 3.2 / FreeGlut / GLEW设置的解决方案很感兴趣。

编辑:如果无法对驱动程序本身强制执行严格的行为 - 是否有一些OpenGL代理可以保证严格的行为(例如GLIntercept)

2 个答案:

答案 0 :(得分:4)

没有供应商严格执行规范。无论是AMD,nVidia,英特尔,PowerVR,......他们都有自己的特质,你必须学会​​和他们一起生活,可悲的是。这是让每个供应商实现自己的GLSL编译器的烦人事情之一,而不是Microsoft在D3D中实现唯一的HLSL编译器。

ANGLE project试图通过提供在许多主要Web浏览器中共享的单个着色器验证器来在一定程度上缓解这种情况,但这是一场艰苦的战斗,这在大多数情况下仅适用于WebGL。当每个供应商自己实现整个API时,您将始终存在实现差异。

现在Khronos小组已经认真地承担了为桌面OpenGL建立一套一致性测试的任务,就像他们对WebGL / OpenGL ES一样,事情可能会开始变得更好一些。但是强制驱动程序以严格的一致性模式运行并不是一个标准的事情 - 可能有#pragmas这样可以提示编译器的行为更严格,但这些都是特定于供应商的。

顺便说一下,我意识到这个问题与GLSL per-se 无关,但这是我能给出的最好的例子。

答案 1 :(得分:0)

不幸的是,确保您的OpenGL代码在目标硬件上运行的唯一方法是测试它。理论上,简单地编写符合标准的代码应该可以在任何地方使用,但遗憾的是并非总是这样。