C++ 使用哪个版本的OpenGL?

C++ 使用哪个版本的OpenGL?,c++,opengl,version,C++,Opengl,Version,我目前运行的机器允许我在OpenGL 2.1中编程。如果我要制作一个程序,我应该使用当前OpenGL版本(如3.x/4.x)的强大功能还是使用2.1 另一个问题是:我如何判断我的计算机能运行的OpenGL的最高版本是什么 另一个问题是:只有升级视频卡才能让我在升级版的OpenGL中编程吗?很多嵌入式英特尔图形仅限于1.4或1.5 听说Mac OSX卡在2.1上了 所有Radeon和GeForce卡都可以执行3+(可能需要驱动程序更新) 您可以使用任何版本进行编程,但如果您的硬件不支持它,您最终将

我目前运行的机器允许我在OpenGL 2.1中编程。如果我要制作一个程序,我应该使用当前OpenGL版本(如3.x/4.x)的强大功能还是使用2.1

另一个问题是:我如何判断我的计算机能运行的OpenGL的最高版本是什么


另一个问题是:只有升级视频卡才能让我在升级版的OpenGL中编程吗?

很多嵌入式英特尔图形仅限于1.4或1.5

听说Mac OSX卡在2.1上了

所有Radeon和GeForce卡都可以执行3+(可能需要驱动程序更新)

您可以使用任何版本进行编程,但如果您的硬件不支持它,您最终将在软件渲染器下进行测试(速度慢!)。

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或更好。我在HD3300主板GPU上做了一些家庭开发工作,它工作得相当好

英特尔是个问题。英特尔的OpenGL驱动程序质量相当差。许多旧的英特尔计算机只能支持GL 1.4,这是DX9类之前的功能。它们确实支持一些高级扩展(着色器,但仅支持顶点着色器,因为它们在软件中运行)

最近的英特尔GPU稍好一些,但他们的GL驱动程序仍然有相当多的缺陷

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

MacOSX的世界有点不同。最近发布的MacOSXLion(10.7)增加了对OpenGL3.2的支持(遗憾的是,由于某些原因,它不是3.3)。苹果严格控制OpenGL在其平台上的工作方式,但希望他们能比最近更频繁地更新GL版本

所以在Mac电脑上,你真的有两个选择:2.1或3.2。请注意,Lion的3.2支持只公开了核心OpenGL功能。有关这意味着什么的详细信息,请参阅

您无法判断您的特定计算机的最高版本。这只是创建上下文时得到的版本。通常,除非您特别要求一个版本(即使这样,通常也不会),否则您将获得硬件和驱动程序能够处理的最高版本

哦,是的:OpenGL版本由视频卡的功能(和安装的驱动程序)控制

以下建议假设您正在开发一个供他人使用的重要应用程序。这不是用于小的演示应用程序或任何东西


一般来说,我建议不要显式地将代码限制在4.x。虽然4.x的采用率每天都在增加(NVIDIA和AMD都有两代支持4.x的硬件,AMD可能会在年底推出第三代。此外,AMD现在开始在其CPU中嵌入支持4.x的GPU),但仍然有很多3.x硬件。4.x并不能为您带来很多好处,如果4.x功能可用,您可以轻松添加代码路径以有条件地支持4.x功能。

为了使用OpenGL 3.x,您需要一个支持DirectX10的卡和支持DirectX10的适当驱动程序。 与DirectX相反的优点是,您还可以在WindowsXP上使用OpenGL3和OpenGL4。不需要7或Vista。 您应该使用哪个版本取决于您的受众。如果你的观众是游戏玩家,请继续,使用3。还不会做4个独家广告。DX11仍然很少见。 对于游戏玩家如何使用电脑以及他们拥有哪些硬件的初步了解,steam是一个很好的来源:

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

glGetString(GL_VERSION);
好的OpenGL3教程:

OpenGL 3.3 SDK参考:

希望这有点帮助:)

另一个问题是:我如何判断我的计算机能运行的OpenGL的最高版本是什么

我回答上述问题。 我看到了下面的工具,它本身非常完整,让我看到了我的系统目前支持的所有OpenGL版本(从1.0到它实际支持的版本)。以及可供我的系统使用的扩展。但不仅仅是ARB,它还包括NV、ATI、OES等


在Linux上,Intel DRI2/DRM驱动程序确实支持OpenGL 2.1和一些扩展。实际上,如果硬件不支持某个版本,但您仍尝试使用它,那么您将无法获得这些函数指针。你不会得到软件渲染;您将得到一个错误的函数指针/崩溃。或者你将枚举数传递给一个无法处理它的函数,你会得到一个GL_INVALID_ENUM错误。@datenwolf:哪一代的GMA?@Nicol:如果你使用硬件加速上下文,那么是的,新函数可能会失败。但是,如果您需要在没有硬件的情况下测试代码路径,可以使用软件渲染器。@Nicol Bolas:报告的OpenGL版本是2.1,扩展字符串也是如此。我想我现在最有可能使用2.1来支持尽可能多的视频卡,并在将来转到3.x。:)至少有AMD和nVidia,OpenGL版本由驱动程序版本决定。旧卡的速度可能会慢一些,但我认为它们仍然会运行4.1代码。或者你有其他经验吗?@Ben Voigt:我从来没有见过一张DX9级别的卡片宣传OpenGL 3.x。我从未见过DX10级别的卡宣传OpenGL4.x。我的DX10卡都没有暴露4.x,因为无论驱动程序版本如何,它们都无法处理它(是的,我是最新的)。AMD和NVIDIA都不想通过承诺功能然后在软件中运行来欺骗用户。我唯一一次看到这把小提琴