diff options
Diffstat (limited to 'src/plugins/platforms/wasm/qwasmoffscreensurface.cpp')
-rw-r--r-- | src/plugins/platforms/wasm/qwasmoffscreensurface.cpp | 24 |
1 files changed, 22 insertions, 2 deletions
diff --git a/src/plugins/platforms/wasm/qwasmoffscreensurface.cpp b/src/plugins/platforms/wasm/qwasmoffscreensurface.cpp index 31adc73cf5..dcfc4433e6 100644 --- a/src/plugins/platforms/wasm/qwasmoffscreensurface.cpp +++ b/src/plugins/platforms/wasm/qwasmoffscreensurface.cpp @@ -6,10 +6,30 @@ QT_BEGIN_NAMESPACE QWasmOffscreenSurface::QWasmOffscreenSurface(QOffscreenSurface *offscreenSurface) - :QPlatformOffscreenSurface(offscreenSurface) + : QPlatformOffscreenSurface(offscreenSurface), m_offscreenCanvas(emscripten::val::undefined()) { + const auto offscreenCanvasClass = emscripten::val::global("OffscreenCanvas"); + // The OffscreenCanvas is not supported on some browsers, most notably on Safari. + if (!offscreenCanvasClass) + return; + + m_offscreenCanvas = offscreenCanvasClass.new_(offscreenSurface->size().width(), + offscreenSurface->size().height()); + + m_specialTargetId = std::string("!qtoffscreen_") + std::to_string(uintptr_t(this)); + + emscripten::val::module_property("specialHTMLTargets") + .set(m_specialTargetId, m_offscreenCanvas); +} + +QWasmOffscreenSurface::~QWasmOffscreenSurface() +{ + emscripten::val::module_property("specialHTMLTargets").delete_(m_specialTargetId); } -QWasmOffscreenSurface::~QWasmOffscreenSurface() = default; +bool QWasmOffscreenSurface::isValid() const +{ + return !m_offscreenCanvas.isNull() && !m_offscreenCanvas.isUndefined(); +} QT_END_NAMESPACE |