3

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

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

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

4

2 回答 2

4

没有供应商严格执行规范。无论是 AMD、nVidia、英特尔、PowerVR,……他们都有自己的特质,遗憾的是,你必须学会​​与他们相处。这是让每个供应商实现自己的 GLSL 编译器的烦人事情之一,而不是微软在 D3D 中实现唯一的 HLSL 编译器。

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

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

顺便说一句,我意识到这个问题与 GLSL本身无关,但这是我能举出的最好的例子。

于 2013-09-16T08:56:58.053 回答
0

不幸的是,唯一能确定 OpenGL 代码在目标硬件上运行的方法就是对其进行测试。从理论上讲,简单地编写符合标准的代码应该可以在任何地方使用,但遗憾的是并非总是如此。

于 2013-09-16T18:08:36.117 回答