GLAD 是一个开源的OpenGL 加载库(OpenGL Loader Library),它的主要作用是帮助开发者在不同的平台和环境下,动态加载 OpenGL 的函数指针,从而实现对 OpenGL 高级特性的访问。
为什么需要 GLAD?
OpenGL 的实现方式决定了它需要通过动态加载来访问函数,主要原因包括:
- 实现不统一 :OpenGL没有统一的 lib/dll 文件,而是由显卡驱动提供实现
- 版本兼容性 :不同版本的 OpenGL 提供的函数不同,需要根据运行环境动态获取
- 扩展机制 :OpenGL 的扩展函数数量庞大,且不同硬件支持情况不同
- 跨平台差异 :Windows(wgl)、Linux(glx)、macOS(agl/cgl)的函数加载方式不同 如果没有加载库,开发者需要手动编写大量平台相关的函数加载代码,而 GLAD 可以自动化这一过程。
获取 GLAD
直接前往网站中根据情况填写开发信息,即可下载:https://glad.dav1d.de/
- 注意勾选
Generate a loader - 直接下载压缩包即可
include_directories("glad/include")
file(GLOB glad_source "glad/src/*.c")
add_library(glad STATIC ${glad_source})初始化 GLAD
初始化流程
GLAD 通过窗口系统(如 GLFW)提供的函数(如glfwGetProcAddress)来获取 OpenGL 函数的地址,这些函数只有在OpenGL 上下文创建并激活后才能正常工作。
GLFW 初始化 → 创建窗口 → 设置上下文 → 初始化 GLAD → 使用 OpenGL 函数
初始化代码
if (!gladLoadGLLoader(reinterpret_cast<GLADloadproc>(glfwGetProcAddress)))
{
glfwTerminate();
return -1;
}注意事项
- 多窗口与多上下文 如果程序使用多个 OpenGL 上下文(如多窗口应用),需要为每个上下文单独初始化 GLAD。
- 上下文切换
如果在程序运行中切换上下文(通过
glfwMakeContextCurrent),通常不需要重新初始化 GLAD,但某些特殊情况可能需要重新加载函数。