Skip to content

Commit 403a4f4

Browse files
felixtrzfacebook-github-bot
authored andcommitted
Override threejs resize behavior
Summary: - Three.js does not allow resizing when XR is presenting, override this behavior for desktop mode - Force resize when user engage pointer lock to allow rendering at full resolution Reviewed By: cabanier Differential Revision: D57221729 fbshipit-source-id: f7569d1816329dab4021ab36f89733b38641dfa5
1 parent b50bcfa commit 403a4f4

1 file changed

Lines changed: 19 additions & 0 deletions

File tree

src/js/systems/xplat/xplat.js

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -194,12 +194,31 @@ export class XPlatControlSystem extends System {
194194
if (document.pointerLockElement) {
195195
this._pointerLocked = true;
196196
document.addEventListener('mousemove', onDocumentMouseMove);
197+
window.dispatchEvent(new Event('resize'));
197198
} else {
198199
this._pointerLocked = false;
199200
document.removeEventListener('mousemove', onDocumentMouseMove);
200201
}
201202
});
202203

204+
const onResize = () => {
205+
if (this._canvas) {
206+
const width = window.innerWidth;
207+
const height = window.innerHeight;
208+
const pixelRatio = renderer.getPixelRatio();
209+
210+
this._canvas.width = Math.floor(width * pixelRatio);
211+
this._canvas.height = Math.floor(height * pixelRatio);
212+
213+
this._canvas.style.width = width + 'px';
214+
this._canvas.style.height = height + 'px';
215+
216+
renderer.setViewport(0, 0, width, height);
217+
}
218+
};
219+
220+
window.addEventListener('resize', onResize);
221+
203222
renderer.xr.addEventListener('sessionstart', () => {
204223
this._canvas = renderer.xr.getBaseLayer().context.canvas;
205224
this._canvas.requestPointerLock =

0 commit comments

Comments
 (0)