获取 OpenGL

关于 OpenGL 的一个最常见的误解是,它是一个可以从第三方来源安装的库。这种误解导致了“如何安装 OpenGL”或“在何处下载 OpenGL SDK”形式的许多问题。

这不是 OpenGL 如何进入计算机系统的方式。OpenGL 本身仅仅是一组关于实现必须遵循的命令的规范。所以重要的是实施。目前,OpenGL 实现是 GPU 驱动程序的一部分。当新的 GPU 编程接口允许真正实现 OpenGL 作为库时,这可能会在未来发生变化,但是现在它是针对图形驱动程序的编程 API。

当 OpenGL 首次发布时,除了源自 Sun Irix 之外,API 还以某种方式进入了 Windows,Solaris 和 Linux(LSB-4 桌面)的 ABI(应用程序二进制接口)合同。Apple 遵循并实际上将 OpenGL 集成到 MacOS X 中,以至于可用的 OpenGL 版本与安装的 MacOS X 版本紧密耦合。这具有显着的效果,这些操作系统的系统编程环境(即本机针对这些系统的编译器和链接器工具链) 必须提供 OpenGL API 定义。这样就没有必要为 OpenGL 实际安装 SDK。假设安装了目标 ABI 之后的构建环境,在技术上可以在这些操作系统上编程 OpenGL 而无需安装专用 SDK。

这些严格的 ABI 规则的副作用是,通过绑定接口公开的 OpenGL 版本是目标平台上运行的程序可能预期可用的最低公分母。因此,现代 OpenGL 功能将通过扩展机制进行访问,该机制将分别进行深入介绍。

Linux

在 Linux 中,为系统的不同方面划分开发包是很常见的,因此可以单独更新这些包。在大多数 Linux 发行版中,OpenGL 的开发文件包含在专用包中,该包通常是桌面应用程序开发元包的依赖项。所以安装 Linux 的 OpenGL 开发文件通常需要安装桌面开发元软件包。*

微软 Windows

默认情况下,自 Windows NT-4 和 Windows 95B(均为 1997 年)以来,每个 Windows 版本都附带了 API 绑定库 opengl32.dll(对于 32 位和 64 位版本的 Windows 都是如此)。但是,此 DLL 不提供实际的 OpenGL 实现(除了软件回退,其唯一目的是在没有安装其他 OpenGL 实现的情况下充当程序的安全网)。此 DLL 属于 Windows,不得更改或移动! 现代 OpenGL 版本作为所谓的可安装客户端驱动程序 (ICD)的一部分提供,并通过每个版本的 Windows 预安装的默认 opengl32.dll 进行访问。然而,微软内部决定通过 Windows Update 安装图形驱动程序 ** 不会安装/更新 OpenGL ICD。因此,自动安装驱动程序的 Windows 的全新安装缺乏对现代 OpenGL 功能的支持。要获得具有现代功能的 OpenGL ICD,必须直接从 GPU 供应商的网站下载图形驱动程序并手动安装。

关于开发,不必采取额外的步骤。遵循 Windows ABI 规范的所有 C / C++编译器都附带了标头和链接器存根(opengl32.lib),用于构建和链接使用 OpenGL 的可执行文件。