虽然AMD遵循OpenGL规范非常严格,但即使没有遵循规范,nVidia也经常工作。一个例子是nVidia支持CPU内存中的元素目录(在glDrawElements中使用),而AMD只支持来自元素数组缓冲区的元素索引。
我的问题是:是否有一种方法可以使用OpenGL驱动程序强制执行严格的nVidia行为?目前,我对Windows/OpenGL 3.2/FreeGlut/GLEW设置的解决方案感兴趣。
编辑:如果不可能对驱动程序本身执行严格的行为--是否有一些OpenGL代理可以保证严格的行为(如GLIntercept)?
发布于 2013-09-16 08:56:58
没有任何供应商严格执行该规范。是AMD,nVidia,英特尔,PowerVR,.他们都有自己的特质,你必须学会和他们一起生活,可悲的是。这是让每个供应商实现自己的GLSL编译器的麻烦之一,而不是微软在D3D中实现一个也是唯一的HLSL编译器。
角度工程试图在一定程度上通过在许多主要的web浏览器上提供一个单一的着色器验证器来减轻这一点,但这是一场艰难的战斗,这在很大程度上只适用于WebGL。当每个供应商自己实现整个API时,您总是会有实现上的差异。
现在Khronos小组已经认真地承担了为桌面OpenGL建立一组一致性测试的任务,就像为WebGL / OpenGL ES所做的一样,事情可能会变得更好一些。但是,强迫驱动程序在严格的一致性模式下操作并不是一件真正标准的事情--可能存在#pragmas之类的东西,提示编译器要更严格地操作,但这些都是特定于供应商的。
顺便说一句,我意识到这个问题与GLSL本身无关,但这是我能给出的最好的例子。
发布于 2013-09-16 18:08:36
不幸的是,确保OpenGL代码在目标硬件上工作的唯一方法是测试它。理论上,简单地编写符合标准的代码应该在任何地方都能工作,但遗憾的是,情况并不总是如此。
https://stackoverflow.com/questions/18823445
复制相似问题