From 8a2810fb1ac863f36133e24c5fcea811c3af82f5 Mon Sep 17 00:00:00 2001 From: Jean-Baptiste Ghoul Date: Wed, 14 Sep 2022 16:21:10 +0200 Subject: [PATCH 1/5] do not compute experimental-webgl on OffscreenCanvas --- src/backend/web-gl/kernel.js | 3 ++- test/issues/778-webgl-kernel-experimental.js | 20 ++++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) create mode 100644 test/issues/778-webgl-kernel-experimental.js diff --git a/src/backend/web-gl/kernel.js b/src/backend/web-gl/kernel.js index ffea4705..a4e785ae 100644 --- a/src/backend/web-gl/kernel.js +++ b/src/backend/web-gl/kernel.js @@ -62,7 +62,8 @@ class WebGLKernel extends GLKernel { testCanvas = new OffscreenCanvas(0, 0); } if (!testCanvas) return; - testContext = testCanvas.getContext('webgl') || testCanvas.getContext('experimental-webgl'); + testContext = testCanvas.getContext('webgl'); + if (!testContext && !testCanvas instanceof OffscreenCanvas) testContext = testCanvas.getContext('experimental-webgl'); if (!testContext || !testContext.getExtension) return; testExtensions = { OES_texture_float: testContext.getExtension('OES_texture_float'), diff --git a/test/issues/778-webgl-kernel-experimental.js b/test/issues/778-webgl-kernel-experimental.js new file mode 100644 index 00000000..94ec339c --- /dev/null +++ b/test/issues/778-webgl-kernel-experimental.js @@ -0,0 +1,20 @@ +const { assert, skip, test, module: describe, only } = require('qunit'); +const { GPU } = require('../../src'); + +describe('issue #778 - WebGL kernel feature checks may throw an error'); + +// Mocking OffscreenCanvas +global.document = undefined; +global.OffscreenCanvas = class OffscreenCanvas { + constructor() {} + + getContext(context) { + if (context === "webgl") return; + if (context === 'experimental-webgl') throw new TypeError("Failed to execute 'getContext' on 'OffscreenCanvas': The provided value 'experimental-webgl' is not a valid enum value of type OffscreenRenderingContextType.") + } +} + + +test('Check if WebGL is supported', () => { + assert.notOk(GPU.isWebGLSupported); +}); From b64b913bc5331569b4ceaa990a92486fd607c279 Mon Sep 17 00:00:00 2001 From: Jean-Baptiste Ghoul Date: Wed, 14 Sep 2022 17:10:02 +0200 Subject: [PATCH 2/5] clear test global variables --- test/issues/778-webgl-kernel-experimental.js | 35 ++++++++++++-------- 1 file changed, 22 insertions(+), 13 deletions(-) diff --git a/test/issues/778-webgl-kernel-experimental.js b/test/issues/778-webgl-kernel-experimental.js index 94ec339c..dc85befd 100644 --- a/test/issues/778-webgl-kernel-experimental.js +++ b/test/issues/778-webgl-kernel-experimental.js @@ -1,19 +1,28 @@ -const { assert, skip, test, module: describe, only } = require('qunit'); +const { assert, test, module: describe, hooks } = require('qunit'); const { GPU } = require('../../src'); -describe('issue #778 - WebGL kernel feature checks may throw an error'); - -// Mocking OffscreenCanvas -global.document = undefined; -global.OffscreenCanvas = class OffscreenCanvas { - constructor() {} - - getContext(context) { - if (context === "webgl") return; - if (context === 'experimental-webgl') throw new TypeError("Failed to execute 'getContext' on 'OffscreenCanvas': The provided value 'experimental-webgl' is not a valid enum value of type OffscreenRenderingContextType.") +const old = {}; +describe('issue #778 - WebGL kernel feature checks may throw an error', { + before: () => { + old.document = global.document; + old.OffscreenCanvas = global.OffscreenCanvas; + + global.document = undefined; + // Mocking OffscreenCanvas + global.OffscreenCanvas = class OffscreenCanvas { + constructor() {} + + getContext(context) { + if (context === "webgl") return; + if (context === 'experimental-webgl') throw new TypeError("Failed to execute 'getContext' on 'OffscreenCanvas': The provided value 'experimental-webgl' is not a valid enum value of type OffscreenRenderingContextType.") + } + } + }, + after: () => { + global.document = old.document; + global.OffscreenCanvas = old.OffscreenCanvas; } -} - +}); test('Check if WebGL is supported', () => { assert.notOk(GPU.isWebGLSupported); From a2677ea5a288362062e434e2a500c55c97a38ad8 Mon Sep 17 00:00:00 2001 From: Jean-Baptiste Ghoul Date: Wed, 14 Sep 2022 17:10:27 +0200 Subject: [PATCH 3/5] test message --- test/issues/778-webgl-kernel-experimental.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/issues/778-webgl-kernel-experimental.js b/test/issues/778-webgl-kernel-experimental.js index dc85befd..72d8e9d7 100644 --- a/test/issues/778-webgl-kernel-experimental.js +++ b/test/issues/778-webgl-kernel-experimental.js @@ -24,6 +24,6 @@ describe('issue #778 - WebGL kernel feature checks may throw an error', { } }); -test('Check if WebGL is supported', () => { +test('Check that WebGL is not supported', () => { assert.notOk(GPU.isWebGLSupported); }); From f46ddc83ec72c71a7ce45c816898b61158ad3e36 Mon Sep 17 00:00:00 2001 From: Jean-Baptiste Ghoul Date: Wed, 14 Sep 2022 17:10:54 +0200 Subject: [PATCH 4/5] remove unused variable --- test/issues/778-webgl-kernel-experimental.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/issues/778-webgl-kernel-experimental.js b/test/issues/778-webgl-kernel-experimental.js index 72d8e9d7..9c3192dd 100644 --- a/test/issues/778-webgl-kernel-experimental.js +++ b/test/issues/778-webgl-kernel-experimental.js @@ -1,4 +1,4 @@ -const { assert, test, module: describe, hooks } = require('qunit'); +const { assert, test, module: describe } = require('qunit'); const { GPU } = require('../../src'); const old = {}; From 22e9967b7fce3cbfd1e699d346d99d372144665b Mon Sep 17 00:00:00 2001 From: Jean-Baptiste Ghoul Date: Wed, 14 Sep 2022 17:13:42 +0200 Subject: [PATCH 5/5] fix condition not instance of --- src/backend/web-gl/kernel.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/backend/web-gl/kernel.js b/src/backend/web-gl/kernel.js index a4e785ae..0eae72a4 100644 --- a/src/backend/web-gl/kernel.js +++ b/src/backend/web-gl/kernel.js @@ -63,7 +63,7 @@ class WebGLKernel extends GLKernel { } if (!testCanvas) return; testContext = testCanvas.getContext('webgl'); - if (!testContext && !testCanvas instanceof OffscreenCanvas) testContext = testCanvas.getContext('experimental-webgl'); + if (!testContext && !(testCanvas instanceof OffscreenCanvas)) testContext = testCanvas.getContext('experimental-webgl'); if (!testContext || !testContext.getExtension) return; testExtensions = { OES_texture_float: testContext.getExtension('OES_texture_float'),