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

7
我正在开发一些跨平台的桌面应用程序,需要使用大量的二维图形。我使用OpenGL 2.0规范,因为我需要顶点着色器。我喜欢3.2+核心API,因为它简单而强大。我认为3.2+核心可能是未来的选择。但我担心现在这个功能在某些平台上可能不可用(我的意思是旧的图形卡和缺乏现代Linux驱动程序)。也许,我应该使用类似于OpenGL ES 2.0的API,以便未来容易移植。
3.2+核心、显卡和Linux驱动程序的现状如何?
5个回答

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(曲面细分着色器)。

因此,您想要的版本是1.5(如果您关心早于Sandy Bridge的老旧英特尔硬件),2.1(适用于几乎所有硬件),3.3(适用于良好的硬件和闭源驱动程序)或4.1(激进的前沿版本)。

我已经使用#version 120编写了顶点和片段着色器,并且使用#version 330编写了几何着色器,以便更轻松地回退到旧硬件。


几天前我遇到了Intel芯片和OpenGL 2.1的问题。可能最好符合1.5,但有时着色器确实是不可或缺的。 - Yury
我自己不使用苹果产品,但有一件事要补充:OS X 似乎仍然不支持比 OpenGL 2.1 更好的东西 :O - Tronic

6
你可以继续使用OpenGL ES 2.0。即使ES表示嵌入式,这是一个好的方法,因为它消除了所有固定功能(如glBegin等):您正在使用OpenGL 2.x的子集。因此,如果您只考虑OpenGL ES 2.0编写软件,它将快速并且适用于大多数情况。
实际上,OpenGL ES 2.0和桌面GL可能会有一些差异,但我认为您不会使用到它们。如果支持扩展GL_ARB_ES2_compatibility,则具有完整嵌入式子集的“桌面”卡片(4个函数和一些常量)。
现在,真正的问题是您要支持多少年的硬件?仍然有很多非常老旧的硬件具有非常差的gl支持。最好支持较旧的硬件(OpenGL 2.0已经过时):)

+1 ES 2.0似乎是一个功能强大的组合(完全可编程并删除所有旧版功能),同时具有广泛的兼容性。 - Justin Meiners

2
我个人会选择使用OpenGL 3.3,并可选地回退到3.2和扩展(基本相同)。这是使用OpenGL 3.x最方便的方式,并且得到广泛支持。
现在已经不值得再针对3.1或3.0进行开发,除非你真的想在Sandy Bridge上运行(它仅支持3.0,尽管硬件非常能够做到3.3,但出于某些微不足道的原因)。此外,3.1和3.0在着色器代码方面有非常大的变化,如果您想支持多个版本,则可能导致维护难题(3.2和3.3没有这样的问题)。
每个支持3.2的硬件也都可以支持3.3,唯一的障碍可能是IHV没有提供最新的驱动程序,或者用户可能太懒以至于不更新。因此,您不能假设“3.3在任何地方都可以工作”。但老的驱动程序通常也通过ARB扩展具有相同的功能。

1

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


0

取决于你的目标市场的平均计算机配置。虽然说实话,现在OpenGL 3.2+已经非常普及了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接