如何为Windows C ++安装当前版本的OpenGL?

时间:2013-07-30 21:01:07

标签: c++ windows api opengl

我正在使用Visual Studio 2010运行Windows 7.包含OpenGL的版本(#include)是版本1.1,我想使用合理的当前版本 - 某种版本3或4。

为了达到那个州,我需要做什么? http://www.opengl.org/sdk/上的OpenGL SDK页面似乎表示您不允许下载SDK,http://www.opengl.org/wiki/Getting_Started处的OpenGL wiki表示您已经拥有它,如果您没有有它,它指向你可以下载显卡制造商的DLL的网站。但是我肯定不需要为我将要使用的每个显卡构建一个不同版本的游戏。

StackOverflow似乎也没有任何东西,至少没有以我能遵循的方式措辞。我只想要一个我可以运行的安装程序的下载链接,这将为我提供一个合理的最新OpenGL API ...我该去哪里获取它?

更新:OpenGL似乎具有某种类型的同义词,它不涉及拥有SDK - 即.DLL,.lib和头文件包。我正在使用DirectX。 (事实上​​,DirectX SDK甚至包含文档!)

3 个答案:

答案 0 :(得分:20)

首先,OpenGL不是一些集中管理的库和实现(与DirectX相对),这就是为什么你无法下载 SDK,因为这不是OpenGL的工作原理。 OpenGL本身只是一堆描述驱动程序提供的API和程序可以使用的文档。但是,API的实际实现存在于操作系统的上下文中。如果您希望您的API独立于操作系统,这会让事情变得有点困难。 DirectX很容易,因为它只适用于一个特定的操作系统。该操作系统是Windows,这意味着可以针对底层操作系统的某些部分编写DirectX。这使得SDK的开发可管理。

那么OpenGL会做什么呢?嗯,它要求操作系统的某些部分是如此慷慨,并使其可用于该程序。以最简单的形式(事后看来,这将是更好的选择,因为它可以保存像你这样的许多问题),这个界面只提供了一个函数:GetProcAddress。对于OpenGL规范中的每个函数,您可以通过该函数获得指向OpenGL驱动程序中实际内容的指针。但是,懒得像大多数程序员一样,他们走得很简单并且说:“哦,好吧,OpenGL的当前版本在版本1.1,我们如何在接口库的表面上公开所有OpenGL-1.1。那么一切在我们通过GetProcAddress加载的扩展程序公开之后出现;毕竟,将会有多少新功能......“。事实证明:很多。

无论如何,每个为操作系统提供支持的编译器都应该为操作系统附带的每个API提供接口库。适用于Windows的是OpenGL-1.1。如果您想在OpenGL接口库上实际版本颠簸,那将意味着操作系统更新。但这与DirectX没有什么不同,DirectX是新的DirectX版本随OS更新发布的。只是微软没有理由支持OpenGL。所以OpenGL-1.1是表面上可见的,我们必须处理它。而且由于它包含在编译器中,所以没有理由提供实际的SDK下载,因为在编译器安装中已经有了必要的所有内容。

好的,那么如何从以后的版本的OpenGL中获取这些功能呢?好吧:GetProcAddress。这是正式的做法。而且由于实际细节取决于相关操作系统,但OpenGL与操作系统无关,因此根本不可能是明确的 OpenGL SDK。所以你要正式做的是:

  • http://opengl.org/registry
  • 下载更高版本的OpenGL标头
  • 对于您要使用的每个函数,定义一个函数指针变量来保存它
  • 使用GetProcAddress
  • 加载函数指针

当然,如果您只是想使用现代OpenGL,这是相当繁琐的。所以有些人开发了第三方工具来为你做事。对于那些与程序员有关的事情,这些工具的行为非常类似于SDK。到目前为止最受欢迎的选择(但不幸的是,关于OpenGL的前沿,它并非完全无故障)是GLEW。使用GLEW非常简单。我建议使用静态链接:

  1. http://glew.sourceforge.net
  2. 下载GLEW
  3. 将glew.c和glew.h放在项目源文件旁边。
  4. 将glew.c添加到已编译源列表中;确保将GLEW_STATIC预处理程序宏定义配置到项目全局编译器标志中。
  5. 使用#include "glew.h"代替#include <GL/gl.h>
  6. 在程序中创建OpenGL窗口后立即调用glewInit()
  7. 现在提出一些建议:你应该学会阅读文档(而不仅仅是浏览它)。我刚刚写的所有内容都在你链接的参考文献中说明。

答案 1 :(得分:8)

让我通过引用您提供的链接来回答

  

对于您熟悉的大多数库,您只需#include一个头文件,确保库链接到您的项目或makefile,这一切都有效。 OpenGL不能那样工作。   由于最终与此讨论无关的原因,您必须通过特定于平台的API调用手动加载函数。 这个样板工作是通过各种OpenGL加载库完成的;这些使这个过程顺利进行。强烈建议您使用

此段落包含指向名为OpenGL Loading Library

的Wiki页面的便捷链接

答案 2 :(得分:4)

就我在OpenTK框架(C#)和JOGL框架(Java)中的工作而言,您的OpenGL版本由您的显卡决定。我知道我的笔记本电脑仅在我的桌面上支持OpenGL 1.1,它支持最新版本。

笔记本电脑配有英特尔IGP和I5程序。

桌面有一个Radeon 6950HD。