public inbox for pve-devel@lists.proxmox.com
 help / color / mirror / Atom feed
From: Dominik Csapak <d.csapak@proxmox.com>
To: pve-devel@lists.proxmox.com
Subject: [pve-devel] [PATCH pve-xtermjs] xtermjs: try to detect hardware support for webgl2
Date: Wed, 25 Oct 2023 11:08:59 +0200	[thread overview]
Message-ID: <20231025090859.2235027-1-d.csapak@proxmox.com> (raw)

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.csapak@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





             reply	other threads:[~2023-10-25  9:09 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-10-25  9:08 Dominik Csapak [this message]
2023-10-25 17:02 ` [pve-devel] applied: " Thomas Lamprecht

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20231025090859.2235027-1-d.csapak@proxmox.com \
    --to=d.csapak@proxmox.com \
    --cc=pve-devel@lists.proxmox.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
Service provided by Proxmox Server Solutions GmbH | Privacy | Legal