|
@@ -558,10 +558,11 @@ THREE.WebGLRenderer = function ( parameters ) {
|
|
|
function deallocateRenderTarget( renderTarget ) {
|
|
|
|
|
|
var renderTargetProperties = properties.get( renderTarget );
|
|
|
+ var textureProperties = properties.get( renderTarget.texture );
|
|
|
|
|
|
- if ( ! renderTarget || renderTargetProperties.__webglTexture === undefined ) return;
|
|
|
+ if ( ! renderTarget || textureProperties.__webglTexture === undefined ) return;
|
|
|
|
|
|
- _gl.deleteTexture( renderTargetProperties.__webglTexture );
|
|
|
+ _gl.deleteTexture( textureProperties.__webglTexture );
|
|
|
|
|
|
if ( renderTarget instanceof THREE.WebGLRenderTargetCube ) {
|
|
|
|
|
@@ -579,6 +580,7 @@ THREE.WebGLRenderer = function ( parameters ) {
|
|
|
|
|
|
}
|
|
|
|
|
|
+ properties.delete( renderTarget.texture );
|
|
|
properties.delete( renderTarget );
|
|
|
|
|
|
}
|
|
@@ -1156,11 +1158,14 @@ THREE.WebGLRenderer = function ( parameters ) {
|
|
|
lensFlarePlugin.render( scene, camera, _currentWidth, _currentHeight );
|
|
|
|
|
|
// Generate mipmap if we're using any kind of mipmap filtering
|
|
|
-
|
|
|
- if ( renderTarget && renderTarget.generateMipmaps && renderTarget.minFilter !== THREE.NearestFilter && renderTarget.minFilter !== THREE.LinearFilter ) {
|
|
|
-
|
|
|
- updateRenderTargetMipmap( renderTarget );
|
|
|
-
|
|
|
+
|
|
|
+ if ( renderTarget ) {
|
|
|
+ var texture = renderTarget.texture;
|
|
|
+ if ( texture.generateMipmaps &&
|
|
|
+ texture.minFilter !== THREE.NearestFilter &&
|
|
|
+ texture.minFilter !== THREE.LinearFilter ) {
|
|
|
+ updateRenderTargetMipmap( renderTarget );
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
// Ensure depth buffer writing is enabled so it can be cleared on next render
|
|
@@ -1800,6 +1805,7 @@ THREE.WebGLRenderer = function ( parameters ) {
|
|
|
|
|
|
if ( uvScaleMap !== undefined ) {
|
|
|
|
|
|
+ if ( uvScaleMap instanceof THREE.WebGLRenderTarget ) uvScaleMap = uvScaleMap.texture;
|
|
|
var offset = uvScaleMap.offset;
|
|
|
var repeat = uvScaleMap.repeat;
|
|
|
|
|
@@ -2314,7 +2320,11 @@ THREE.WebGLRenderer = function ( parameters ) {
|
|
|
|
|
|
} else if ( texture instanceof THREE.WebGLRenderTargetCube ) {
|
|
|
|
|
|
- setCubeTextureDynamic( texture, textureUnit );
|
|
|
+ setCubeTextureDynamic( texture.texture, textureUnit );
|
|
|
+
|
|
|
+ } else if ( texture instanceof THREE.WebGLRenderTarget ) {
|
|
|
+
|
|
|
+ _this.setTexture( texture.texture, textureUnit );
|
|
|
|
|
|
} else {
|
|
|
|
|
@@ -2975,7 +2985,7 @@ THREE.WebGLRenderer = function ( parameters ) {
|
|
|
function setupFrameBuffer ( framebuffer, renderTarget, textureTarget ) {
|
|
|
|
|
|
_gl.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer );
|
|
|
- _gl.framebufferTexture2D( _gl.FRAMEBUFFER, _gl.COLOR_ATTACHMENT0, textureTarget, properties.get( renderTarget ).__webglTexture, 0 );
|
|
|
+ _gl.framebufferTexture2D( _gl.FRAMEBUFFER, _gl.COLOR_ATTACHMENT0, textureTarget, properties.get( renderTarget.texture ).__webglTexture, 0 );
|
|
|
|
|
|
}
|
|
|
|
|
@@ -3015,30 +3025,31 @@ THREE.WebGLRenderer = function ( parameters ) {
|
|
|
if ( renderTarget && properties.get( renderTarget ).__webglFramebuffer === undefined ) {
|
|
|
|
|
|
var renderTargetProperties = properties.get( renderTarget );
|
|
|
+ var textureProperties = properties.get( renderTarget.texture );
|
|
|
|
|
|
if ( renderTarget.depthBuffer === undefined ) renderTarget.depthBuffer = true;
|
|
|
if ( renderTarget.stencilBuffer === undefined ) renderTarget.stencilBuffer = true;
|
|
|
|
|
|
renderTarget.addEventListener( 'dispose', onRenderTargetDispose );
|
|
|
|
|
|
- renderTargetProperties.__webglTexture = _gl.createTexture();
|
|
|
+ textureProperties.__webglTexture = _gl.createTexture();
|
|
|
|
|
|
_infoMemory.textures ++;
|
|
|
|
|
|
// Setup texture, create render and frame buffers
|
|
|
|
|
|
var isTargetPowerOfTwo = THREE.Math.isPowerOfTwo( renderTarget.width ) && THREE.Math.isPowerOfTwo( renderTarget.height ),
|
|
|
- glFormat = paramThreeToGL( renderTarget.format ),
|
|
|
- glType = paramThreeToGL( renderTarget.type );
|
|
|
+ glFormat = paramThreeToGL( renderTarget.texture.format ),
|
|
|
+ glType = paramThreeToGL( renderTarget.texture.type );
|
|
|
|
|
|
if ( isCube ) {
|
|
|
|
|
|
renderTargetProperties.__webglFramebuffer = [];
|
|
|
renderTargetProperties.__webglRenderbuffer = [];
|
|
|
|
|
|
- state.bindTexture( _gl.TEXTURE_CUBE_MAP, renderTargetProperties.__webglTexture );
|
|
|
+ state.bindTexture( _gl.TEXTURE_CUBE_MAP, textureProperties.__webglTexture );
|
|
|
|
|
|
- setTextureParameters( _gl.TEXTURE_CUBE_MAP, renderTarget, isTargetPowerOfTwo );
|
|
|
+ setTextureParameters( _gl.TEXTURE_CUBE_MAP, renderTarget.texture, isTargetPowerOfTwo );
|
|
|
|
|
|
for ( var i = 0; i < 6; i ++ ) {
|
|
|
|
|
@@ -3051,7 +3062,7 @@ THREE.WebGLRenderer = function ( parameters ) {
|
|
|
|
|
|
}
|
|
|
|
|
|
- if ( renderTarget.generateMipmaps && isTargetPowerOfTwo ) _gl.generateMipmap( _gl.TEXTURE_CUBE_MAP );
|
|
|
+ if ( renderTarget.texture.generateMipmaps && isTargetPowerOfTwo ) _gl.generateMipmap( _gl.TEXTURE_CUBE_MAP );
|
|
|
|
|
|
} else {
|
|
|
|
|
@@ -3067,8 +3078,8 @@ THREE.WebGLRenderer = function ( parameters ) {
|
|
|
|
|
|
}
|
|
|
|
|
|
- state.bindTexture( _gl.TEXTURE_2D, renderTargetProperties.__webglTexture );
|
|
|
- setTextureParameters( _gl.TEXTURE_2D, renderTarget, isTargetPowerOfTwo );
|
|
|
+ state.bindTexture( _gl.TEXTURE_2D, textureProperties.__webglTexture );
|
|
|
+ setTextureParameters( _gl.TEXTURE_2D, renderTarget.texture, isTargetPowerOfTwo );
|
|
|
|
|
|
state.texImage2D( _gl.TEXTURE_2D, 0, glFormat, renderTarget.width, renderTarget.height, 0, glFormat, glType, null );
|
|
|
|
|
@@ -3092,7 +3103,7 @@ THREE.WebGLRenderer = function ( parameters ) {
|
|
|
|
|
|
}
|
|
|
|
|
|
- if ( renderTarget.generateMipmaps && isTargetPowerOfTwo ) _gl.generateMipmap( _gl.TEXTURE_2D );
|
|
|
+ if ( renderTarget.texture.generateMipmaps && isTargetPowerOfTwo ) _gl.generateMipmap( _gl.TEXTURE_2D );
|
|
|
|
|
|
}
|
|
|
|
|
@@ -3158,8 +3169,8 @@ THREE.WebGLRenderer = function ( parameters ) {
|
|
|
|
|
|
if ( isCube ) {
|
|
|
|
|
|
- var renderTargetProperties = properties.get( renderTarget );
|
|
|
- _gl.framebufferTexture2D( _gl.FRAMEBUFFER, _gl.COLOR_ATTACHMENT0, _gl.TEXTURE_CUBE_MAP_POSITIVE_X + renderTarget.activeCubeFace, renderTargetProperties.__webglTexture, 0 );
|
|
|
+ var textureProperties = properties.get( renderTarget.texture );
|
|
|
+ _gl.framebufferTexture2D( _gl.FRAMEBUFFER, _gl.COLOR_ATTACHMENT0, _gl.TEXTURE_CUBE_MAP_POSITIVE_X + renderTarget.activeCubeFace, textureProperties.__webglTexture, 0 );
|
|
|
|
|
|
}
|
|
|
|
|
@@ -3189,14 +3200,14 @@ THREE.WebGLRenderer = function ( parameters ) {
|
|
|
|
|
|
}
|
|
|
|
|
|
- if ( renderTarget.format !== THREE.RGBAFormat && paramThreeToGL( renderTarget.format ) !== _gl.getParameter( _gl.IMPLEMENTATION_COLOR_READ_FORMAT ) ) {
|
|
|
+ if ( renderTarget.texture.format !== THREE.RGBAFormat && paramThreeToGL( renderTarget.texture.format ) !== _gl.getParameter( _gl.IMPLEMENTATION_COLOR_READ_FORMAT ) ) {
|
|
|
|
|
|
console.error( 'THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format.' );
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
- if ( renderTarget.type !== THREE.UnsignedByteType && paramThreeToGL( renderTarget.type ) !== _gl.getParameter( _gl.IMPLEMENTATION_COLOR_READ_TYPE ) ) {
|
|
|
+ if ( renderTarget.texture.type !== THREE.UnsignedByteType && paramThreeToGL( renderTarget.texture.type ) !== _gl.getParameter( _gl.IMPLEMENTATION_COLOR_READ_TYPE ) ) {
|
|
|
|
|
|
console.error( 'THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.' );
|
|
|
return;
|
|
@@ -3205,7 +3216,7 @@ THREE.WebGLRenderer = function ( parameters ) {
|
|
|
|
|
|
if ( _gl.checkFramebufferStatus( _gl.FRAMEBUFFER ) === _gl.FRAMEBUFFER_COMPLETE ) {
|
|
|
|
|
|
- _gl.readPixels( x, y, width, height, paramThreeToGL( renderTarget.format ), paramThreeToGL( renderTarget.type ), buffer );
|
|
|
+ _gl.readPixels( x, y, width, height, paramThreeToGL( renderTarget.texture.format ), paramThreeToGL( renderTarget.texture.type ), buffer );
|
|
|
|
|
|
} else {
|
|
|
|
|
@@ -3226,7 +3237,7 @@ THREE.WebGLRenderer = function ( parameters ) {
|
|
|
function updateRenderTargetMipmap( renderTarget ) {
|
|
|
|
|
|
var target = renderTarget instanceof THREE.WebGLRenderTargetCube ? _gl.TEXTURE_CUBE_MAP : _gl.TEXTURE_2D;
|
|
|
- var texture = properties.get( renderTarget ).__webglTexture;
|
|
|
+ var texture = properties.get( renderTarget.texture ).__webglTexture;
|
|
|
|
|
|
state.bindTexture( target, texture );
|
|
|
_gl.generateMipmap( target );
|