我有一個程序做了一些圖形。當我以交互方式運行它時,我希望它使用系統中的OpenGL來提供硬件加速圖形。當我批量運行它時,我希望能夠重定向它以使用Mesa GL庫,以便我可以使用OSMesa功能渲染到屏幕外緩衝區。如果選擇批量啓動選項,則通過執行LoadLibrary/GetProcAddress啓用OSMesa功能。有沒有什麼方法可以在Windows中模擬LD_LIBRARY_PATH?
在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和glu32.dll必須設置爲延遲加載。我將可執行文件設置爲延遲加載opengl32.dll和glu32.dll,然後將代碼放在這兩個DLL上調用LoadLibrary,如果程序以批處理模式啓動的話。這段代碼是在第一次調用Qt庫之前插入的。 – likso