7

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

3.2+ 内核、显卡和 linux 驱动程序的情况如何?

4

5 回答 5

6

较旧的英特尔芯片仅支持 OpenGL 1.5。后来的芯片(大约从两年前开始)有 2.1,但性能比 1.5 差。Sandy Bridge 声称支持“OpenGL 3”,但没有具体说明它是否能够执行 3.3(正如 Damon 建议的那样),但 Linux 驱动程序目前仅支持 2.1。所有带有闭源驱动程序的最新 Radeon 和 Nvidia 硬件都支持 3.3(几何着色器),而 400-500 系列支持 4.1(镶嵌着色器)。

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

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

于 2011-06-15T10:09:47.763 回答
6

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

实际上,OpenGL ES 2.0 和桌面 GL 可能有一些不同,但我认为您不会使用它。如果支持扩展GL_ARB_ES2_compatibility,则您有一个支持完整嵌入子集的“桌面”卡。(4个func和一些const。)

现在,真正的问题是您要支持多少年的硬件?他们仍然有很多非常旧的硬件,对 gl 的支持很差。最好是支持不太旧的(OpenGL 2.0 已经很旧了):)

于 2011-06-15T22:03:44.027 回答
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 扩展具有相同的功能。

于 2011-03-31T12:23:20.493 回答
1

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

于 2011-03-31T13:29:30.790 回答
0

取决于您的目标市场的平均机器。虽然老实说,OpenGL 3.2+ 现在相当普遍。

于 2011-03-31T11:54:14.207 回答