Развертывание Qt5 в Windows без аппаратного ускорения
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
- По умолчанию реализуется OpenGL 1.1, который слишком стар.
- Неверно, даже если версия OpenGL в порядке.
- Выдает ошибки, если их использует Qt
QtQuick2dRenderer
- Есть некоторые основные проблемы с обработкой.
- Сбой, зависания
- Работает в системах без ускорения HW
Mesa OpenGL Backend
- Кажется, сейчас очень надежно
- довольно медленный в целом, очень медленный в некоторых системах.
- Тяжелый вес развертывания
Заключение: до сих пор нет реального решения для этих систем
Обновление для Qt 5.5
Anno 2015: сломанные графические диски все еще сломаны.
Мое заключение на данный момент:
- Используйте QtQuick2dRenderer, если это возможно.
- В противном случае используйте бэкэнд Mesa.
- Пропустить угол, пропустить рабочий стол OpenGL, пропустить Warp.
Ответы
Ответ 1
QT 5 имеет огромную проблему совместимости с opengl на некоторых аппаратных конфигурациях. Комбинация драйвера Intel HD3000 и карты Nvidia/ATI не будет работать в Windows 10. https://bugreports.qt.io/browse/QTBUG-42240
Intel отказывается от поддержки этой карты, но в их драйверах есть ошибка, которая приводит к сбою.
Вы не можете полагаться на аппаратный opengl, если хотите поддерживать клиентов с HD3000.
Ответ 2
В Windows opengl32.dll является стандартным драйвером OpenGL. Он реализует OpenGL 1.1 (действительно старая версия).
ANGLE имеет базовый уровень OpenGL ES 2.0 и требует установки DirectX 9/11 для сопоставления вызовов.
Итак, если у вас установлена видеокарта, на которой не установлен установленный драйвер OpenGL, драйвер OpenGL меньше 2.0 и/или DirectX 9/11 не установлен, ваше приложение не будет работать.
Что касается виртуализации и 3D-ускорения, возможно, стоит прочитать:
Кроме того, если вы запускаете среду с несколькими мониторами Windows в VirtualBox, 3D-ускорение будет отключено.
Ответ 3
Я перепроверил это, чтобы увидеть, были ли эти проблемы исправлены в последнем выпуске QT 5.12.2, но нет, нет. Функция, описанная в OP записи вики QT со ссылкой на https://wiki.qt.io/Qt_5_on_Windows_ANGLE_and_OpenGL, звучит хорошо, но на практике она просто не работает.
Я делаю вывод, что избегайте OpenGL на QT в любой форме. Это просто слишком ненадежно.