Pārlūkot izejas kodu

WebGLRenderTarget: Adde viewport. See #5979 #7732.

Mr.doob 9 gadi atpakaļ
vecāks
revīzija
d253080f7e

+ 26 - 0
src/math/Rectangle.js

@@ -0,0 +1,26 @@
+/**
+ * @author mrdoob / http://mrdoob.com/
+ */
+
+THREE.Rectangle = function ( x, y, width, height ) {
+
+	this.set( x, y, width, height );
+
+};
+
+THREE.Rectangle.prototype = {
+
+	constructor: THREE.Rectangle,
+
+	set: function ( x, y, width, height ) {
+
+		this.x = x;
+		this.y = y;
+		this.width = width;
+		this.height = height;
+
+		return this;
+
+	}
+
+};

+ 10 - 0
src/renderers/WebGLRenderTarget.js

@@ -16,6 +16,8 @@ THREE.WebGLRenderTarget = function ( width, height, options ) {
 	this.width = width;
 	this.height = height;
 
+	this.viewport = new THREE.Rectangle( 0, 0, width, height );
+
 	options = options || {};
 
 	if ( options.minFilter === undefined ) options.minFilter = THREE.LinearFilter;
@@ -38,12 +40,20 @@ THREE.WebGLRenderTarget.prototype = {
 			this.width = width;
 			this.height = height;
 
+			this.viewport.set( 0, 0, width, height );
+
 			this.dispose();
 
 		}
 
 	},
 
+	setViewport: function ( x, y, width, height ) {
+
+		this.viewport.set( x, y, width, height );
+
+	},
+
 	clone: function () {
 
 		return new this.constructor().copy( this );

+ 13 - 21
src/renderers/WebGLRenderer.js

@@ -88,10 +88,8 @@ THREE.WebGLRenderer = function ( parameters ) {
 
 	_usedTextureUnits = 0,
 
-	_viewportX = 0,
-	_viewportY = 0,
-	_viewportWidth = _canvas.width,
-	_viewportHeight = _canvas.height,
+	_viewport = new THREE.Rectangle( 0, 0, _canvas.width, _canvas.height ),
+
 	_currentWidth = 0,
 	_currentHeight = 0,
 
@@ -240,7 +238,7 @@ THREE.WebGLRenderer = function ( parameters ) {
 
 		state.init();
 
-		_gl.viewport( _viewportX, _viewportY, _viewportWidth, _viewportHeight );
+		_gl.viewport( _viewport.x, _viewport.y, _viewport.width, _viewport.height );
 
 		glClearColor( _clearColor.r, _clearColor.g, _clearColor.b, _clearAlpha );
 
@@ -374,11 +372,13 @@ THREE.WebGLRenderer = function ( parameters ) {
 
 		if ( _currentRenderTarget === null ) {
 
-			_viewportX = x *= pixelRatio;
-			_viewportY = y *= pixelRatio;
+			x *= pixelRatio;
+			y *= pixelRatio;
+
+			width *= pixelRatio;
+			height *= pixelRatio;
 
-			_viewportWidth = width *= pixelRatio;
-			_viewportHeight = height *= pixelRatio;
+			_viewport.set( x, y, width, height );
 
 		}
 
@@ -3381,7 +3381,7 @@ THREE.WebGLRenderer = function ( parameters ) {
 		}
 
 		var isCube = ( renderTarget instanceof THREE.WebGLRenderTargetCube );
-		var framebuffer, width, height, vx, vy;
+		var framebuffer, viewport;
 
 		if ( renderTarget ) {
 
@@ -3397,28 +3397,20 @@ THREE.WebGLRenderer = function ( parameters ) {
 
 			}
 
-			width = renderTarget.width;
-			height = renderTarget.height;
-
-			vx = 0;
-			vy = 0;
+			viewport = renderTarget.viewport;
 
 		} else {
 
 			framebuffer = null;
 
-			width = _viewportWidth;
-			height = _viewportHeight;
-
-			vx = _viewportX;
-			vy = _viewportY;
+			viewport = _viewport;
 
 		}
 
 		if ( framebuffer !== _currentFramebuffer ) {
 
 			_gl.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer );
-			_gl.viewport( vx, vy, width, height );
+			_gl.viewport( viewport.x, viewport.y, viewport.width, viewport.height );
 
 			_currentFramebuffer = framebuffer;
 

+ 1 - 0
utils/build/includes/common.json

@@ -16,6 +16,7 @@
 	"src/math/Frustum.js",
 	"src/math/Plane.js",
 	"src/math/Math.js",
+	"src/math/Rectangle.js",
 	"src/math/Spline.js",
 	"src/math/Triangle.js",
 	"src/math/Interpolant.js",