为跨平台桌面应用程序选择哪个OpenGL版本

为跨平台桌面应用程序选择哪个OpenGL版本,opengl,opengl-es,opengl-es-2.0,opengl-3,Opengl,Opengl Es,Opengl Es 2.0,Opengl 3,我正在开发一个带有重二维图形的跨平台桌面应用程序。我使用OpenGL 2.0规范,因为我需要顶点着色器。我喜欢3.2+核心API,因为它简单且强大。我认为3.2+内核可能是未来的选择。但我担心,现在这种功能在某些平台上可能不可用(我指的是旧的图形卡和缺乏现代Linux驱动程序)。也许,我应该使用类似OpenGLES2.0的API来方便将来的移植 3.2+内核、卡和linux驱动器的状况如何?取决于目标市场的普通机器。尽管说实话,OpenGL 3.2+现在非常普遍。我个人会选择OpenGL 3.3

我正在开发一个带有重二维图形的跨平台桌面应用程序。我使用OpenGL 2.0规范,因为我需要顶点着色器。我喜欢3.2+核心API,因为它简单且强大。我认为3.2+内核可能是未来的选择。但我担心,现在这种功能在某些平台上可能不可用(我指的是旧的图形卡和缺乏现代Linux驱动程序)。也许,我应该使用类似OpenGLES2.0的API来方便将来的移植


3.2+内核、卡和linux驱动器的状况如何?

取决于目标市场的普通机器。尽管说实话,OpenGL 3.2+现在非常普遍。

我个人会选择OpenGL 3.3,也可以选择使用3.2+扩展(基本相同)。它是使用OpenGL 3.x最方便的方法,并且得到广泛支持

以3.1或3.0为目标已经不值得了,除非你真的想在sandy bridge上运行(由于一些模糊的原因,sandy bridge只支持3.0,尽管硬件非常适合3.3)。此外,3.1和3.0在着色器代码中也有相当大的变化,我认为,如果您想支持许多版本(3.2和3.3没有这样的问题),这将是维护的噩梦


每个支持3.2的硬件也可以支持3.3,唯一的障碍可能是IHV没有提供最新的驱动程序,或者用户可能懒得更新。因此,您不能假设“3.3适用于所有地方”。不过,较旧的驱动程序通常通过ARB扩展具有相同的功能。

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

较旧的英特尔芯片只支持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(镶嵌着色器)

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


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

您可以继续使用OpenGL ES 2.0。即使ES意味着嵌入,这也是一种很好的方法,因为它删除了所有固定的函数(glBegin等):您使用的是OpenGL2.x的子集。因此,如果您只考虑OpenGL ES 2.0来编写软件,那么它将非常快速,并且适用于大多数应用程序

在现实中,OpenGLES2.0和桌面GL可能有一些不同,但我不认为你会使用它。如果支持扩展
GL\u ARB\u ES2\u兼容性
,则您有一个支持完整嵌入子集的“桌面”卡。(4个func和一些const)


现在,真正的问题是您希望支持多少年的硬件?它们仍然是很多非常旧的硬件,具有非常差的gl支持。最好是支持较旧的(OpenGL 2.0已经很旧):

几天前,我遇到了英特尔芯片和OpenGL 2.1的问题。也许,遵循1.5会更好,但着色器有时确实是必不可少的。我自己并不使用苹果产品,但要补充一点:OSX似乎仍然不支持比OpenGL 2.1更好的功能:O+1 ES 2.0似乎是一个功能的伟大组合(完全可编程,并删除所有遗留功能)和广泛的兼容性。