Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
&引用;仿效;最小OpenGL规格?_Opengl_Standards_Emulation - Fatal编程技术网

&引用;仿效;最小OpenGL规格?

&引用;仿效;最小OpenGL规格?,opengl,standards,emulation,Opengl,Standards,Emulation,我们正在使用OpenGL4.3。然而,我们担心我们正在使用的功能与我们的图形卡一起工作,但不符合OpenGL 4.3的“最低”要求 是否有可能模拟最低行为?例如,使图形卡拒绝任何非标准纹理格式等。?(也可能在软件中,速度与测试兼容性无关…) 更新 在最好的情况下,所有方面的最小设置都是完美的,因此可以保证应用程序在所有支持OpenGL 4.3的图形卡上工作。因此,这种仿真模式应该: 拒绝4.3中不推荐的所有功能/扩展 拒绝所有高于4.3的功能/扩展 仅支持必需的格式,不支持可选格式(例如纹理和

我们正在使用OpenGL4.3。然而,我们担心我们正在使用的功能与我们的图形卡一起工作,但不符合OpenGL 4.3的“最低”要求

是否有可能模拟最低行为?例如,使图形卡拒绝任何非标准纹理格式等。?(也可能在软件中,速度与测试兼容性无关…)

更新

在最好的情况下,所有方面的最小设置都是完美的,因此可以保证应用程序在所有支持OpenGL 4.3的图形卡上工作。因此,这种仿真模式应该:

  • 拒绝4.3中不推荐的所有功能/扩展
  • 拒绝所有高于4.3的功能/扩展
  • 仅支持必需的格式,不支持可选格式(例如纹理和渲染缓冲区)
  • 仅支持计算所需的最小精度
  • 具有可通过GetInteger查询的支持限制的最小值(例如,最大纹理图像单位为16)
有一种方法可以解决这个问题的一半。但是,至于其他的。。。AMD、NV和Intel都有自己的法规遵从性问题和政策,关于他们对遵守规范的信任程度

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

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


如果所有这些都失败了,那么您可以解析Khronos发布的一个OpenGL常量、函数或枚举器的版本和/或扩展。我写了一个简单的项目,用半天的时间完成这项工作:。你可以根据这一原理自己编写某种验证器。

有许多验证器可以在一定程度上满足你的需要。GLEW只是给你一切,让你挑选你想要的。但也有其他方法生成更具体的加载程序

例如,只生成核心OpenGL函数,完全忽略扩展

对于更全面的解决方案,有或。这两个都是标头和加载代码的生成器。但它们都允许您精确地指定您想要的OpenGL版本以及您想要的扩展。很高兴甚至有一个可以生成标题并将其下载到您的计算机上的工具


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

我现在不能写完整的答案,也不能确认我的陈述。但是,在创建上下文时,需要将上下文设置为核心概要文件,定义要使用的版本并禁用前向兼容性。这应该将您的函数精确限制为指定的版本。如何做到这一点取决于您如何创建上下文。