为什么要使用'glad'库进行 opengl 初始化?

Why use 'glad' library for opengl initialization?

本文关键字:opengl 初始化 为什么 glad      更新时间:2023-10-16

我现在正在学习OpenGl,并在其上撰写一些几何抽象以进行个人用法。我希望我的代码是最大的便携式,并且希望在呼叫者代码中初始化GL上下文(通过FLTK,WXWIDGETS,WINAPI或其他任何受支持的平台)。

我现在正在阅读这篇流行文章:https://learnopengl.com/getting-started/creating-a-window

作者建议在那里使用Glad Library,因为此库提供了GL上下文的创建(这不适合我),并且也用于"检索功能的地址"(Quote:"因为有许多不同的OpenGL版本驱动程序,其大多数功能的位置在编译时不知道,需要在运行时查询。")。

我的问题是:

编译器真的无法从与GLED相关的.OBJ文件中获得我在Visual Studio的链接器设置中指定的OpenGL函数的地址?我真的需要使用wglGetProcAddress例程来参考OpenGL功能吗?是否可以像链接标头和.OBJ文件中的任何其他功能一样使用OpenGL函数?

作者建议在那里使用Glad Library,因为此库提供了GL上下文的创建(这不适合我)

不,很高兴不会以任何方式创建或管理GL上下文,而网站https://learnopengl.com/getting-started/creating-a-a-window否则从未宣称。他们将GLFW用于上下文和窗口管理。

编译器真的无法从我在Visual Studio的链接器设置中指定的GLES.OBJ文件获得OpenGL函数的地址?

no。

首先,您没有为链接器指定与OpenGL相关的.obj文件,但是在Windows上,您可以使用opengl32.lib,它是opengl32.dll的导入库文件,该文件随身携带Windows 95的Windows版本。

但是,此DLL不包含您通常使用的OpenGL实现,但它包含Microsoft的OpenGL 1.1 GDI软件栅格器。Windows上的实际OpenGL实现由您的图形驱动程序随附的可安装客户端驱动程序(ICD)提供。对于OpenGL 1.0和1.1功能,opengl32.dll将充当蹦床,并将调用转发到实际的ICD DLL。

如果要调用OpenGL 1.1 以外的任何OpenGL函数(并且是从1997年起),则您必须在每种情况下都使用OpenGL扩展机制,因为 opengl32.dll不提供这些入口点>当然不会找到编译器/链接器。