问题描述
最近我一直在研究 OpenGL 图形驱动程序 (ICD) 如何在 Windows 上实现 OpenGL 运行时 (opengl32.dll) 调用的 OpenGL 函数。
我知道我可以使用 GetProcAddress
来获取 opengl32.dll
公开的 OpenGL 1.0 和 1.1 函数的函数指针,我必须调用 {{1} 返回的 wglGetProcAddress
获取 OpenGL 1.2+ 函数的上下文相关函数指针。
为了查看ICD是否执行OpenGL函数,我编写了opengl32.dll和ICD的包装程序,并让它们在函数被调用时打印函数名称。对于OpenGL 1.2+的函数,我看到我的测试程序首先从opengl32.dll调用了GetProcAddress
返回的函数指针,然后我看到它调用了ICD的wglGetProcAddress
返回的函数指针(我写的hook函数对于其中一些功能)。所以证明这些功能是由显卡驱动实现的。但是对于 OpenGL 1.0 和 1.1 函数,它们具有由 opengl32.dll 公开的 API 符号,当它们尝试通过函数名称加载它们时,opengl32.dll 的 DrvGetProcAddress
和 ICD 的 wglGetProcAddress
都返回 NULL。
我也知道这两个GetProcAddress函数都只是用来获取OpenGL扩展(OpenGL 1.2或以上)函数的函数指针,但我不确定图形驱动程序现在是否实现了OpenGL 1.0和1.1函数。如果是,那么opengl32.dll如何调用ICD中的这些函数?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)