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

标签 c++ windows api opengl

我正在运行带有 Visual Studio 2010 的 Windows 7。包含的 OpenGL 版本 (#include ) 是 1.1 版,我希望使用一个合理的当前版本——某种版本 3 或 4。

我需要做什么才能达到那种状态? OpenGL SDK 页面 http://www.opengl.org/sdk/似乎是说您不允许在 http://www.opengl.org/wiki/Getting_Started 下载 SDK 和 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 会做什么呢?好吧,它要求操作系统的某些部分如此慷慨,并使其可供程序使用。以最简单的形式(事后看来,这将是更好的选择,因为它可以省去很多像你这样的问题)这个界面只提供了一个功能:GetProcAddress .对于在 OpenGL 规范中找到的每个函数,您都可以通过该函数获得指向 OpenGL 驱动程序中实际事物的指针。但是,像大多数程序员一样懒惰,他们走简单的路说:“哦,好吧,OpenGL 的当前规范是 1.1 版,我们在接口(interface)库的表面上公开所有 OpenGL-1.1 怎么样。以及所有在我们通过 GetProcAddress 加载的扩展公开之后出现;毕竟,会有多少新功能......”。结果:很多。

无论如何,每个为操作系统提供支持的编译器都应该为操作系统附带的每个 API 提供接口(interface)库。对于 Windows 来说是 OpenGL-1.1。如果您想要 OpenGL 接口(interface)库上的实际版本提升,那将意味着操作系统更新。但这与 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()

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

关于c++ - 如何为 Windows C++ 安装当前版本的 OpenGL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17957325/

相关文章:

javascript - 在 Google map 上标记位置

windows - NodeJS : can't run package (windows)

security - 如何保护我的 API 服务免遭 api key 盗版

c++ - 使用 opencv 在 GPU 上调整图像大小会产生空输出矩阵

c++ - c++中sizeof运算符是如何实现的?

windows - 命令行窗口

java - 如何用另一个输出替换控制台中的最后一个输出?

java - 如何在 Spring Boot 中区分具有相同名称但不同查询参数的 edpoint

c++ - 需要帮助修复奇怪的 cin 行为

c++ - eclipse变量悬停中的Debian XFCE黑色背景