@@ -29,45 +29,54 @@ var WebGLSnapshot = function (sourceCanvas, config)
2929 var encoderOptions = GetFastValue ( config , 'encoder' , 0.92 ) ;
3030 var x = GetFastValue ( config , 'x' , 0 ) ;
3131 var y = GetFastValue ( config , 'y' , 0 ) ;
32- var width = GetFastValue ( config , 'width' , gl . drawingBufferWidth ) ;
33- var height = GetFastValue ( config , 'height' , gl . drawingBufferHeight ) ;
32+
3433 var getPixel = GetFastValue ( config , 'getPixel' , false ) ;
3534
35+ var isFramebuffer = GetFastValue ( config , 'isFramebuffer' , false ) ;
36+
37+ var bufferWidth = ( isFramebuffer ) ? GetFastValue ( config , 'bufferWidth' , 1 ) : gl . drawingBufferWidth ;
38+ var bufferHeight = ( isFramebuffer ) ? GetFastValue ( config , 'bufferHeight' , 1 ) : gl . drawingBufferHeight ;
39+
3640 if ( getPixel )
3741 {
3842 var pixel = new Uint8Array ( 4 ) ;
3943
40- gl . readPixels ( x , gl . drawingBufferHeight - y , 1 , 1 , gl . RGBA , gl . UNSIGNED_BYTE , pixel ) ;
44+ gl . readPixels ( x , bufferHeight - y , 1 , 1 , gl . RGBA , gl . UNSIGNED_BYTE , pixel ) ;
4145
4246 callback . call ( null , new Color ( pixel [ 0 ] , pixel [ 1 ] , pixel [ 2 ] , pixel [ 3 ] / 255 ) ) ;
4347 }
4448 else
4549 {
46- var pixels = new Uint8Array ( width * height * 4 ) ;
50+ var width = GetFastValue ( config , 'width' , bufferWidth ) ;
51+ var height = GetFastValue ( config , 'height' , bufferHeight ) ;
52+
53+ var total = width * height * 4 ;
54+
55+ var pixels = new Uint8Array ( total ) ;
4756
48- gl . readPixels ( x , gl . drawingBufferHeight - y - height , width , height , gl . RGBA , gl . UNSIGNED_BYTE , pixels ) ;
57+ gl . readPixels ( x , bufferHeight - y - height , width , height , gl . RGBA , gl . UNSIGNED_BYTE , pixels ) ;
4958
5059 var canvas = CanvasPool . createWebGL ( this , width , height ) ;
5160 var ctx = canvas . getContext ( '2d' ) ;
5261
5362 var imageData = ctx . getImageData ( 0 , 0 , width , height ) ;
5463
5564 var data = imageData . data ;
56-
65+
5766 for ( var py = 0 ; py < height ; py ++ )
5867 {
5968 for ( var px = 0 ; px < width ; px ++ )
6069 {
6170 var sourceIndex = ( ( height - py ) * width + px ) * 4 ;
62- var destIndex = ( py * width + px ) * 4 ;
71+ var destIndex = ( isFramebuffer ) ? total - ( ( py * width + ( width - px ) ) * 4 ) : ( py * width + px ) * 4 ;
6372
6473 data [ destIndex + 0 ] = pixels [ sourceIndex + 0 ] ;
6574 data [ destIndex + 1 ] = pixels [ sourceIndex + 1 ] ;
6675 data [ destIndex + 2 ] = pixels [ sourceIndex + 2 ] ;
6776 data [ destIndex + 3 ] = pixels [ sourceIndex + 3 ] ;
6877 }
6978 }
70-
79+
7180 ctx . putImageData ( imageData , 0 , 0 ) ;
7281
7382 var image = new Image ( ) ;
0 commit comments