OpenGL入门配置指南:GLFW和GLAD的详细配置步骤
OpenGL入门配置指南:GLFW和GLAD的详细配置步骤
OpenGL是一个强大的跨平台图形渲染API,广泛应用于游戏开发、科学可视化、虚拟现实等领域。在实际开发中,GLFW和GLAD是两个非常重要的工具。本文将详细介绍如何配置GLFW和GLAD,帮助新手快速搭建OpenGL开发环境。
前言
OpenGL(Open Graphics Library)是一个强大的跨平台图形渲染 API,广泛应用于游戏开发、科学可视化、虚拟现实等领域。它提供了一系列函数,允许开发者直接与显卡硬件交互,从而实现高效的 2D 和 3D 图形渲染。然而,OpenGL 本身并不直接提供窗口管理、输入处理等功能,因此在实际开发中,我们通常需要借助一些第三方库来简化这些任务。
在 OpenGL 开发中,GLFW 和 GLAD 是两个非常重要的工具。
本文将详细介绍如何配置 GLFW 和 GLAD,帮助新手快速搭建 OpenGL 开发环境。
一、GLFW配置
1. GLFW 的作用
GLFW 是一个轻量级的库,专门用于创建和管理窗口,并处理输入事件。它的主要功能包括:
窗口管理:创建 OpenGL 窗口,支持全屏模式和窗口模式。
输入处理:处理键盘、鼠标和游戏手柄的输入事件。
上下文管理:创建和管理 OpenGL 上下文,支持指定 OpenGL 版本和模式(核心模式或兼容模式)。
跨平台支持:支持 Windows、macOS、Linux 等主流操作系统。
2.为什么需要 GLFW?
OpenGL 本身并不提供窗口管理或输入处理功能。如果没有 GLFW,开发者需要手动编写平台相关的代码来创建窗口和处理输入,这既繁琐又容易出错。GLFW 提供了一个统一的 API,隐藏了不同平台的底层细节,极大地简化了开发流程。
3.构建GLFW
3.1下载源代码包
GLFW的源代码包可以从它的官网上进行下载(GLFW官网:https://www.glfw.org/download.html)
其实GLFW官网上针对不同的操作系统分别提供了两种版本,分别是源代码版本和二进制版本。
这两者各有优缺点:
1.二进制版本
二进制版本是 GLFW 官方预先编译好的库文件,可以直接下载并集成到你的项目中。
优点:简单方便、开箱即用
缺点:二进制版本通常是针对特定平台和编译器编译的。例如,Windows 上的二进制版本可能是用 Visual Studio 编译的,如果你使用的是 MinGW 或其他编译器,可能会出现兼容性问题。并且,二进制版本是预先编译好的,无法根据需求自定义编译选项(如启用特定功能或优化)
2.源代码版本
源代码版本是GLFW的完整源代码,开发者需要自己编译生成库文件。
优点:源代码版本可以在任何支持的平台和编译器上编译,适合使用非主流编译器或自定义编译选项的开发者。可以根据需要自定义编译选项,例如启用或禁用特定功能、优化级别等。如果遇到问题,可以直接调试 GLFW 的源代码,或者根据需求修改源代码。
缺点:编译源代码需要配置编译环境(如 CMake、编译器工具链等),对初学者来说可能有一定门槛。
本章选择使用源代码版本进行配置
进入网站后,点击Source Package进行下载
3.2 编译GLFW源代码包
下载完成之后,使用CMake进行编译,这里不过多赘述CMake的安装,想要安装CMake的可以点击这里。
可以根据自身系统版本选择对应版本,为了方便我选择有GUI的版本,我这里选择的是windows x64版本的安装包(GUI版本)。
CMake安装完成之后,使用CMake来编译之前下载好的GLFW安装包。
之前下载好的压缩包压缩完成后放在自定义位置,我这里放在了F盘。
上图是GLFW源代码包中的内容。
CMake需要一个源代码目录和一个存放编译结果的目标文件目录。源代码目录我们选择GLFW的源代码的根目录,然后我们新建一个 build 文件夹,选中作为目标目录。
选择完之后点击Configure按钮会弹出下面的提示框。
在这里主要选择你对应的IDE环境,我这里使用的是vs2022。
然后点击Finish,会出现下图的界面。
这里点击Generate进行生成。
生成完成之后的build文件夹内应该有上述文件,我们用IDE打开GLFW.sln进入项目。
因为CMake已经配置好了项目,并按照默认配置将其编译为64位的库,所以我们直接点击Build Solution(生成解决方案)按钮,然后在build/src/Debug文件夹内就会出现我们编译出的库文件glfw3dll.lib。
3.3 项目链接GLFW
在链接之前,首先在自定义位置创建一个OpenGL文件夹(我这里放在了F盘),在里面创建lib和include两个文件夹。
将之前编译的库文件glfw3dll.lib放在lib文件夹内,将glfw-3.4\include中的内容放在include文件夹内。
然后首先进入Project Properties(工程属性,在解决方案窗口里右键项目),然后选择VC++ Directories(VC++ 目录)选项卡(如下图)。在下面的两栏添加目录:
现在VS可以找到所需的所有文件了。最后需要在Linker(链接器)选项卡里的Input(输入)选项卡里添加glfw3dll.lib这个文件:
要链接一个库我们必须告诉链接器它的文件名。库名字是glfw3dll.lib,我们把它加到Additional Dependencies(附加依赖项)字段中(手动或者使用选项都可以)。这样GLFW在编译的时候就会被链接进来了。
二、GLAD配置
1.GLAD的作用
GLAD 是一个用于加载 OpenGL 函数指针的库。它的主要功能包括:
加载 OpenGL 函数:在运行时动态加载 OpenGL 核心函数和扩展函数。
生成加载代码:通过 GLAD 的在线服务或命令行工具,生成针对特定 OpenGL 版本的加载代码。
跨平台支持:支持 Windows、macOS、Linux 等主流操作系统。
2.为什么需要 GLAD?
OpenGL 的函数指针在运行时由显卡驱动程序提供,不同平台和显卡的 OpenGL 实现可能不同。如果没有 GLAD,开发者需要手动加载这些函数指针,这既繁琐又容易出错。GLAD 自动生成加载代码,简化了这一过程。
3.配置glad
GLAD是一个开源的库,并且GLAD的配置与大多数的开源库有些许的不同,它使用了一个在线服务。在这里我们能够告诉GLAD需要定义的OpenGL版本,并且根据这个版本加载所有相关的OpenGL函数。
打开GLAD的在线服务,将语言(Language)设置为C/C++,在API选项中,选择3.3以上的OpenGL(gl)版本(如果配置足够,更新的版本也能用)。之后将模式(Profile)设置为Core,并且保证选中了生成加载器(Generate a loader)选项,都选择完之后,点击生成(Generate)按钮来生成库文件。
点击生成(Generate)按钮之后应该提供给你了一个zip压缩文件,包含两个头文件目录,和一个glad.c文件。将两个头文件目录(glad和KHR)复制到之前创建的OpenGL\Include文件夹中(或者增加一个额外的项目指向这些目录),并添加glad.c文件到你的工程中。
测试验证
为了验证是否成功安装了上述版本,我写了一段代码来验证。
#include <glad/glad.h>
#include <GLFW/glfw3.h>
#include <iostream>
using namespace std;
int main() {
// 初始化 GLFW
if (!glfwInit()) {
cout << "Failed to initialize GLFW" << endl;
return -1;
}
// 配置 GLFW
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3); // 设置主版本号
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3); // 设置次版本号
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
// 创建窗口
GLFWwindow* window = glfwCreateWindow(800, 600, "LearnOpenGL", NULL, NULL);
if (window == NULL) {
cout << "Failed to create GLFW window" << endl;
glfwTerminate();
return -1;
}
glfwMakeContextCurrent(window);
// 初始化 GLAD
if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress)) {
cout << "Failed to initialize GLAD" << endl;
return -1;
}
// 设置视口大小
glViewport(0, 0, 800, 600);
// 主循环
while (!glfwWindowShouldClose(window)) {
// 处理输入事件
glfwPollEvents();
// 渲染代码
glClearColor(0.2f, 0.3f, 0.3f, 1.0f); // 设置清屏颜色
glClear(GL_COLOR_BUFFER_BIT); // 清除颜色缓冲区
// 交换缓冲区
glfwSwapBuffers(window);
}
// 清理资源
glfwDestroyWindow(window);
glfwTerminate();
return 0;
}
如果成功安装并运行上述代码会出现一个OpenGL的界面框。如下图所示。
总结
通过配置 GLFW 和 GLAD,可以快速搭建一个 OpenGL 开发环境。GLFW 提供了窗口管理和输入处理功能,而 GLAD 则简化了 OpenGL 函数的加载过程。这两个库的结合使得 OpenGL 开发更加高效和便捷。