diff --git a/examples/webxr_vr_video.html b/examples/webxr_vr_video.html
index 41850c6db85fb5..ecea2e9ed14c9d 100644
--- a/examples/webxr_vr_video.html
+++ b/examples/webxr_vr_video.html
@@ -114,6 +114,7 @@
renderer.setSize( window.innerWidth, window.innerHeight );
renderer.xr.enabled = true;
renderer.xr.setReferenceSpaceType( 'local' );
+ renderer.xr.setEyeLayers( [ 1, 2 ] ); // set layers on left and right camera;
container.appendChild( renderer.domElement );
document.body.appendChild( VRButton.createButton( renderer ) );
diff --git a/src/renderers/webxr/WebXRManager.js b/src/renderers/webxr/WebXRManager.js
index 3b61a859f99e47..62e802590bec0a 100644
--- a/src/renderers/webxr/WebXRManager.js
+++ b/src/renderers/webxr/WebXRManager.js
@@ -43,21 +43,20 @@ class WebXRManager extends EventDispatcher {
//
const cameraL = new PerspectiveCamera();
- cameraL.layers.enable( 1 );
cameraL.viewport = new Vector4();
const cameraR = new PerspectiveCamera();
- cameraR.layers.enable( 2 );
cameraR.viewport = new Vector4();
const cameras = [ cameraL, cameraR ];
const cameraXR = new ArrayCamera();
- cameraXR.layers.enable( 1 );
- cameraXR.layers.enable( 2 );
let _currentDepthNear = null;
let _currentDepthFar = null;
+ let _currentCameraLayers = null;
+ let _leftEyeLayer = null;
+ let _rightEyeLayer = null;
//
@@ -159,6 +158,7 @@ class WebXRManager extends EventDispatcher {
_currentDepthNear = null;
_currentDepthFar = null;
+ _currentCameraLayers = null;
// restore framebuffer/rendering state
@@ -502,6 +502,14 @@ class WebXRManager extends EventDispatcher {
}
+ this.setEyeLayers = function ( layers ) {
+
+ _leftEyeLayer = layers[ 0 ];
+ _rightEyeLayer = layers[ 1 ];
+ _currentCameraLayers = null; // force layer setting on next update
+
+ };
+
this.updateCamera = function ( camera ) {
if ( session === null ) return;
@@ -523,6 +531,27 @@ class WebXRManager extends EventDispatcher {
}
+ if ( _currentCameraLayers !== camera.layers.mask ) {
+
+ const mask = camera.layers.mask;
+
+ if ( _leftEyeLayer && _rightEyeLayer ) {
+
+ cameraL.layers.mask = mask | 1 << _leftEyeLayer;
+ cameraR.layers.mask = mask | 1 << _rightEyeLayer;
+ cameraXR.layers.mask = mask | 1 << _rightEyeLayer | 1 << _leftEyeLayer;
+
+ } else {
+
+ cameraXR.layers.mask = cameraL.layers.mask = cameraR.layers.mask = mask;
+
+ }
+
+ _currentCameraLayers = mask;
+
+ }
+
+
const parent = camera.parent;
const cameras = cameraXR.cameras;