Невозможно отобразить WebGL в Electron с помощью Xvfb - PullRequest
0 голосов
/ 02 июля 2018

Я пытаюсь отобразить мое приложение, которое имеет зависимость WebGL в Electron, на моем ПК с Linux, но на странице ничего не отображается, кроме цвета фона CSS. Когда я удаляю зависимость WebGL, а именно MapboxGL, все отображается нормально.

Я использую X Virtual Frame Buffer, который представляется необходимым для среды Linux, как описано здесь: https://electronjs.org/docs/tutorial/testing-on-headless-ci

Я запускаю Xvfb с помощью этой команды:

Xvfb :99 -screen 0 1024x768x24 > xvfblog.txt 2>&1 &

А потом я запускаю свое приложение с префиксом:

DISPLAY=:99

, чтобы приложение подключалось к экрану X Virtual Frame Buffer.

Я не уверен, имеет ли это отношение, но Xvfb запускается со следующими сообщениями:

Компилятор карты ключей XKEYBOARD (xkbcomp) сообщает:

> Предупреждение: неподдерживаемый код высокого ключа 372 для имени игнорируется

> X11 не может поддерживать коды клавиш выше 255.

> Это предупреждение отображается только для первого кода высокого ключа.

> Внутренняя ошибка: не удалось разрешить keysym XF86WWAN

> Внутренняя ошибка: не удалось разрешить keysym XF86RFKill

> Внутренняя ошибка: не удалось разрешить keysym XF86Keyboard

Ошибки от xkbcomp не являются фатальными для X-сервера

Я также заметил, что когда я тестирую свое приложение с помощью Electron на Macbook, Xvfb не требуется, и мое приложение WebGL отображается очень хорошо.

Я немного озадачен здесь. Есть какие-нибудь предложения о том, что может быть не так, или что я могу исследовать для исправления?

1 Ответ

0 голосов
/ 03 июля 2018

Мне удалось решить эту проблему, настроив Xvfb для работы с WebGL следующим образом:

Xvfb :99 -screen 0 1024x768x24 +extension GLX +render > xvfblog.txt 2>&1 &

Где я добавил +extension GLX +render флаги.

Мне также пришлось запустить электрон с флагом ignore-gpu-blacklist. Я нашел эту статью полезной с этим: https://medium.com/social-tables-tech/how-we-test-webgl-on-continuous-integration-37a1ead55fd7

Также обратите внимание, что я использую пакет "Electron" npm, и мне пришлось добавить следующие флаги в мой BrowserWindow объект:

const win = new BrowserWindow({
  show: false,
  webPreferences: {
    webgl: true,
    webSecurity: false,
    experimentalFeatures: true,
    experimentalCanvasFeatures: true,
    offscreen: true
  }
})

Надеюсь, это кому-нибудь поможет.

...