Browse Source

WebGLRenderer: Tweaked the way setViewport/setScissor works. See #5979 #7732.

Mr.doob 9 years ago
parent
commit
48461d0875
2 changed files with 23 additions and 26 deletions
  1. 23 18
      src/renderers/WebGLRenderer.js
  2. 0 8
      src/renderers/webgl/WebGLShadowMap.js

+ 23 - 18
src/renderers/WebGLRenderer.js

@@ -372,34 +372,33 @@ THREE.WebGLRenderer = function ( parameters ) {
 
 	this.setViewport = function ( x, y, width, height ) {
 
-		_viewportX = x * pixelRatio;
-		_viewportY = y * pixelRatio;
+		if ( _currentRenderTarget === null ) {
 
-		_viewportWidth = width * pixelRatio;
-		_viewportHeight = height * pixelRatio;
+			_viewportX = x *= pixelRatio;
+			_viewportY = y *= pixelRatio;
 
-		_gl.viewport( _viewportX, _viewportY, _viewportWidth, _viewportHeight );
+			_viewportWidth = width *= pixelRatio;
+			_viewportHeight = height *= pixelRatio;
+
+		}
+
+		_gl.viewport( x, y, width, height );
 
 	};
 
-	this.getViewport = function ( dimensions ) {
+	this.setScissor = function ( x, y, width, height ) {
 
-		dimensions.x = _viewportX / pixelRatio;
-		dimensions.y = _viewportY / pixelRatio;
+		if ( _currentRenderTarget === null ) {
 
-		dimensions.z = _viewportWidth / pixelRatio;
-		dimensions.w = _viewportHeight / pixelRatio;
+			x *= pixelRatio;
+			y *= pixelRatio;
 
-	};
+			width *= pixelRatio;
+			height *= pixelRatio;
 
-	this.setScissor = function ( x, y, width, height ) {
+		}
 
-		_gl.scissor(
-			x * pixelRatio,
-			y * pixelRatio,
-			width * pixelRatio,
-			height * pixelRatio
-		);
+		_gl.scissor( x, y, width, height );
 
 	};
 
@@ -1149,6 +1148,12 @@ THREE.WebGLRenderer = function ( parameters ) {
 		_infoRender.faces = 0;
 		_infoRender.points = 0;
 
+		if ( renderTarget === undefined ) {
+
+			renderTarget = null;
+
+		}
+
 		this.setRenderTarget( renderTarget );
 
 		if ( this.autoClear || forceClear ) {

+ 0 - 8
src/renderers/webgl/WebGLShadowMap.js

@@ -38,8 +38,6 @@ THREE.WebGLShadowMap = function ( _renderer, _lights, _objects ) {
 		new THREE.Vector4(), new THREE.Vector4(), new THREE.Vector4()
 	];
 
-	var _vector4 = new THREE.Vector4();
-
 	// init
 
 	var depthShader = THREE.ShaderLib[ "depthRGBA" ];
@@ -102,9 +100,6 @@ THREE.WebGLShadowMap = function ( _renderer, _lights, _objects ) {
 
 		var currentScissorTest = _state.getScissorTest();
 
-		// save the existing viewport so it can be restored later
-		_renderer.getViewport( _vector4 );
-
 		// Set GL state for depth map.
 		_gl.clearColor( 1, 1, 1, 1 );
 		_state.disable( _gl.BLEND );
@@ -295,9 +290,6 @@ THREE.WebGLShadowMap = function ( _renderer, _lights, _objects ) {
 
 		}
 
-		_renderer.setRenderTarget( null );
-		_renderer.setViewport( _vector4.x, _vector4.y, _vector4.z, _vector4.w );
-
 		// Restore GL state.
 		var clearColor = _renderer.getClearColor(),
 		clearAlpha = _renderer.getClearAlpha();