Qt5 может использовать драйвер OpenGL или драйвер DirectX с помощью ANGLE. Поскольку мы не можем зависеть от установленного драйвера OpenGL, нам нужно использовать бэкэнд ANGLE. К сожалению, это не решает все проблемы с развертыванием, особенно на виртуальных машинах Windows без аппаратного ускорения. В этих системах мы получаем сообщение об ошибке, указывающее, что создание контекста OpenGL не удалось.
Снимок экрана: не удалось создать контекст OpenGL для формата QSurfaceFormat
Мы развертываем все необходимые библиотеки (libEGL.dll libGLESv2.dll libeay32.dll msvcp110.dll msvcr110.dll d3dcompiler_46.dll), но мы все еще получаем это сообщение об ошибке.
Как развертывать приложение QML, которое должно запускаться на компьютерах конечных пользователей без драйверов OpenGL и на (виртуальных) машинах без ускорения Direct3D?
На странице Qt wiki есть ссылка на эту проблему, но это не очень полезно для ее решения.
Обновление для Qt 5.4.0:
Мои результаты до сих пор:
- Настройка QT_ANGLE_PLATFORM = warp → создает окна без содержимого.
- Настройка QT_ANGLE_PLATFORM = d3d9 → то же диалоговое окно ошибок, как и ожидалось.
- Настройка QT_ANGLE_PLATFORM = d3d11 → того же диалогового окна ошибок, как и ожидалось.
- Настройка QT_OPENGL = рабочий стол → тот же, что и QT_ANGLE_PLATFORM = warp.
- Настройка QT_OPENGL = angle → того же диалогового окна ошибок, как и ожидалось.
- Настройка QT_OPENGL = программное обеспечение + opengl32sw.dll(mesa для windows) → непредсказуемо: может запуститься, может произойти сбой, может отображаться диалоговое окно ошибки.
Обновление для Qt Quick 2D Renderer
Хотя, похоже, Mesa является частичным решением, конфигурация, похоже, очень часто встречается в Qt 5.4.0.
Другим недостатком может стать Qt Quick 2D Renderer, но, к сожалению, это также сбой.
- Копирование softwarecontext.dll в /scenegraph + Настройка QMLSCENE_DEVICE = softwarecontext → crash
Обновление после некоторых пользователей:
Угол- Имеет некоторые ошибки рендеринга в некоторых системах
- Не работает на всех системах.
- Не надежно
- По умолчанию реализуется OpenGL 1.1, который слишком стар.
- Неверно, даже если версия OpenGL в порядке.
- Выдает ошибки, если их использует Qt
- Есть некоторые основные проблемы с обработкой.
- Сбой, зависания
- Работает в системах без ускорения HW
- Кажется, сейчас очень надежно
- довольно медленный в целом, очень медленный в некоторых системах.
- Тяжелый вес развертывания
Заключение: до сих пор нет реального решения для этих систем
Обновление для Qt 5.5
Anno 2015: сломанные графические диски все еще сломаны.
Мое заключение на данный момент:
- Используйте QtQuick2dRenderer, если это возможно.
- В противном случае используйте бэкэнд Mesa.
- Пропустить угол, пропустить рабочий стол OpenGL, пропустить Warp.