18

我正在运行带有 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 甚至包括文档!)

4

3 回答 3

23

首先,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 的新版本随操作系统更新一起发布。只是微软没有看到支持 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()

现在有一些建议:您应该真正学会阅读文档(而不仅仅是略读)。我刚刚写的所有内容都在您链接的参考文献中进行了说明。

于 2013-07-30T23:22:53.757 回答
8

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

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

这篇文章包含一个方便的链接,指向名为OpenGL 加载库的 wiki 页面

于 2013-07-30T21:41:19.243 回答
4

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

笔记本电脑有一个带有 I5 proc 的 Intel IGP。

台式机有一个 Radeon 6950HD。

于 2013-07-30T21:21:01.557 回答