Skip to main content

Command Palette

Search for a command to run...

Glad使用总结

Updated
1 min read

和传统的GLEW不同,GLAD类似springboot starter,是一个开源的按需生成OpenGL函数Loader的WEB服务,GLAD2的官方地址为https://gen.glad.sh/,GLAD1的生成地址是https://glad.dav1d.de/,二者的API差异很大,本文以GLAD2的使用为例

使用WEB服务生成代码:

进入GLAD2的WEB页面后,可按Generator(编程语言),OpenGL各API版本,如OpenGL, OpenGL ES, GLX,WGL等,选了API版本后,Extensions可按需选择,或使用ADD ALL一键加入所有扩展(推荐)

Options中有几个重要选项:

alias - 默认情况下,glad的OpenGL函数带glad_前缀,例如glEnable,需使用glad_glEnable,选中这个选项后,可直接使用glEnable,不需要带前缀

loader - 生成gladLoadXXX()这种不带参数的loader,如果不选,则需使用自己传入如glfwgetprocaddress这样的load function的版本,尤其是WGL,有大坑,这个选项非常推荐选上

点击generate后,会进入一个页面,包含include,src和glad.zip(下载后加入到项目中的代码),官方推荐的使用方式是将其中的*.h,*.c文件直接加入到自己项目中的源代码中,比如在add_execution/add_library时,如果需要编译成so/dll这样的动态链接库,需有以下几点要注意:

编译成动态链接库时,glad需定义GLAD_API_CALL_EXPORT_BUILD,否则不会导出函数,可使用target_add_definitions在CMakeLists.txt加入

使用glad动态链接库的程序,需定义GLAD_API_CALL_EXPORT,否则会链接失败,另外#include <glad/gl.h>需放在所有其它有#include <gl.h>之类包含了OpenGL的头文件之前的位置,否则会编译失败

动态链接时,程序中所有模块只需调用一次loader即可初始化OpenGL函数地址,可通过判断glad_glEnable函数指针是否为nullptr来判断是否需调用loader,WGL可通过判断相应的glad_wglXXX是否为nullptr来按需调用loader

More from this blog

解决QWidget用winId获取HWND而导致Qt程序无事件消息的问题

问题原因: 当对一个QWidget调用winId时,默认情况下,Qt会对该窗口进行Native化,从而导致如鼠标等事件被其它原生窗口接管,表现出来的现像就是窗口不响应任何事件 解决思路: 防止Qt窗口Native化 解决办法: 第一步,在创建QApplication对象之前设置: QApplication::setAttribute(Qt::AA_DontCreateNativeWidgetSiblings); //注意:Qt::AA_NativeWindows受环境变量 QT_USE_NATI...

Jul 7, 20251 min read

解决因OpenGL渲染窗口高宽比导致图形变形

在 OpenGL 中,由于窗口的 宽高比(aspect ratio) 与绘制内容的坐标系统不一致,图像会出现拉伸、压缩等变形现象。为了解决这个问题,可根据窗口的大小调整投影矩阵,确保图像在视觉上保持原始比例。 先通过glViewPort调整视口 void resizeGL(int w, int h) { glViewport(0, 0, w, h); } 再根据窗口高宽比,计算出合适的投影矩阵,这样体现出来的样式,就是截掉了宽高比之外的内容,显示的内容不变形,正圆就是正圆,不会被拉伸成...

Jun 18, 20251 min read

雷的部落格威力缩小版

29 posts

雷的部落格威力缩小版