使用哪个版本的OpenGL?

23

我目前使用一台机器,可以让我在OpenGL 2.1中进行编程。如果我要制作一个程序,我应该使用当前的OpenGL版本,例如3.x/4.x还是使用2.1?

另外一个问题:我如何知道我的计算机可以运行的最高版本的OpenGL?

另一个问题:仅仅升级显卡是否允许我编写升级版的OpenGL程序?


这个问题似乎是与这个问题非常相似:http://gamedev.stackexchange.com/questions/31505/what-opengl-versions-to-learn-and-or-use - Anderson Green
4个回答

36

OpenGL版本(适用于AMD和NVIDIA GPU)大致对应硬件级别。2.x的OpenGL版本适用于DX9级别的硬件;3.x代表DX10级别,4.x代表DX11级别的硬件。因此,您选择的版本将限制您可以运行的代码。

通常情况下,您可以在商店中购买的任何AMD或NVIDIA GPU都将是3.x或更高版本(很可能是4.x)。即使来自AMD的集成GPU、主板或CPU也都是3.x或更高版本。我在一个HD 3300主板GPU上进行一些家庭开发工作,效果还不错。

Intel则有问题。Intel的OpenGL驱动程序质量相当差。许多旧的Intel机器只能支持GL 1.4,这是DX9级别之前的功能。它们支持一些较高级别的扩展(着色器,但只有顶点着色器,因为它们在软件中运行)。

更近期的Intel GPU要好一些,但它们的GL驱动程序仍然相当有漏洞。

以上描述了Windows的情况。Linux有些模糊,因为有来自NVIDIA / AMD的驱动程序和社区编写的开源驱动程序。后者通常不太好,但正在改进。这些通常适用于3.x级别的硬件。

MacOSX世界有些不同。最近发布的Mac OSX Lion(10.7)增加了对OpenGL 3.2的支持(可悲的是,不是3.3,由于某种原因)。苹果公司严格控制OpenGL在其平台上的工作方式,但希望他们将更频繁地更新GL版本。

因此,在Mac上,您真的只有两个选择:2.1或3.2。请注意,Lion的3.2支持仅暴露了核心OpenGL功能。有关此内容的详细信息,请参见此页面

您无法确定您特定计算机的最高版本能力。实际上仅有你创建一个上下文时所获得的版本。通常情况下,除非您明确请求版本(即使这样,通常也不会),否则将获得硬件和驱动程序可以处理的最高版本。

哦,对了:OpenGL版本受你的显卡能力(和安装的驱动程序)控制。

以下建议假设你正在开发一个你打算让别人使用的严肃应用程序。这不是针对小型演示应用程序或其他任何内容。

总的来说,我建议不要明确地限制你的代码为4.x版。虽然4.x版的采用率每天都在增加(NVIDIA和AMD均有2代硬件支持4.x版,并且第三代可能会在今年年底从AMD发布。此外,AMD现在开始嵌入4.x版GPU到他们的CPU中),但仍然存在许多3.x版硬件。4.x版并没有为您带来太多好处,如果可用,您可以轻松添加代码路径以有条件地支持4.x版功能。


至少具备AMD和nVidia的显卡,OpenGL版本由驱动程序版本确定。旧的显卡可能加速效果较差,但我认为它们仍然可以运行4.1代码。或者您有其他经验吗? - Ben Voigt
@Ben Voigt:我从未见过DX9级别的显卡宣传OpenGL 3.x。我从未见过DX10级别的显卡宣传OpenGL 4.x。我的所有DX10显卡都不能使用4.x,无论驱动程序版本如何(是的,我已经更新到最新)。AMD和NVIDIA都不想通过承诺功能然后在软件中运行来欺骗用户。唯一违反此规则的情况是,如果您使用NVIDIA的特殊软件驱动程序模式,则需要转到NVIDIA的控制面板来激活它。 - Nicol Bolas
啊,没事了,我一直以为Radeon HD 5xxx是DX10.1,而6xxx是DX11。而且5xxx肯定支持OpenGL 4.x。但现在我看到它是一个DX11级别的显卡,完全符合你说的。 - Ben Voigt
2
现在已经是2013年了,大约90%的Steam用户可以运行OpenGl 3.0,而由于操作系统限制,能够运行DX9的用户数量则显著较少。参考:http://www.gdcvault.com/play/1017850/(跳转到第14分钟查看有用的图表!) - Philip Guin

4
为了使用OpenGL 3.x,您需要一张支持DirectX10并具有相应驱动程序支持的显卡。与DirectX相比的优势是,您也可以在Windows XP上使用OpenGL 3和4,而不需要7或Vista。您应该使用哪个版本取决于您的受众。如果您的受众是游戏玩家,请使用3版本,不要只使用4独占DX11仍然很少。要了解玩家如何使用计算机以及他们拥有什么硬件,请首先查看steam:

http://store.steampowered.com/hwsurvey

您可以通过运行以下命令确定版本:

glGetString(GL_VERSION);

一个好的OpenGL3教程: http://arcsynthesis.org/gltut/ OpenGL 3.3 SDK参考: http://www.opengl.org/sdk/docs/man3/ 希望这能有所帮助 :)。

我想我现在可能会使用2.1版本来支持尽可能多的显卡,并在将来转向3.x版本。 :) - Imnotanerd

3
很多嵌入式Intel显卡只支持1.4或1.5版本。据说Mac OSX被限制在2.1版本。所有的Radeon和GeForce显卡都可以支持3+版本(可能需要更新驱动程序)。您可以使用任何版本进行编程,但如果您的硬件不支持,最终测试将在软件渲染器下运行(速度慢!)。

2
在Linux上,Intel DRI2/DRM驱动程序支持OpenGL 2.1以及一些扩展。 - datenwolf
实际上,如果硬件不支持某个版本,但您仍然尝试使用它,则无法获取这些函数指针。您将无法获得软件渲染;您将获得错误的函数指针/崩溃。或者您将向无法处理枚举器的函数传递枚举器,然后您将收到GL_INVALID_ENUM错误。 - Nicol Bolas
@datenwolf:是针对哪一代的GMA? - Ben Voigt
@Nicol:如果您使用硬件加速上下文,那么是的,新功能可能会失败。但是,如果您需要在没有硬件的情况下测试代码路径,则可以使用软件渲染器。 - Ben Voigt
@Nicol Bolas:报告的OpenGL版本为2.1,扩展字符串也是如此。 - datenwolf
@Ben Voigt:我的笔记本(Intel(R) GM45 Express 芯片组)的 glxinfo 输出:http://pastebin.com/isybhCnB - datenwolf

0
在一个次要的问题上:我如何判断我的计算机可以运行的最高OpenGL版本是什么?
我回答上述问题。
我找到了下面这个工具,它非常完整,让我看到了我的系统当前支持的所有OpenGL版本(从1.0到实际支持的版本)。以及可用于我的系统使用的扩展。而且不仅限于ARB,还包括NV、ATI、OES等等。

http://www.realtech-vr.com/glview/download.html


2
GLEW 包含 visualinfoglewinfo,它们可以在 txt 文件中提供相同的信息。因此,没有必要访问一些不对齐页面内容的丑陋网站... - SigTerm

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