2
0
Эх сурвалжийг харах

Set renderer to correct resolution when entering VR mode

* Set renderer to correct resolution when entering VR mode

This ensures that the scene always renders with the best resolution for
the HMD in use. (Will get a 1:1 pixel ratio) For performance reasons
developers may want to render at a lower than recommended resolution. To
do so set VREffect.bufferScale to a lower values (like 0.75).

Will restore the renderer to the previously set resolution when the user
exits VR mode.

* Removed bufferScale from previous VREffect change
Brandon Jones 9 жил өмнө
parent
commit
94e86772e7

+ 41 - 3
examples/js/effects/VREffect.js

@@ -61,16 +61,24 @@ THREE.VREffect = function ( renderer, onError ) {
 
 	this.scale = 1;
 
+	var isPresenting = false;
+	var cachedWidth, cachedHeight;
+
 	this.setSize = function ( width, height ) {
 
-		renderer.setSize( width, height );
+		cachedWidth = width;
+		cachedHeight = height;
+
+		if ( !isPresenting ) {
+
+			renderer.setSize( width, height );
+
+		}
 
 	};
 
 	// fullscreen
 
-	var isPresenting = false;
-
 	var canvas = renderer.domElement;
 	var fullscreenchange = canvas.mozRequestFullScreen ? 'mozfullscreenchange' : 'webkitfullscreenchange';
 
@@ -80,6 +88,21 @@ THREE.VREffect = function ( renderer, onError ) {
 
 			isPresenting = document.mozFullScreenElement || document.webkitFullscreenElement;
 
+			if ( isPresenting ) {
+
+				var size = renderer.getSize();
+				cachedWidth = size.width;
+				cachedHeight = size.height;
+
+				var eyeParamsL = vrHMD.getEyeParameters( 'left' );
+				renderer.setSize( eyeParamsL.renderRect.width * 2, eyeParamsL.renderRect.height, false );
+
+			} else {
+
+				renderer.setSize( cachedWidth, cachedHeight );
+
+			}
+
 		}
 
 	}, false );
@@ -88,6 +111,21 @@ THREE.VREffect = function ( renderer, onError ) {
 
 		isPresenting = vrHMD && vrHMD.isPresenting;
 
+		if ( isPresenting ) {
+
+			var size = renderer.getSize();
+			cachedWidth = size.width;
+			cachedHeight = size.height;
+
+			var eyeParamsL = vrHMD.getEyeParameters( 'left' );
+			renderer.setSize( eyeParamsL.renderWidth * 2, eyeParamsL.renderHeight, false );
+
+		} else {
+
+			renderer.setSize( cachedWidth, cachedHeight );
+
+		}
+
 	}, false );
 
 	this.setFullScreen = function ( boolean ) {