Windows 上的 OpenGL ICD 如何加载 OpenGL 1.0 和 1.1 函数?

问题描述 投票:0回答:1

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

我知道我可以使用

GetProcAddress
来获取
opengl32.dll
公开的OpenGL 1.0和1.1函数的函数指针,并且我必须调用
wglGetProcAddress
返回的
GetProcAddress
来获取上下文相关的函数指针OpenGL 1.2+ 功能。

为了查看ICD是否执行OpenGL函数,我编写了opengl32.dll和ICD的包装程序,并让它们在调用函数时打印函数名称。对于OpenGL 1.2+函数,我看到我的测试程序首先调用了opengl32.dll中

wglGetProcAddress
返回的函数指针,然后我看到它调用了ICD中
DrvGetProcAddress
返回的函数指针(我为其中一些编写了钩子函数)功能)。由此证明这些功能是由图形驱动程序实现的。但对于 OpenGL 1.0 和 1.1 函数,其 API 符号由 opengl32.dll 公开,当它们尝试通过函数名称加载它们时,opengl32.dll 的
wglGetProcAddress
和 ICD 的
DrvGetProcAddress
都返回 NULL。

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

windows winapi opengl wgl
1个回答
1
投票

ICD 为所有 OpenGL 1.0 和 1.1 函数提供了一个 调度表 ,并且从

opengl32.dll
导出的函数仅跳转到 ICD 中的入口点。 ReactOS 是如何做到这一点的

© www.soinside.com 2019 - 2024. All rights reserved.