为跨平台桌面应用程序选择什么OpenGL版本

时间:2011-03-31 11:50:35

标签: opengl opengl-es opengl-es-2.0 opengl-3

我正在开发一些带有大量二维图形的跨平台桌面应用程序。我使用OpenGL 2.0规范,因为我需要顶点着色器。我喜欢3.2+核心API,因为它的简单性和强大功能。我认为3.2+核心可能是未来的选择。但我担心现在某些平台上可能无法使用此功能(我的意思是旧的显卡和现代Linux驱动程序缺乏(?))。也许,我应该使用类似OpenGL ES 2.0的API,以便将来轻松移植。

3.2+核心,卡和Linux驱动器的状态是什么?

5 个答案:

答案 0 :(得分:6)

较旧的英特尔芯片仅支持OpenGL 1.5。后来的筹码(大约两年前)有2.1,但表现差于1.5。 Sandy Bridge声称支持“OpenGL 3”而没有说明它是否能够做到3.3(如Damon建议的那样),但Linux驱动程序现在只做2.1。所有具有闭源驱动程序的远程Radeons和Nvidia硬件都支持3.3(几何着色器)和400-500系列支持4.1(tesselation着色器)。

因此,您想要的版本是1.5(如果您关心Sandy-Bridge Intel crap之前),2.1(几乎所有硬件),3.3(适用于体面硬件和闭源驱动程序)或4.1(前沿)。

我使用#version 120编写的顶点和片段着色器以及用#version 330编写的几何着色器,以便更容易回退旧硬件。

答案 1 :(得分:6)

您可以继续使用OpenGL ES 2.0。即使ES意味着嵌入,这也是一个很好的方法,因为它删除了所有固定的函数(glBegin等等):你正在使用OpenGL 2.x的一个子集。因此,如果您只考虑OpenGL ES 2.0来编写软件,它将会很快并且可以在大多数情况下工作。

实际上,OpenGL ES 2.0和桌面GL可能有一些区别,但我不认为它会是你将要使用的东西。如果支持扩展程序GL_ARB_ES2_compatibility,则您拥有支持完整嵌入子集的“桌面”卡。 (4个功能和一些常量。)

现在,真正的问题是你想要支持多少年的硬件?它们仍然是许多非常旧的硬件,支持非常差。最好的是支持较旧的(OpenGL 2.0已经陈旧):)

答案 2 :(得分:2)

我个人会选择OpenGL 3.3,可选择使用3.2 plus扩展的回退(基本相同)。这是使用OpenGL 3.x最方便的方式,并得到广泛支持。

目标3.1或3.0不再值得,除非你真的想在沙桥上运行(由于某些模糊的原因只支持3.0,尽管硬件能够做到3.3)。另外3.1和3.0在着色器代码中有非常大的变化,如果你想支持许多版本(在3.2和3.3没有这样的问题),我认为这是一个维护噩梦。

支持3.2的每个硬件也可以支持3.3,唯一的障碍可能是IHV不提供最近的驱动程序或者用户可能懒得更新。因此,你不能假设“3.3无处不在”。不过,旧的驱动程序通常会通过ARB扩展程序具有相同的功能。

答案 3 :(得分:1)

Mac OS X目前不支持GL-3上下文。今年夏天可能会改变这种情况,但我建议坚持使用GL-2加扩展。

答案 4 :(得分:0)

取决于目标市场的普通机器。虽然说实话,OpenGL 3.2+现在已经无处不在。