以编程方式为 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。此外,它还将执行所有扩展加载。