3
社区成员
发帖
与我相关
我的任务
分享这里整理 GLAD、GLFW、SDL2 的下载地址、OpenGL 版本选择,以及在 Visual Studio 中的配置方法。
| 库 | 下载地址 | 说明 |
|---|---|---|
| GLAD | https://glad.dav1d.de/ | 在线生成工具,根据需求生成对应的库文件 |
| GLFW | https://www.glfw.org/download.html | 下载 Windows 预编译库,选择 lib-vc2022 文件夹对应的版本 |
| SDL2 | https://github.com/libsdl-org/SDL/releases | 下载 SDL2-devel-2.30.8-VC.zip |
GLFW 下载注意事项:如果你的 Visual Studio 是 2022 版本,解压后使用 lib-vc2022 文件夹中的库文件;如果是 VS 2019,使用 lib-vc2019,以此类推。
SDL2 下载注意事项:需要下载 SDL2-devel-xxx-VC.zip 这个开发包,它包含了编译所需的头文件、库文件和运行时的 DLL。不要下成 SDL2-xxx-win32-x64.zip(那是纯运行包)。Release 2.30.8 · libsdl-org/SDL · GitHub
| 选项 | 推荐值 | 说明 |
|---|---|---|
| API | OpenGL 3.3 或 4.6 | 3.3 兼容性最好,4.6 是最新版 |
| Profile | Core | 核心模式,移除了旧版函数,与现代 GPU 配合更好 |
| Generate a loader | 必须勾选 | 生成函数加载代码 |
建议选择 OpenGL 3.3 Core。理由如下:
大多数显卡驱动都稳定支持 3.3
包含了 Shader、VAO、VBO 等现代特性
向下兼容,代码可以在更新版本上运行
Language:选择 C/C++
API:选择 OpenGL → 版本选择 3.3 或 4.6
Profile:选择 Core
确保 Generate a loader 被勾选
点击 GENERATE 按钮
下载生成的 glad.zip 文件
text
glad/
├── include/
│ ├── glad/glad.h ← 头文件(复制到项目)
│ └── KHR/ ← 跨平台支持(可选)
└── src/
└── glad.c ← 必须添加到项目编译
如何在 VS 中添加 glad.c:
右键项目 → 添加 → 现有项
选择 glad.c 文件
确认文件出现在解决方案资源管理器的源文件目录下
在 Windows 部分,下载预编译二进制文件(例如 glfw-3.4.bin.WIN64.zip)
解压到项目 libs\glfw\ 目录
text
libs/glfw/ ├── include/ │ └── GLFW/ │ └── glfw3.h ├── lib-vc2022/ ← 根据 VS 版本选 │ ├── glfw3.lib │ └── glfw3.dll └── (其他文件可删除)
VS 版本与文件夹对应:
| VS 版本 | 文件夹名 |
|---|---|
| VS 2022 | lib-vc2022 |
| VS 2019 | lib-vc2019 |
| VS 2017 | lib-vc2017 |
| VS 2015 | lib-vc2015 |
找到 release-2.30.8 版本
下载 SDL2-devel-2.30.8-VC.zip
text
libs/sdl2/
├── include/
│ └── SDL.h 等
└── lib/
├── x64/
│ ├── SDL2.lib
│ ├── SDL2main.lib
│ └── SDL2.dll
└── x86/ (如需要)
这是核心部分,以下所有配置都需要确保"平台"选择为 x64(或在解决方案平台下拉框中选择 x64)。
路径:项目属性 → C/C++ → 常规 → 附加包含目录
添加以下路径:
text
.\libs\glfw\include .\libs\glad\include .\libs\sdl2\include
说明:这个路径告诉编译器去哪里找
GLFW/glfw3.h和glad/glad.h等头文件。
路径:项目属性 → 链接器 → 常规 → 附加库目录
添加以下路径:
text
.\libs\glfw\lib-vc2022 ← 根据 VS 版本调整 .\libs\sdl2\lib\x64
说明:这个路径告诉链接器去哪里找
.lib库文件。
路径:项目属性 → 链接器 → 输入 → 附加依赖项
添加以下库文件:
text
glfw3.lib SDL2.lib SDL2main.lib opengl32.lib
说明:
opengl32.lib是 Windows 自带的 OpenGL 1.1 兼容库,但与 GLAD 配合使用是必要的。
| 库 | 需要的定义 | 场景 |
|---|---|---|
| GLFW | GLFW_DLL | 使用动态链接库时添加 |
| SDL2 | _CRT_SECURE_NO_WARNINGS | 解决安全函数警告 |
| 配置项 | 应该有的内容 |
|---|---|
| 平台 | x64(或 x86,保持一致) |
| 附加包含目录 | libs\glfw\includelibs\glad\includelibs\sdl2\include |
| 附加库目录 | libs\glfw\lib-vc2022libs\sdl2\lib\x64 |
| 附加依赖项 | glfw3.libSDL2.libSDL2main.libopengl32.lib |
| glad.c | 已添加到源文件中 |
使用 GLAD 时,先包含 GLAD 头文件,再包含 GLFW 头文件:
cpp
#include <glad/glad.h> // 必须第一个 #include <GLFW/glfw3.h> // 然后是 GLFW #include <SDL.h> // SDL 可以在后面
GLAD 与 GLFW/SDL 的配合:
| 库 | 初始化 GLAD 的方式 |
|---|---|
| GLFW | gladLoadGLLoader((GLADloadproc)glfwGetProcAddress) |
| SDL2 | gladLoadGLLoader((GLADloadproc)SDL_GL_GetProcAddress) |
编译完成后,需要将以下 DLL 复制到 可执行文件 (.exe) 所在目录:
| 库 | DLL 文件位置 |
|---|---|
| GLFW | libs\glfw\lib-vc2022\glfw3.dll |
| SDL2 | libs\sdl2\lib\x64\SDL2.dll |
如果不复制,运行时会报 0x8007007E 找不到模块的错误。
| 错误 | 可能原因 | 解决方案 |
|---|---|---|
无法打开源文件 "glad/glad.h" | 附加包含目录路径错误 | 检查 libs\glad\include 路径是否正确 |
无法打开源文件 "GLFW/glfw3.h" | 附加包含目录路径错误 | 检查 libs\glfw\include 路径 |
LNK2019 无法解析的外部符号 __imp_glfwInit | 链接器没找到 GLFW 库 | 检查附加库目录和附加依赖项 |
LNK2019 无法解析的外部符号 __imp_SDL_Init | 链接器没找到 SDL2 库 | 检查 SDL2.lib 是否在附加依赖项中 |
0x8007007E 找不到模块 | 运行时 DLL 缺失 | 将 glfw3.dll / SDL2.dll 复制到 exe 目录 |
用 GLM,理由很简单:
它是纯头文件,不需要编译 .lib,不需要链接
只包含你实际使用的函数,不会膨胀
数百万个项目验证过,没有 bug
语法与 GLSL 完全一致,写 shader 时特别方便
从这个国内镜像下载:https://github.com/g-truc/glm/releases
选择 glm-1.0.1-light.zip
解压后,把里面的 glm 文件夹(注意是包含 glm.hpp 的那个)复制到 CandyRenderEngine/libs/glm/
在项目属性 → C/C++ → 常规 → 附加包含目录 中添加 .\libs\glm
Texture.cpp 中使用了 stb_image.h,你需要下载这个单头文件库:
下载地址:https://github.com/nothings/stb/blob/master/stb_image.h
将 stb_image.h 放入 CandyRenderEngine 项目目录