with the new webgl renderer, chrome/chromium has buggy software support for emulating this (see [0]), so we have to detect that manually and prevent loading the addon. This fixes the issue that on chrome without hw support, it would not always render every character.
Firefox does not have support for a software renderer and the loading/detection throws an exception, falling back to the default renderer. 0: https://github.com/xtermjs/xterm.js/issues/4574 Signed-off-by: Dominik Csapak <d.csa...@proxmox.com> --- tested with and without webgl hardware support on firefox/chrome/chromium xterm.js/src/main.js | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/xterm.js/src/main.js b/xterm.js/src/main.js index 85cc399..1575697 100644 --- a/xterm.js/src/main.js +++ b/xterm.js/src/main.js @@ -154,9 +154,15 @@ function createTerminal() { term = new Terminal(getTerminalSettings()); term.open(terminalContainer); term.loadAddon(fitAddon); + let loadedWebgl = false; try { - term.loadAddon(webglAddon); - } catch (_e) { + if (detectWebgl()) { + term.loadAddon(webglAddon); + loadedWebgl = true; + } + } catch (_e) { } + + if (!loadedWebgl) { console.warn("webgl-addon loading failed, falling back to regular dom renderer"); } @@ -384,3 +390,15 @@ function errorTerminal(event) { term.dispose(); updateState(states.disconnected, event.msg, event.code); } + +// try to detect hardware acceleration, can throw an exception if there is no webgl support +// +// for chrome we have to give the parameter, otherwise it'll use its software renderer +// which is buggy: https://github.com/xtermjs/xterm.js/issues/4574 +// +// firefox will fail on the getContext anyway if there is not hardware support +function detectWebgl() { + const canvas = document.createElement("canvas"); + const gl = canvas.getContext("webgl2", { failIfMajorPerformanceCaveat: true }); + return !!gl; +} -- 2.30.2 _______________________________________________ pve-devel mailing list pve-devel@lists.proxmox.com https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel