summaryrefslogtreecommitdiffstats
path: root/src/plugins/platforms/wasm
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/platforms/wasm')
-rw-r--r--src/plugins/platforms/wasm/qwasmopenglcontext.cpp19
-rw-r--r--src/plugins/platforms/wasm/qwasmopenglcontext.h1
2 files changed, 16 insertions, 4 deletions
diff --git a/src/plugins/platforms/wasm/qwasmopenglcontext.cpp b/src/plugins/platforms/wasm/qwasmopenglcontext.cpp
index fbf700518e..c122335a57 100644
--- a/src/plugins/platforms/wasm/qwasmopenglcontext.cpp
+++ b/src/plugins/platforms/wasm/qwasmopenglcontext.cpp
@@ -62,6 +62,16 @@ QWasmOpenGLContext::~QWasmOpenGLContext()
}
}
+bool QWasmOpenGLContext::isOpenGLVersionSupported(QSurfaceFormat format)
+{
+ // Version check: support WebGL 1 and 2:
+ // (ES) 2.0 -> WebGL 1.0
+ // (ES) 3.0 -> WebGL 2.0
+ // [we don't expect that new WebGL versions will be created]
+ return ((format.majorVersion() == 2 && format.minorVersion() == 0) ||
+ (format.majorVersion() == 3 && format.minorVersion() == 0));
+}
+
bool QWasmOpenGLContext::maybeCreateEmscriptenContext(QPlatformSurface *surface)
{
// Native emscripten/WebGL contexts are tied to a single screen/canvas. The first
@@ -92,10 +102,8 @@ EMSCRIPTEN_WEBGL_CONTEXT_HANDLE QWasmOpenGLContext::createEmscriptenContext(cons
attributes.failIfMajorPerformanceCaveat = false;
attributes.antialias = true;
attributes.enableExtensionsByDefault = true;
-
- if (format.majorVersion() == 3) {
- attributes.majorVersion = 2;
- }
+ attributes.majorVersion = format.majorVersion() - 1;
+ attributes.minorVersion = format.minorVersion();
// WebGL doesn't allow separate attach buffers to STENCIL_ATTACHMENT and DEPTH_ATTACHMENT
// we need both or none
@@ -149,6 +157,9 @@ bool QWasmOpenGLContext::isSharing() const
bool QWasmOpenGLContext::isValid() const
{
+ if (!(isOpenGLVersionSupported(m_requestedFormat)))
+ return false;
+
// Note: we get isValid() calls before we see the surface and can
// create a native context, so no context is also a valid state.
return !m_context || !emscripten_is_webgl_context_lost(m_context);
diff --git a/src/plugins/platforms/wasm/qwasmopenglcontext.h b/src/plugins/platforms/wasm/qwasmopenglcontext.h
index d27007e8ea..cf84379c36 100644
--- a/src/plugins/platforms/wasm/qwasmopenglcontext.h
+++ b/src/plugins/platforms/wasm/qwasmopenglcontext.h
@@ -51,6 +51,7 @@ public:
QFunctionPointer getProcAddress(const char *procName) override;
private:
+ static bool isOpenGLVersionSupported(QSurfaceFormat format);
bool maybeCreateEmscriptenContext(QPlatformSurface *surface);
static EMSCRIPTEN_WEBGL_CONTEXT_HANDLE createEmscriptenContext(const QString &canvasId, QSurfaceFormat format);