我正在Windows 7和Visual Studio 2010上运行。包含的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和 header 的程序包。我正在使用DirectX。 (实际上,DirectX SDK甚至包括文档!)
最佳答案
首先,OpenGL并不是集中管理的库和实现(与DirectX相对),这就是为什么您不能下载 SDK的的原因,因为这不是OpenGL的工作方式。 OpenGL本身只是一堆描述驱动程序提供和程序可以使用的API的文档。但是,API的实际实现存在于操作系统的上下文中。如果您希望您的API独立于操作系统,那么这会使事情变得有些困难。 DirectX的操作很简单,因为它仅针对一种特定的操作系统而设计。该操作系统是Windows,这意味着DirectX可以针对部分基础操作系统编写。这使得SDK的开发易于管理。
那么OpenGL会做什么呢?好吧,这要求操作系统的某些部分必须足够大,并可供程序使用。在最简单的形式中(事后看来,这将是更好的选择,因为它可以保存像您这样的许多问题),该接口(interface)将只提供一个功能:GetProcAddress
。对于OpenGL规范中找到的每个函数,您都可以通过该函数获得指向OpenGL驱动程序中实际内容的指针。但是,由于大多数程序员都懒惰,他们走了简单的路,说道:“哦,好吧,当前版本为OpenGL的1.1版本,我们如何在接口(interface)库的表面上公开所有OpenGL-1.1。通过GetProcAddress
加载的扩展来公开;毕竟,会有多少新功能……”。结果:很多。
无论如何,每个提供对操作系统支持的编译器都应该为操作系统附带的每个API提供接口(interface)库。适用于Windows的是OpenGL-1.1。如果要在OpenGL接口(interface)库上使用实际的版本,那将意味着操作系统更新。但这与DirectX没什么不同,DirectX随操作系统更新一起提供了新的DirectX版本。只是微软没有看到支持OpenGL的理由。因此OpenGL-1.1是表面上可见的,我们必须对其进行处理。并且由于编译器附带了它,因此没有必要提供实际的SDK来下载,因为在编译器安装中已经有所有必要的东西。
好的,那么如何从更高版本的OpenGL中获取这些功能呢?好吧:GetProcAddress
。这是官方的方法。并且由于实际的细节取决于所讨论的OS,但是OpenGL是与OS无关的,因此根本就无法使用最终的 OpenGL SDK。因此,正式地,您要做的是:
GetProcAddress
加载函数指针当然,如果您只想使用现代OpenGL,这将非常乏味。因此,有些人开发了第三方工具来为您做事。对于您所关心的一切,这些工具的行为都非常像SDK。到目前为止,最流行的选择是GLEW(但不幸的是,就OpenGL的尖端而言,它并不是完全没有问题)。使用GLEW非常容易。我建议使用它静态链接:
GLEW_STATIC
预处理程序宏定义配置到项目的全局编译器标志中。 #include "glew.h"
代替#include <GL/gl.h>
glewInit()
现在提供一些建议:您应该真正学会阅读文档(而不仅仅是浏览)。我刚才写的所有内容都在您链接的引用资料中陈述。
关于c++ - 如何为Windows C++安装最新版本的OpenGL?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17957325/