|
@@ -3192,60 +3192,71 @@ THREE.WebGLRenderer = function ( parameters ) {
|
|
|
|
|
|
};
|
|
|
|
|
|
- this.readRenderTargetPixels = function( renderTarget, x, y, width, height, buffer ) {
|
|
|
+ this.readRenderTargetPixels = function ( renderTarget, x, y, width, height, buffer ) {
|
|
|
|
|
|
- if ( ! ( renderTarget instanceof THREE.WebGLRenderTarget ) ) {
|
|
|
+ if ( renderTarget instanceof THREE.WebGLRenderTarget === false ) {
|
|
|
|
|
|
console.error( 'THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.' );
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
- if ( properties.get( renderTarget ).__webglFramebuffer ) {
|
|
|
+ var framebuffer = properties.get( renderTarget ).__webglFramebuffer;
|
|
|
+
|
|
|
+ if ( framebuffer ) {
|
|
|
|
|
|
var restore = false;
|
|
|
|
|
|
- if ( properties.get( renderTarget ).__webglFramebuffer !== _currentFramebuffer ) {
|
|
|
+ if ( framebuffer !== _currentFramebuffer ) {
|
|
|
|
|
|
- _gl.bindFramebuffer( _gl.FRAMEBUFFER, properties.get( renderTarget ).__webglFramebuffer );
|
|
|
+ _gl.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer );
|
|
|
|
|
|
restore = true;
|
|
|
|
|
|
}
|
|
|
- try {
|
|
|
- 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.texture.type !== THREE.UnsignedByteType
|
|
|
- && paramThreeToGL(renderTarget.texture.type) !== _gl.getParameter(_gl.IMPLEMENTATION_COLOR_READ_TYPE)
|
|
|
- && !(renderTarget.texture.type === THREE.FloatType && extensions.get('WEBGL_color_buffer_float'))
|
|
|
- && !(renderTarget.texture.type === THREE.HalfFloatType && extensions.get('EXT_color_buffer_half_float'))) {
|
|
|
-
|
|
|
- console.error('THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.');
|
|
|
- return;
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- if (_gl.checkFramebufferStatus(_gl.FRAMEBUFFER) === _gl.FRAMEBUFFER_COMPLETE) {
|
|
|
-
|
|
|
- _gl.readPixels(x, y, width, height, paramThreeToGL(renderTarget.texture.format), paramThreeToGL(renderTarget.texture.type), buffer);
|
|
|
-
|
|
|
- } else {
|
|
|
-
|
|
|
- console.error('THREE.WebGLRenderer.readRenderTargetPixels: readPixels from renderTarget failed. Framebuffer not complete.');
|
|
|
-
|
|
|
- }
|
|
|
- } finally {
|
|
|
- if ( restore ) {
|
|
|
-
|
|
|
- _gl.bindFramebuffer( _gl.FRAMEBUFFER, _currentFramebuffer );
|
|
|
-
|
|
|
- }
|
|
|
- }
|
|
|
+
|
|
|
+ try {
|
|
|
+
|
|
|
+ var texture = renderTarget.texture;
|
|
|
+
|
|
|
+ if ( texture.format !== THREE.RGBAFormat
|
|
|
+ && paramThreeToGL( 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 ( texture.type !== THREE.UnsignedByteType
|
|
|
+ && paramThreeToGL( texture.type ) !== _gl.getParameter( _gl.IMPLEMENTATION_COLOR_READ_TYPE )
|
|
|
+ && ! ( texture.type === THREE.FloatType && extensions.get( 'WEBGL_color_buffer_float' ) )
|
|
|
+ && ! ( texture.type === THREE.HalfFloatType && extensions.get( 'EXT_color_buffer_half_float' ) ) ) {
|
|
|
+
|
|
|
+ console.error( 'THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.' );
|
|
|
+ return;
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ if ( _gl.checkFramebufferStatus( _gl.FRAMEBUFFER ) === _gl.FRAMEBUFFER_COMPLETE ) {
|
|
|
+
|
|
|
+ _gl.readPixels( x, y, width, height, paramThreeToGL( texture.format ), paramThreeToGL( texture.type ), buffer );
|
|
|
+
|
|
|
+ } else {
|
|
|
+
|
|
|
+ console.error( 'THREE.WebGLRenderer.readRenderTargetPixels: readPixels from renderTarget failed. Framebuffer not complete.' );
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ } finally {
|
|
|
+
|
|
|
+ if ( restore ) {
|
|
|
+
|
|
|
+ _gl.bindFramebuffer( _gl.FRAMEBUFFER, _currentFramebuffer );
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
}
|
|
|
|
|
|
};
|