我有一个程序可以做一些图形。当我以交互方式运行它时,我希望它使用系统中的 OpenGL 来提供硬件加速图形。当我批量运行它时,我希望能够将其重定向以使用 Mesa GL 库,以便我可以使用 OSMesa 功能渲染到屏幕外缓冲区。如果选择了批量启动选项,则可以通过执行 LoadLibrary/GetProcAddress 来启用 OSMesa 功能。
在 Linux 上,完成这项工作相当容易。通过使用包装脚本来调用程序,我可以执行以下操作:
if [ "$OPTION" = "batch" ]; then
export LD_LIBRARY_PATH=$PATHTO/mesalibs:$LD_LIBRARY_PATH
fi
在 Windows 中可以做这样的事情吗?
当我尝试将目录添加到 PATH 变量时,程序继续转到系统 opengl32.dll。我可以让程序使用 Mesa GL/OSMesa 共享库的唯一方法是将它们驻留在与我的程序相同的目录中。但是,当我这样做时,程序将永远不会使用系统 opengl32.dll。
如果我正确理解你的意思,那么当你的进程启动时,会加载错误版本的 opengl32.dll,即加载时动态链接 http://msdn.microsoft.com/en-us/library/windows/desktop/ms684184%28v=vs.85%29.aspx。如果不改变这一点,可能没有什么好方法可以解决您的问题。
你说你不能使用方便使用运行时动态链接 http://msdn.microsoft.com/en-us/library/windows/desktop/ms685090%28v=vs.85%29.aspx(LoadLibrary/GetProcAddress) 用于 opengl32.dll,因为对它的调用来自 Qt 库。然而,我认为 Qt 库本身是动态链接的,因此您应该能够通过使用它的运行时链接来解决您的问题。在这种情况下,如果您在加载 Qt 库之前加载 opengl32.dll,您应该能够明确选择要加载的 opengl32.dll 版本。
您可能需要考虑使用延迟加载 http://msdn.microsoft.com/en-us/library/151kt790.aspx为了简化从加载时链接到运行时链接的过程。在这种情况下,第一次调用 Qt 库会导致它自动加载,您只需要首先显式加载 opengl32.dll 即可。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)