From ffac5e9b17289f2d1d54b21d8390d3c76d0f348d Mon Sep 17 00:00:00 2001 From: sebavan Date: Tue, 28 May 2024 21:13:15 +0200 Subject: [PATCH] Fix #307 Calling canvas.getContext("bitmaprenderer") with spectorjs plugin enabled causes error. --- documentation/build.md | 1 + documentation/changeLogs.md | 3 +++ extensions/manifest.json | 2 +- package-lock.json | 4 ++-- package.json | 2 +- sample/js/bitmapRenderer.js | 21 +++++++++++++++++++++ src/backend/spies/canvasSpy.ts | 11 +++++++++-- 7 files changed, 38 insertions(+), 6 deletions(-) create mode 100644 sample/js/bitmapRenderer.js diff --git a/documentation/build.md b/documentation/build.md index 8d85c00..245db62 100644 --- a/documentation/build.md +++ b/documentation/build.md @@ -29,6 +29,7 @@ Once ```npm start``` has been launched, you can access the following samples to 1. [Exception](http://localhost:1337/sample/index.html?sample=lightsException): Test of exception during capture. 2. [No Render](http://localhost:1337/sample/index.html?sample=lightsNoRender): Test to capture if no frame are detected. 3. [No command](http://localhost:1337/sample/index.html?sample=simpleNoCommand): Simple use case containing a frame with no webgl commands. +4. [Bitmap Renderer](http://localhost:1337/sample/index.html?sample=bitmapRenderer): Do not crash when bitmap renderer is requested. ### Valid Use Cases 1. [Simple](http://localhost:1337/sample/index.html?sample=simple): A basic use case validating state changes. diff --git a/documentation/changeLogs.md b/documentation/changeLogs.md index 431c81e..7a80b46 100644 --- a/documentation/changeLogs.md +++ b/documentation/changeLogs.md @@ -4,6 +4,9 @@ ## Change Log Please, find below the per release summary of the contribution added to the project per version. Each of the listed versions is having its corresponding tag in the repo. +## v0.9.31 +* Fix [Request Non GL contexts](https://github.com/BabylonJS/Spector.js/issues/307) + ## v0.9.30 * Fix [Scissor function call](https://github.com/BabylonJS/Spector.js/issues/266) * Fix [bufferSubData and getAttribLocation number report](https://github.com/BabylonJS/Spector.js/issues/262) diff --git a/extensions/manifest.json b/extensions/manifest.json index d21260a..bd5c32e 100644 --- a/extensions/manifest.json +++ b/extensions/manifest.json @@ -2,7 +2,7 @@ "manifest_version": 2, "minimum_chrome_version": "20", "name" : "Spector.js", - "version" : "0.9.30", + "version" : "0.9.31", "homepage_url": "http://spector.babylonjs.com/", "description" : "Explore and Troubleshoot your WebGL scenes easily.", "author": "@SpectorJS", diff --git a/package-lock.json b/package-lock.json index a548774..9ac1ec9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "spectorjs", - "version": "0.9.30", + "version": "0.9.31", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "spectorjs", - "version": "0.9.30", + "version": "0.9.31", "license": "MIT", "dependencies": { "@shaderfrog/glsl-parser": "^2.0.1" diff --git a/package.json b/package.json index 7e2a427..acbf595 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "spectorjs", - "version": "0.9.30", + "version": "0.9.31", "description": "Explore and Troubleshoot your WebGL scenes easily.", "keywords": [ "webgl", diff --git a/sample/js/bitmapRenderer.js b/sample/js/bitmapRenderer.js new file mode 100644 index 0000000..bdeb85a --- /dev/null +++ b/sample/js/bitmapRenderer.js @@ -0,0 +1,21 @@ +function start() { + const canvas = document.getElementById("renderCanvas"); + const r = canvas.getContext("bitmaprenderer"); + + const offscreen = new OffscreenCanvas(300,150); + const gl = offscreen.getContext("webgl2"); + + draw(); + + function draw(t){ + gl.clearColor(1,0,0,1); + gl.clear(gl.COLOR_BUFFER_BIT); + + const bitmap = offscreen.transferToImageBitmap(); + r.transferFromImageBitmap(bitmap); + + requestAnimationFrame(draw); + } +} + +start(); \ No newline at end of file diff --git a/src/backend/spies/canvasSpy.ts b/src/backend/spies/canvasSpy.ts index 470e73a..de23b70 100644 --- a/src/backend/spies/canvasSpy.ts +++ b/src/backend/spies/canvasSpy.ts @@ -26,8 +26,15 @@ export class CanvasSpy { OriginFunctionHelper.executeOriginFunction(this, "getContext", arguments) : OriginFunctionHelper.executePrototypeOriginFunction(this, OriginalCanvasConstructor, "getContext", arguments); - if (arguments.length > 0 && arguments[0] === "2d") { - return context; + if (arguments.length > 0) { + const contextType = arguments[0]; + if (contextType !== "webgl" && + contextType !== "experimental-webgl" && + contextType !== "webgl2" && + contextType !== "experimental-webgl2" + ) { + return context; + } } if (context) {