Подтвердить что ты не робот

Развертывание 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.
4b9b3361

Ответ 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 в любой форме. Это просто слишком ненадежно.