mirror of
https://github.com/penpot/penpot.git
synced 2026-08-01 19:06:18 +00:00
🐛 Fix viewer rendering on Firefox+NVIDIA setup (#10385)
This commit is contained in:
parent
d16a2c93e0
commit
89f882ecda
@ -8,6 +8,7 @@
|
|||||||
"WASM offscreen rendering for the shared viewer (snapshot + fixed-scroll)."
|
"WASM offscreen rendering for the shared viewer (snapshot + fixed-scroll)."
|
||||||
(:require
|
(:require
|
||||||
[app.common.data.macros :as dm]
|
[app.common.data.macros :as dm]
|
||||||
|
[app.common.exceptions :as ex]
|
||||||
[app.render-wasm.api :as wasm.api]
|
[app.render-wasm.api :as wasm.api]
|
||||||
[app.render-wasm.wasm :as wasm]
|
[app.render-wasm.wasm :as wasm]
|
||||||
[app.util.dom :as dom]
|
[app.util.dom :as dom]
|
||||||
@ -43,15 +44,31 @@
|
|||||||
:dpr 1}))
|
:dpr 1}))
|
||||||
|
|
||||||
(defn- draw-bitmap!
|
(defn- draw-bitmap!
|
||||||
|
"Blit the rendered OffscreenCanvas onto the visible 2D `canvas`. Firefox+NVIDIA
|
||||||
|
can't `drawImage` a managed OffscreenCanvas directly (yields transparent
|
||||||
|
pixels), but `drawImage` of an `ImageBitmap` works — so go through
|
||||||
|
`createImageBitmap` (GPU-side, correct orientation, no CPU readback)."
|
||||||
[canvas os-canvas object-id vis-w vis-h finish]
|
[canvas os-canvas object-id vis-w vis-h finish]
|
||||||
|
(-> (js/createImageBitmap os-canvas)
|
||||||
|
(p/then
|
||||||
|
(fn [bitmap]
|
||||||
(ts/raf
|
(ts/raf
|
||||||
(fn []
|
(fn []
|
||||||
(let [ctx2d (.getContext canvas "2d")]
|
(let [ctx2d (.getContext canvas "2d")]
|
||||||
(.clearRect ctx2d 0 0 vis-w vis-h)
|
(.clearRect ctx2d 0 0 vis-w vis-h)
|
||||||
;; Draw directly from OffscreenCanvas so it can be reused across passes.
|
(.drawImage ctx2d bitmap 0 0 vis-w vis-h)
|
||||||
(.drawImage ctx2d os-canvas 0 0 vis-w vis-h)
|
(.close bitmap)
|
||||||
(dom/set-attribute! canvas "id" (str "screenshot-" object-id))
|
(dom/set-attribute! canvas "id" (str "screenshot-" object-id))
|
||||||
(finish)))))
|
(finish))))))
|
||||||
|
(p/catch
|
||||||
|
(fn [e]
|
||||||
|
(finish)
|
||||||
|
(ts/schedule
|
||||||
|
(fn []
|
||||||
|
(ex/raise :type :wasm-error
|
||||||
|
:code :viewer-canvas-failed
|
||||||
|
:hint "Viewer canvas failed"
|
||||||
|
:cause e)))))))
|
||||||
|
|
||||||
(defn- viewer-disable-wasm-ui-overlay!
|
(defn- viewer-disable-wasm-ui-overlay!
|
||||||
"Workspace WASM UI (rulers + rounded viewport frame) is composited in
|
"Workspace WASM UI (rulers + rounded viewport frame) is composited in
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user