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

ExO*_*uhr 15 c++ windows opengl api

我正在使用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甚至包含文档!)

dat*_*olf 21

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

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

无论如何,每个提供OS支持的编译器都应该为OS附带的每个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下载GLEW
  2. 将glew.c和glew.h放在项目源文件旁边.
  3. 将glew.c添加到已编译源列表中; 确保将GLEW_STATIC预处理器宏定义配置到项目全局编译器标志中.
  4. #include "glew.h"而不是#include <GL/gl.h>
  5. 在程序调用中创建OpenGL窗口之后 glewInit()

现在一些建议:你应该学习阅读文档(不仅仅是浏览它).我刚刚写的所有内容都在你链接的参考文献中说明.


Pet*_*erT 8

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

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

这段文章包含一个方便的链接,指向名为OpenGL Loading Library的wiki页面