我正在尝试了解显卡版本,OpenGL版本和API标头如何协同工作。我已经阅读了OpenGL论坛和其他地方的OpenGL 2.0 / 3.0 / 3.1崩溃,但目前还不清楚这对我作为开发人员(OpenGL新手)的影响。 (顺便说一句,我在这个问题中使用nVidia作为一个例子,因为我正在购买他们的一张卡片,但显然我希望与我开发的软件不相关供应商。)
首先,GPU需要支持OpenGL版本。但是例如nVidia具有支持OpenGL 3的旧显卡的驱动程序。这是否意味着这些驱动程序在软件中实现某些功能以模拟硬件中没有的新功能?
然后是API标头。如果我决定为OpenGL 3编写一个应用程序,我应该等到Microsoft发布带有支持该版本的标头的平台SDK的更新版本吗?如何选择使用哪个版本的API - 通过代码中的预处理器定义,或者更新到最新的平台SDK只需升级到最新版本(无法想象最后一个选项,但你永远不知道。 ..)。
向后兼容性怎么样?如果我编写一个针对OpenGL 1.2的应用程序,为其支持OpenGL 3的卡安装驱动程序的用户是否仍然可以运行它,或者我应该在我的应用程序中测试该卡的功能/支持的版本?阅读http://developer.nvidia.com/object/opengl_3_driver.html似乎证实,至少对于针对1.2编写的nVidia卡应用程序将继续工作,但这也意味着其他供应商可能会停止支持1.2 API。基本上,这将使我(可能)处于未来的位置,软件将无法使用最近的卡,因为它们不再支持1.2。但是,如果我今天为OpenGL 3甚至2开发,我可能会拒绝那些只支持gpu的用户1.2。
我不需要OpenGL中的奇特功能 - 我几乎不使用任何着色,固定管道对我来说很好(我的应用程序是类CAD)。什么是基于新应用程序的最佳版本,期望它将是一个长期存在的应用程序,并在未来几年内进行增量更新?
我可能忘记了在这种情况下相关的其他问题,我们非常感谢任何见解。
答案 0 :(得分:7)
答案 1 :(得分:2)
就驾驶员而言,我认为在某些情况下,它缺少用软件编写的功能。使用OpenGL(除了加速)之外的全部意义是写入API而不关心它是如何实现的。
根据我的经验,您不会声明OpenGL版本。 API版本之间的函数调用不重叠。请注意规范,例如,如果您调用2.0方法,您的应用程序的最低版本就变为2.0。我有针对OpenGL(愚蠢的旧太阳视频卡)编写的显示应用程序,它在全新的nvidia 200系列卡上运行得很好。
我认为无论如何都不能保证api将来不会改变;特别是如果你不控制它。当我们使用OpenGL 6.4时,您的应用程序可能会在10年后停止运行。希望您已经编写了一个足够好的应用程序,客户愿意为升级付费。
答案 2 :(得分:0)
这位研究员MarK J. Kilgard自90年代以来一直在openGL上发布nVidia源代码和文档,并代表游戏硬件中的两个大腕之一。
// --------------------------------------------- ---------------------------------------- ...... OpenGL应用程序“错误”使用立即模式的想法过于热心。 OpenGL 3.0规范甚至在OpenGL中标记立即模式以“弃用”(无论这意味着什么!);这种极端主义是适得其反和愚蠢的。鼓励良好的API使用的正确方法不是试图弃用或禁止API使用,而是教育开发人员在特定情况下教授正确的API使用。