【问题标题】:What OpenGL version to choose for cross-platform desktop application为跨平台桌面应用程序选择什么 OpenGL 版本
【发布时间】:2011-03-31 11:50:35
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案1】:

    较旧的英特尔芯片仅支持 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(如果您关心的是 Sandy-Bridge 之前的英特尔废话)、2.1(几乎适用于所有硬件)、3.3(适用于体面的硬件和闭源驱动程序)或 4.1 (出血边缘)。

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

    【讨论】:

    • 几天前我遇到了 Intel 芯片和 OpenGL 2.1 的问题。可能,符合 1.5 会更好,但着色器有时确实是必不可少的。
    • 我自己不使用 Apple 产品,但要补充一点:OS X 似乎仍然不支持比 OpenGL 2.1 更好的东西:O
    【解决方案2】:

    您可以继续使用 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 已经很旧了):)

    【讨论】:

    • +1 ES 2.0 似乎是功能(完全可编程并删除所有旧功能)和广泛兼容性的完美结合。
    【解决方案3】:

    我个人会选择 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 扩展具有相同的功能。

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-02-15
          • 2011-05-27
          • 1970-01-01
          • 1970-01-01
          • 2014-03-09
          • 2014-02-18
          • 2014-02-02
          相关资源
          最近更新 更多