summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSolly Ross <directxman12+github@gmail.com>2016-02-24 16:52:55 -0500
committerSolly Ross <directxman12+github@gmail.com>2016-02-24 16:52:55 -0500
commitb403cb92fb8de82d04f305b4f14fa978003890d7 (patch)
treeae11ad21efbdea8a09aee6f82b8cd316eac4cefe
parent670dbddb54264fd0082d0aca1b3acb0f1814b1d2 (diff)
parent7bc383e8b6f6da10cb3f335123fe561674a6723d (diff)
downloadnovnc-b403cb92fb8de82d04f305b4f14fa978003890d7.tar.gz
Merge pull request #582 from kanaka/bug/render-queue-corruption
Make sure to copy arrays when using render queue
-rw-r--r--include/display.js16
1 files changed, 13 insertions, 3 deletions
diff --git a/include/display.js b/include/display.js
index 6bf89bd..a492817 100644
--- a/include/display.js
+++ b/include/display.js
@@ -471,9 +471,14 @@ var Display;
blitImage: function (x, y, width, height, arr, offset, from_queue) {
if (this._renderQ.length !== 0 && !from_queue) {
+ // NB(directxman12): it's technically more performant here to use preallocated arrays,
+ // but it's a lot of extra work for not a lot of payoff -- if we're using the render queue,
+ // this probably isn't getting called *nearly* as much
+ var new_arr = new Uint8Array(width * height * 4);
+ new_arr.set(new Uint8Array(arr.buffer, 0, new_arr.length));
this.renderQ_push({
'type': 'blit',
- 'data': arr,
+ 'data': new_arr,
'x': x,
'y': y,
'width': width,
@@ -488,9 +493,14 @@ var Display;
blitRgbImage: function (x, y , width, height, arr, offset, from_queue) {
if (this._renderQ.length !== 0 && !from_queue) {
+ // NB(directxman12): it's technically more performant here to use preallocated arrays,
+ // but it's a lot of extra work for not a lot of payoff -- if we're using the render queue,
+ // this probably isn't getting called *nearly* as much
+ var new_arr = new Uint8Array(width * height * 4);
+ new_arr.set(new Uint8Array(arr.buffer, 0, new_arr.length));
this.renderQ_push({
'type': 'blitRgb',
- 'data': arr,
+ 'data': new_arr,
'x': x,
'y': y,
'width': width,
@@ -506,7 +516,7 @@ var Display;
blitRgbxImage: function (x, y, width, height, arr, offset, from_queue) {
if (this._renderQ.length !== 0 && !from_queue) {
- // NB(directxman12): it's technically more performant here to use preallocated arrays, but it
+ // NB(directxman12): it's technically more performant here to use preallocated arrays,
// but it's a lot of extra work for not a lot of payoff -- if we're using the render queue,
// this probably isn't getting called *nearly* as much
var new_arr = new Uint8Array(width * height * 4);