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

zvokhttg  于 2022-09-26  发布在  Windows
关注(0)|答案(1)|浏览(220)

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

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

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

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

ttisahbt

ttisahbt1#

ICD为所有OpenGL 1.0和1.1函数提供了dispatch table,从opengl32.dll导出的函数只是跳到ICD中的入口点。Here is how ReactOS does this

相关问题