windows - Windows 上的 OpenGL ICD 如何加载 OpenGL 1.0 和 1.1 功能?

标签 windows winapi opengl wgl

最近我一直在研究 OpenGL 图形驱动程序 (ICD) 如何在 Windows 上实现 OpenGL 运行时 (opengl32.dll) 调用的 OpenGL 函数。

我知道我可以使用 GetProcAddress 来获取由 opengl32.dll 公开的 OpenGL 1.0 和 1.1 函数的函数指针,我必须调用 wglGetProcAddressGetProcAddress 返回以获取 OpenGL 1.2+ 函数的上下文相关函数指针。

为了查看 ICD 是否执行 OpenGL 函数,我编写了 opengl32.dll 和 ICD 的包装程序,并让它们在函数被调用时打印函数名称。对于 OpenGL 1.2+ 函数,我看到我的测试程序首先从 opengl32.dll 调用了 wglGetProcAddress 返回的函数指针,然后我看到它调用了 DrvGetProcAddress 返回的函数指针ICD(我为其中一些函数编写了 Hook 函数)。所以证明这些功能都是由显卡驱动实现的。但是对于 OpenGL 1.0 和 1.1 函数,它们具有由 opengl32.dll 公开的 API 符号,当它们尝试加载它们时,opengl32.dll 的 wglGetProcAddress 和 ICD 的 DrvGetProcAddress 都返回 NULL通过它们的函数名称。

我也明白这两个GetProcAddress函数只是用来获取OpenGL扩展(OpenGL 1.2或更高版本)函数的函数指针,但我不确定图形驱动程序现在是否实现了OpenGL 1.0和1.1函数。如果是,那么 opengl32.dll 如何调用 ICD 中的这些函数?

最佳答案

ICD 提供了一个 dispatch table对于所有 OpenGL 1.0 和 1.1 函数以及从 opengl32.dll 导出的函数,只需跳转到 ICD 中的入口点。 Here is how ReactOS does this .

关于windows - Windows 上的 OpenGL ICD 如何加载 OpenGL 1.0 和 1.1 功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65734384/

相关文章:

windows - 运行 postgres 容器时出错 "Error response from daemon: invalid mode:/var/lib/postgresql/data."

windows - 在 Windows 驱动程序中添加和使用资源

c - IBM DB2 native 库访问或小型 API

java - LWJGL 无法获取匹配的坐标

在 Windows 中运行的 Python 代码,我可以使用 "if not win32"绕过它的一部分吗

windows - 从Windows终端远程运行Unix脚本并传回提示

c - Hook Windows 登录/注销事件

c# - 什么会导致 WM_NCHITTEST lParam 溢出 32 位整数?

c++ - gl绑定(bind)/GLFW "Error after macro substitution"

c - 不完全适合像素光栅的 2D openGL 绘图线