首先,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。所以正式你要做的是:
当然,如果您只想使用现代 OpenGL,这是相当乏味的。所以有些人开发了第三方工具来为你做事。对于程序员所关心的一切,这些工具的行为与 SDK 非常相似。到目前为止,最受欢迎的选择(但不幸的是,就 OpenGL 的前沿而言,它并非完全没有问题)是 GLEW。使用 GLEW 非常简单。我建议使用它静态链接:
- 从http://glew.sourceforge.net下载 GLEW
- 将 glew.c 和 glew.h 放在您的项目源文件旁边。
- 将 glew.c 添加到编译源列表;确保将
GLEW_STATIC
预处理器宏定义配置到您的项目全局编译器标志中。
- 使用
#include "glew.h"
代替#include <GL/gl.h>
- 在程序调用中创建 OpenGL 窗口之后
glewInit()
现在有一些建议:您应该真正学会阅读文档(而不仅仅是略读)。我刚刚写的所有内容都在您链接的参考文献中进行了说明。