Skip to content

Commit

Permalink
Support for OffscreenCanvas in Web Workers playcanvas#2481
Browse files Browse the repository at this point in the history
  • Loading branch information
michaelfranzl committed Jul 15, 2024
1 parent e5afe4e commit 02610d3
Show file tree
Hide file tree
Showing 4 changed files with 29 additions and 3 deletions.
7 changes: 7 additions & 0 deletions src/core/platform.js
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,13 @@ const platform = {
*/
browser: environment === 'browser',

/**
* True if running in a Web Worker.
*
* @type {boolean}
*/
worker: environment === 'worker',

/**
* True if running on a desktop or laptop device.
*
Expand Down
2 changes: 1 addition & 1 deletion src/framework/app-base.js
Original file line number Diff line number Diff line change
Expand Up @@ -2023,7 +2023,7 @@ const makeTick = function (_app) {
if (application.xr?.session) {
application.frameRequestId = application.xr.session.requestAnimationFrame(application.tick);
} else {
application.frameRequestId = platform.browser ? window.requestAnimationFrame(application.tick) : null;
application.frameRequestId = platform.browser || platform.worker ? requestAnimationFrame(application.tick) : null;
}

if (application.graphicsDevice.contextLost)
Expand Down
2 changes: 1 addition & 1 deletion src/framework/application.js
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,7 @@ class Application extends AppBase {
* - sound ({@link SoundComponentSystem})
* - sprite ({@link SpriteComponentSystem})
*
* @param {HTMLCanvasElement} canvas - The canvas element.
* @param {HTMLCanvasElement | OffscreenCanvas} canvas - The canvas element.
* @param {object} [options] - The options object to configure the Application.
* @param {ElementInput} [options.elementInput] - Input handler for {@link ElementComponent}s.
* @param {Keyboard} [options.keyboard] - Keyboard handler for input.
Expand Down
21 changes: 20 additions & 1 deletion src/platform/graphics/graphics-device.js
Original file line number Diff line number Diff line change
Expand Up @@ -356,6 +356,16 @@ class GraphicsDevice extends EventHandler {
flags: CLEARFLAG_COLOR | CLEARFLAG_DEPTH
};

/**
* The current client rect.
*
* @type {{ width: number, height: number }}
*/
clientRect = {
width: 0,
height: 0
};

static EVENT_RESIZE = 'resizecanvas';

constructor(canvas, options) {
Expand Down Expand Up @@ -752,7 +762,16 @@ class GraphicsDevice extends EventHandler {
}

updateClientRect() {
this.clientRect = this.canvas.getBoundingClientRect();
if (platform.browser) {
const rect = this.canvas.getBoundingClientRect();
this.clientRect.width = rect.width;
this.clientRect.height = rect.height;

} else if (platform.worker) {
// Web Workers don't do page layout, so getBoundingClientRect is not available
this.clientRect.width = this.canvas.width;
this.clientRect.height = this.canvas.height;
}
}

/**
Expand Down

0 comments on commit 02610d3

Please sign in to comment.