Skip to content

Commit d4b1a04

Browse files
committed
WebGLSnapshot can now grab from a framebuffer
1 parent a737cf0 commit d4b1a04

1 file changed

Lines changed: 17 additions & 8 deletions

File tree

src/renderer/snapshot/WebGLSnapshot.js

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)