Мне нужно использовать возможности OpenGL версии 2 в рамках проекта Qt5 в Windows 7 (Qt построен с использованием OpenGL на рабочем столе, а не ANGLE). Чтобы поддержать запуск приложения через удаленный рабочий стол, я бы хотел вернуться к программному рендерингу через Mesa, если это необходимо. Я планирую проверить версию OpenGl при запуске. Если он низкий, я устанавливаю флажок в настройках приложения, печатаю сообщение и прекращаю работу программы. Когда программа запускается снова, я могу прочитать флаг и решить, нужно ли мне загружать opengl32.dll из Mesa вместо встроенной версии Windows.
Чтобы это работало, я попытался отложить загрузку opengl32.dll, установив /DELAYLOAD:opengl32.dll
флаг компоновщика, а затем с помощью SetDllDierectoryW([path to dir with Mesa's opengl32.dll])
перенаправить поиск DLL. К сожалению, это не работает, так как встроенная версия opengl32.dll уже находится в памяти сразу после ввода main()
и поэтому SetDllDirectory
не имеет никакого эффекта
Зависимость Уокер показывает мне, что сам Qt5Gui.dll связан с opengl32.dll, и я подозреваю, что это подрывает задержку загрузки. Но когда я пытаюсь также задержать загрузку Qt5Gui.dll, компоновщик не работает из-за импортированного символа "__declspec(dllimport) public: static struct QMetaObject const QWindow::staticMetaObject" (__imp_?staticMetaObject@QWindow@@2UQMetaObject@@B)
, Я понятия не имею, как от этого избавиться.
Мне действительно нужен OpenGL 2, поэтому, кажется, нет никакого способа использовать Mesa для программного рендеринга. Но я не мог придумать альтернативу отложенной загрузке. Изменение настроек PATH всякий раз, когда я хочу переключиться между аппаратным и программным рендерингом, кажется, не работает, и переключение путем перемещения opengl32.dll в Mesa в директорию приложения или из нее не является вариантом, поскольку у обычного пользователя не должно быть требуемой записи разрешения.
Есть ли способ получить задержку загрузки opengl32.dll, работающей с Qt5?
Сам Qt5Gui связан с OpenGL. Если ваше приложение может лениво загрузить эту библиотеку, вы можете попробовать вызвать QCoreApplication :: setLibraryPaths () без системных путей, используя вместо этого пути для своих библиотек.
Кроме того, вы можете настроить свой файл qt.conf. Читайте об этом здесь: http://qt-project.org/doc/qt-5/qt-conf.html
Других решений пока нет …