|
@@ -6185,6 +6185,54 @@ THREE.WebGLRenderer = function ( parameters ) {
|
|
|
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
+ this.readRenderTargetPixels = function( renderTarget, x, y, width, height, buffer ) {
|
|
|
|
+
|
|
|
|
+ if ( ! ( renderTarget instanceof THREE.WebGLRenderTarget ) ) {
|
|
|
|
+
|
|
|
|
+ console.error( 'THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.' );
|
|
|
|
+ return;
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if ( renderTarget.__webglFramebuffer ) {
|
|
|
|
+
|
|
|
|
+ if ( renderTarget.format !== THREE.RGBAFormat ) {
|
|
|
|
+
|
|
|
|
+ console.error( 'THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA format. readPixels can read only RGBA format.' );
|
|
|
|
+ return;
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ var restore = false;
|
|
|
|
+
|
|
|
|
+ if ( renderTarget.__webglFramebuffer !== _currentFramebuffer ) {
|
|
|
|
+
|
|
|
|
+ _gl.bindFramebuffer( _gl.FRAMEBUFFER, renderTarget.__webglFramebuffer );
|
|
|
|
+
|
|
|
|
+ restore = true;
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if ( _gl.checkFramebufferStatus( _gl.FRAMEBUFFER ) === _gl.FRAMEBUFFER_COMPLETE ) {
|
|
|
|
+
|
|
|
|
+ _gl.readPixels( x, y, width, height, _gl.RGBA, _gl.UNSIGNED_BYTE, buffer );
|
|
|
|
+
|
|
|
|
+ } else {
|
|
|
|
+
|
|
|
|
+ console.error( 'THREE.WebGLRenderer.readRenderTargetPixels: readPixels from renderTarget failed. Framebuffer not complete.' );
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if ( restore ) {
|
|
|
|
+
|
|
|
|
+ _gl.bindFramebuffer( _gl.FRAMEBUFFER, _currentFramebuffer );
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ };
|
|
|
|
+
|
|
function updateRenderTargetMipmap ( renderTarget ) {
|
|
function updateRenderTargetMipmap ( renderTarget ) {
|
|
|
|
|
|
if ( renderTarget instanceof THREE.WebGLRenderTargetCube ) {
|
|
if ( renderTarget instanceof THREE.WebGLRenderTargetCube ) {
|