"模拟"最低OpenGL规格?

时间:2015-12-08 08:31:11

标签: opengl standards emulation

我们正在使用OpenGL 4.3。但是,我们担心我们会使用与我们的显卡配合使用的功能,但不会使用" minimal" OpenGL 4.3所需的规范。

是否有可能模仿最小行为?例如,要使显卡拒绝任何非标准纹理格式等? (也可能是软件,速度对于测试兼容性并不重要......)

更新

在最好的情况下,所有方面的最小设置都是完美的,因此保证应用程序适用于支持OpenGL 4.3的所有显卡。所以这个仿真模式应该:

  • 拒绝4.3
  • 中弃用的所有功能/扩展程序
  • 拒绝4.3以上的所有功能/扩展程序
  • 仅支持所需格式,不支持可选格式(例如纹理和渲染缓冲区)
  • 仅支持计算所需的最低精度
  • 支持的限制的最小值可以通过GetInteger查询(例如MAX_TEXTURE_IMAGE_UNITS为16)

2 个答案:

答案 0 :(得分:4)

有一个reference GLSL compiler可以解决这个问题的一半。但是,至于其余的...... AMD,NV和英特尔都有自己的合规问题和政策,关于他们对遵守规范的程度有多宽松。

我已经看到这些供应商中的每一个都隐含地启用了他们不应该拥有的OpenGL版本的扩展(没有编译器日志中的警告),这只是GLSL方面的事情。 Mesa可能是角色功能测试的最大公共因素,但对于早于4.3的OpenGL版本。 Mesa实际上是一种极简主义的实现,通常比大型硬件供应商落后几年。

理想情况下,如果您使用所请求的上下文版本不支持的功能,GL的debug output扩展(它是GL 4.3中的核心功能)将发出API警告。但是,每个供应商对此都有不同程度的支持; AMD通常是最好的。 NVIDIA甚至可能会要求您在发出任何真正有用的信息之前启用"OpenGL Expert" mode

如果所有其他方法都失败了,Khronos会发布一个XML file,您可以通过解析来确定哪个版本和/或扩展名由任何OpenGL常量,函数或枚举提供。我用半天的努力写了一个简单的项目:https://github.com/Andon13/glvs。你可以根据这个原则自己写一些验证器。

答案 1 :(得分:3)

有一些OpenGL Loading Libraries可以在某种程度上满足您的需求。 GLEW只为您提供一切,让您挑选自己想要的东西。但还有一些产生了更具体的装载机。

例如,

GL3w仅生成核心OpenGL函数,完全忽略扩展。

要获得更全面的解决方案,请glLoadGenGLad。这两个都是头文件和加载代码的生成器。但是它们都允许您准确指定所需的OpenGL版本以及您想要的确切扩展名。 GLad甚至有web application可以生成标题并将其下载到您的计算机。

为了充分披露,我写了glLoadGen。