gpt4 book ai didi

opengl - 为什么 OpenGL 的设计方式必须在运行时手动加载实际功能?

转载 作者:行者123 更新时间:2023-12-04 23:41:58 28 4
gpt4 key购买 nike

我刚刚通读了一遍 Loading OpenGL Functions并想知道为什么 OpenGL 是这样设计的,而不是简单的方法,提供一个动态库和相应的头文件?

最佳答案

providing a dynamic library and the according headers?



那么你对“动态库”的工作方式有误解。

我们以Windows为例。在 Windows 上,如果您拥有的只是“一个动态库和相应的头文件”,您仍然无法加载该 DLL 并使用它。偶使用 __declspec(dllimport)标题中的声明是不够的。您还需要一件事:导入库。这是一个 .lib当您加载该 DLL 时,它可以有效地为您加载函数指针。

简而言之,它是语法糖:很好,但不是必需的。很像 OpenGL 加载库。

在 Linux 上,情况有点不同。 SO 文件更加独立;它们基本上在其中存储了相当于导入库的内容。因此,理论上您可以使用“动态库和相应的标题”。

即便如此,它仍然是糖;如果您愿意,您可以动态加载它们并手动获取函数指针。

所有这些糖理论上都可以与 OpenGL 一起使用。但是,让我们想想这样做的后果。

在 Windows 上,导入库静态链接到您的应用程序。因此,它必须工作;如果它找不到 DLL,或者 DLL 没有提供它应该提供的功能,那么你的程序就不能运行。在所有。这就是大多数“缺少 DLL”错误的原因;一些静态导入库试图找到一个不存在的 DLL。

那么...如果我想编写一个至少使用 OpenGL 3.3 的应用程序,但能够使用 OpenGL 4.5 中的功能(如果它们存在)怎么办?我无法链接到 OpenGL 4.5 导入库,因为它无法在 amy 3.3 实现上加载。所以我必须链接到 OpenGL 3.3 的导入库。但是,我如何访问 4.5 功能?没错:如果函数指针存在,我必须加载它们。

所以大多数人无论如何都必须加载一些功能。只加载整个东西要干净得多。这样,您就不必有版本化的导入库。

此外,通过动态加载所有 OpenGL 函数,您无需等待操作系统供应商更新他们的 DLL,即可使用下一组 OpenGL 函数。主 DLL 只是提供到实际实现 OpenGL 的 IHV 驱动程序 DLL(或 Linux 上的开源驱动程序)的连接。

注意微软的 OpenGL32.dll 仍然只提供了 OpenGL 1.1 .所以我想说我们从不等待他们中受益;)

此外,我们还有“简单的方法”:使用 OpenGL Loading Library .

关于opengl - 为什么 OpenGL 的设计方式必须在运行时手动加载实际功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34662134/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com