Заставить QWebEngine использовать программный рендеринг

Я использую QWebEngine для отображения некоторых веб-страниц. К сожалению, он использует OpenGL внутри, что приводит к сбою на некоторых графических адаптерах (можно легко увидеть драйвер-DLL как причину сбоя). Во-вторых, невозможно поймать этот сбой с помощью блока try-catch.

Итак, мой вопрос: как заставить QWebEngine использовать только программный рендеринг и не использовать OpenGL?

Спасибо!


person Elmi    schedule 02.03.2016    source источник
comment
Почему бы просто не скомпилировать версию библиотеки Qt без OpenGL?   -  person Flovdis    schedule 02.03.2016
comment
@Flovdis Если эта функция каким-то образом доступна, зачем вам компилировать настраиваемую версию библиотеки Qt? Это безумные накладные расходы, и если есть другой способ, я обязательно выберу его вместо этого.   -  person rbaleksandar    schedule 02.03.2016
comment
@flovdis, потому что это заставит всю среду Qt использовать программный рендеринг, который не предназначен. для моих собственных приложений на основе OpenGL я могу легко проверить, работает оно или нет, и избежать любой из этих функций, только QWebengine достаточно глуп, чтобы предположить, что все в порядке, что приводит к сбою. поэтому я хочу, чтобы qWebEngine использовал программный рендеринг, но не все остальные приложения Qt.   -  person Elmi    schedule 03.03.2016


Ответы (1)


Я предполагаю, что вы работаете в Windows и используете официальные двоичные файлы Qt, а также используете Qt 5.5 или новее. Они позволяют переключаться между настольным OpenGL, ANGLE (Direct X) и программная растеризация во время выполнения.

Поэтому должно быть достаточно установить для переменной среды QT_OPENGL значение «угол» (для использования бэкенда DirectX) или «рабочий стол». Чтобы жестко запрограммировать это, вы можете установить атрибуты приложения Qt::AA_UseOpenGLES или Qt::AA_UseSoftwareOpenGL.

Если вы используете WebEngine через Qt Quick, вы также можете использовать средство визуализации Qt Quick 2D.

person kkoehne    schedule 22.03.2016
comment
Я на винде, но на винде 7 Embedded - там вообще не работает определение графической платформы через Qt (как недавно узнал). А я работаю с самокомпилируемыми бинарниками (опция -opengl dynamic). Так что мне действительно нужна возможность заставить только QWebEngine выполнять программный рендеринг, а не всю среду. - person Elmi; 23.03.2016
comment
@Elmi, ты нашел решение для этого в конце концов? У нас та же проблема, приложение OpenGL, которое использовало WebKit для отображения веб-страницы. Переход на 5.6 требует обновления до WebEngine, но простое создание QWebPage, даже без попытки загрузить страницу, вызывает сбой в некоторых системах. Я не мог определить, в чем причина, у нас были сбои на картах AMD и NVidia. Иногда обновление графических драйверов решает проблему, иногда нет. Заставить просто QWebEngine использовать программную растеризацию звучит как хорошая идея. Любая помощь приветствуется... - person Uflex; 12.10.2016
comment
@Uflex, к сожалению, нет, QWebEngine - нестабильный кусок дерьма, жаль, что он был выпущен в таком плохом состоянии ... - person Elmi; 17.10.2016
comment
@Elmi, может показаться, что в нашем случае нам просто не хватает некоторых зависимостей. Запуск WinDeployQt показал недостающие файлы. Дополнительную информацию см. в этой теме. Я не уверен, почему это работало на некоторых машинах, но не на других... - person Uflex; 17.10.2016