以编程方式为 MESA 软件渲染器切换 dll
Switch dll programmatically for MESA Software renderer
我想将命令行选项 --software-rendering
添加到我的应用程序,它切换到在子文件夹(例如 mesa\opengl32.dll
)中找到的 MESA opengl32.dll。如何以编程方式切换到此 dll?
到目前为止我知道当我将 opengl32.dll 移动到我的主文件夹时,渲染使用这个,但我希望根据命令行选项加载它
唯一干净的解决方案是使用 LoadLibrary
加载 opengl32.dll
而不是将其硬链接到您的程序。然后在调用 LoadLibrary
之前,您可以定义搜索路径,在哪里寻找 DLL,甚至传递绝对路径。缺点是,如果使用 LoadLibrary
,则必须使用 GetProcAddress
手动检索每个 DLL 导出的符号。好消息是,glLoadGen 生成的 GL 加载器正是这样做的;它使用 GetModuleHandle
来引用任何已加载到进程中的 opengl32.dll
,并在常规 OpenGL 函数上使用 GetProcAddress
。此外,它还将执行所有扩展加载。
我想将命令行选项 --software-rendering
添加到我的应用程序,它切换到在子文件夹(例如 mesa\opengl32.dll
)中找到的 MESA opengl32.dll。如何以编程方式切换到此 dll?
到目前为止我知道当我将 opengl32.dll 移动到我的主文件夹时,渲染使用这个,但我希望根据命令行选项加载它
唯一干净的解决方案是使用 LoadLibrary
加载 opengl32.dll
而不是将其硬链接到您的程序。然后在调用 LoadLibrary
之前,您可以定义搜索路径,在哪里寻找 DLL,甚至传递绝对路径。缺点是,如果使用 LoadLibrary
,则必须使用 GetProcAddress
手动检索每个 DLL 导出的符号。好消息是,glLoadGen 生成的 GL 加载器正是这样做的;它使用 GetModuleHandle
来引用任何已加载到进程中的 opengl32.dll
,并在常规 OpenGL 函数上使用 GetProcAddress
。此外,它还将执行所有扩展加载。