Skip to content

Commit 8364151

Browse files
fix: Rename Texture.texture.refs to more private Texture.texture._refs
fix: Create framebuffer for internal texture, and not per GPU Texture fix: Set window.GPU by use of getter, and have no setter
1 parent a3c930d commit 8364151

File tree

11 files changed

+143
-136
lines changed

11 files changed

+143
-136
lines changed

dist/gpu-browser-core.js

Lines changed: 29 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@
44
*
55
* GPU Accelerated JavaScript
66
*
7-
* @version 2.4.1
8-
* @date Wed Dec 25 2019 08:11:18 GMT-0500 (Eastern Standard Time)
7+
* @version 2.4.2
8+
* @date Fri Dec 27 2019 08:17:30 GMT-0500 (Eastern Standard Time)
99
*
1010
* @license MIT
1111
* The MIT License
@@ -5178,7 +5178,7 @@ class GLKernel extends Kernel {
51785178
if (this.texture.texture === arg.texture) {
51795179
const { prevArg } = kernelValue;
51805180
if (prevArg) {
5181-
if (prevArg.texture.refs === 1) {
5181+
if (prevArg.texture._refs === 1) {
51825182
this.texture.delete();
51835183
this.texture = prevArg.clone();
51845184
}
@@ -5192,7 +5192,7 @@ class GLKernel extends Kernel {
51925192
if (mappedTexture.texture === arg.texture) {
51935193
const { prevArg } = kernelValue;
51945194
if (prevArg) {
5195-
if (prevArg.texture.refs === 1) {
5195+
if (prevArg.texture._refs === 1) {
51965196
mappedTexture.delete();
51975197
mappedTextures[i] = prevArg.clone();
51985198
}
@@ -5205,8 +5205,7 @@ class GLKernel extends Kernel {
52055205
}
52065206
}
52075207

5208-
initCanvas() {
5209-
}
5208+
initCanvas() {}
52105209
}
52115210

52125211
const typeMap = {
@@ -5475,46 +5474,39 @@ class GLTexture extends Texture {
54755474
}
54765475

54775476
beforeMutate() {
5478-
if (this.texture.refs > 1) {
5477+
if (this.texture._refs > 1) {
54795478
this.cloneTexture();
54805479
}
54815480
}
54825481

54835482
cloneTexture() {
5484-
this.texture.refs--;
5483+
this.texture._refs--;
54855484
const { context: gl, size, texture } = this;
54865485
const existingFramebuffer = gl.getParameter(gl.FRAMEBUFFER_BINDING);
5487-
const existingActiveTexture = gl.getParameter(gl.ACTIVE_TEXTURE);
5488-
const existingTexture2DBinding = gl.getParameter(gl.TEXTURE_BINDING_2D);
5489-
if (!this.framebuffer) {
5490-
this.framebuffer = gl.createFramebuffer();
5486+
if (!texture._framebuffer) {
5487+
texture._framebuffer = gl.createFramebuffer();
54915488
}
5492-
this.framebuffer.width = size[0];
5493-
this.framebuffer.height = size[1];
5494-
gl.bindFramebuffer(gl.FRAMEBUFFER, this.framebuffer);
5489+
texture._framebuffer.width = size[0];
5490+
texture._framebuffer.width = size[1];
5491+
gl.bindFramebuffer(gl.FRAMEBUFFER, texture._framebuffer);
54955492
selectTexture(gl, texture);
54965493
gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, texture, 0);
54975494
const target = gl.createTexture();
54985495
selectTexture(gl, target);
54995496
gl.texImage2D(gl.TEXTURE_2D, 0, this.internalFormat, size[0], size[1], 0, this.textureFormat, this.textureType, null);
55005497
gl.copyTexSubImage2D(gl.TEXTURE_2D, 0, 0, 0, 0, 0, size[0], size[1]);
5501-
target.refs = 1;
5498+
target._refs = 1;
5499+
target._framebuffer = texture._framebuffer;
55025500
this.texture = target;
55035501
if (existingFramebuffer) {
55045502
gl.bindFramebuffer(gl.FRAMEBUFFER, existingFramebuffer);
55055503
}
5506-
if (existingActiveTexture) {
5507-
gl.activeTexture(existingActiveTexture);
5508-
}
5509-
if (existingTexture2DBinding) {
5510-
gl.bindTexture(gl.TEXTURE_2D, existingTexture2DBinding);
5511-
}
55125504
}
55135505

55145506
delete() {
55155507
super.delete();
5516-
if (this.framebuffer) {
5517-
this.context.deleteFramebuffer(this.framebuffer);
5508+
if (this.texture._refs === 0 && this.texture._framebuffer) {
5509+
this.context.deleteFramebuffer(this.texture._framebuffer);
55185510
}
55195511
}
55205512
}
@@ -12673,7 +12665,12 @@ for (const p in lib) {
1267312665
if (p === 'GPU') continue;
1267412666
GPU[p] = lib[p];
1267512667
}
12676-
module.exports = GPU;
12668+
Object.defineProperty(window, 'GPU', {
12669+
get() {
12670+
return GPU;
12671+
}
12672+
});
12673+
module.exports = lib;
1267712674
},{"./index":107}],106:[function(require,module,exports){
1267812675
const { gpuMock } = require('gpu-mock.js');
1267912676
const { utils } = require('./utils');
@@ -13100,7 +13097,7 @@ class GPU {
1310013097
}
1310113098
}
1310213099
} catch (e) {
13103-
reject();
13100+
reject(e);
1310413101
}
1310513102
resolve();
1310613103
}, 0);
@@ -13391,10 +13388,10 @@ class Texture {
1339113388
if (!texture) throw new Error('settings property "texture" required.');
1339213389
if (!kernel) throw new Error('settings property "kernel" required.');
1339313390
this.texture = texture;
13394-
if (texture.refs) {
13395-
texture.refs++;
13391+
if (texture._refs) {
13392+
texture._refs++;
1339613393
} else {
13397-
texture.refs = 1;
13394+
texture._refs = 1;
1339813395
}
1339913396
this.size = size;
1340013397
this.dimensions = dimensions;
@@ -13418,9 +13415,9 @@ class Texture {
1341813415
delete() {
1341913416
if (this._deleted) return;
1342013417
this._deleted = true;
13421-
if (this.texture.refs) {
13422-
this.texture.refs--;
13423-
if (this.texture.refs) return;
13418+
if (this.texture._refs) {
13419+
this.texture._refs--;
13420+
if (this.texture._refs) return;
1342413421
}
1342513422
return this.context.deleteTexture(this.texture);
1342613423
}

dist/gpu-browser-core.min.js

Lines changed: 3 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/gpu-browser.js

Lines changed: 29 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@
44
*
55
* GPU Accelerated JavaScript
66
*
7-
* @version 2.4.1
8-
* @date Wed Dec 25 2019 08:11:18 GMT-0500 (Eastern Standard Time)
7+
* @version 2.4.2
8+
* @date Fri Dec 27 2019 08:17:30 GMT-0500 (Eastern Standard Time)
99
*
1010
* @license MIT
1111
* The MIT License
@@ -9612,7 +9612,7 @@ class GLKernel extends Kernel {
96129612
if (this.texture.texture === arg.texture) {
96139613
const { prevArg } = kernelValue;
96149614
if (prevArg) {
9615-
if (prevArg.texture.refs === 1) {
9615+
if (prevArg.texture._refs === 1) {
96169616
this.texture.delete();
96179617
this.texture = prevArg.clone();
96189618
}
@@ -9626,7 +9626,7 @@ class GLKernel extends Kernel {
96269626
if (mappedTexture.texture === arg.texture) {
96279627
const { prevArg } = kernelValue;
96289628
if (prevArg) {
9629-
if (prevArg.texture.refs === 1) {
9629+
if (prevArg.texture._refs === 1) {
96309630
mappedTexture.delete();
96319631
mappedTextures[i] = prevArg.clone();
96329632
}
@@ -9639,8 +9639,7 @@ class GLKernel extends Kernel {
96399639
}
96409640
}
96419641

9642-
initCanvas() {
9643-
}
9642+
initCanvas() {}
96449643
}
96459644

96469645
const typeMap = {
@@ -9909,46 +9908,39 @@ class GLTexture extends Texture {
99099908
}
99109909

99119910
beforeMutate() {
9912-
if (this.texture.refs > 1) {
9911+
if (this.texture._refs > 1) {
99139912
this.cloneTexture();
99149913
}
99159914
}
99169915

99179916
cloneTexture() {
9918-
this.texture.refs--;
9917+
this.texture._refs--;
99199918
const { context: gl, size, texture } = this;
99209919
const existingFramebuffer = gl.getParameter(gl.FRAMEBUFFER_BINDING);
9921-
const existingActiveTexture = gl.getParameter(gl.ACTIVE_TEXTURE);
9922-
const existingTexture2DBinding = gl.getParameter(gl.TEXTURE_BINDING_2D);
9923-
if (!this.framebuffer) {
9924-
this.framebuffer = gl.createFramebuffer();
9920+
if (!texture._framebuffer) {
9921+
texture._framebuffer = gl.createFramebuffer();
99259922
}
9926-
this.framebuffer.width = size[0];
9927-
this.framebuffer.height = size[1];
9928-
gl.bindFramebuffer(gl.FRAMEBUFFER, this.framebuffer);
9923+
texture._framebuffer.width = size[0];
9924+
texture._framebuffer.width = size[1];
9925+
gl.bindFramebuffer(gl.FRAMEBUFFER, texture._framebuffer);
99299926
selectTexture(gl, texture);
99309927
gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, texture, 0);
99319928
const target = gl.createTexture();
99329929
selectTexture(gl, target);
99339930
gl.texImage2D(gl.TEXTURE_2D, 0, this.internalFormat, size[0], size[1], 0, this.textureFormat, this.textureType, null);
99349931
gl.copyTexSubImage2D(gl.TEXTURE_2D, 0, 0, 0, 0, 0, size[0], size[1]);
9935-
target.refs = 1;
9932+
target._refs = 1;
9933+
target._framebuffer = texture._framebuffer;
99369934
this.texture = target;
99379935
if (existingFramebuffer) {
99389936
gl.bindFramebuffer(gl.FRAMEBUFFER, existingFramebuffer);
99399937
}
9940-
if (existingActiveTexture) {
9941-
gl.activeTexture(existingActiveTexture);
9942-
}
9943-
if (existingTexture2DBinding) {
9944-
gl.bindTexture(gl.TEXTURE_2D, existingTexture2DBinding);
9945-
}
99469938
}
99479939

99489940
delete() {
99499941
super.delete();
9950-
if (this.framebuffer) {
9951-
this.context.deleteFramebuffer(this.framebuffer);
9942+
if (this.texture._refs === 0 && this.texture._framebuffer) {
9943+
this.context.deleteFramebuffer(this.texture._framebuffer);
99529944
}
99539945
}
99549946
}
@@ -17107,7 +17099,12 @@ for (const p in lib) {
1710717099
if (p === 'GPU') continue;
1710817100
GPU[p] = lib[p];
1710917101
}
17110-
module.exports = GPU;
17102+
Object.defineProperty(window, 'GPU', {
17103+
get() {
17104+
return GPU;
17105+
}
17106+
});
17107+
module.exports = lib;
1711117108
},{"./index":108}],107:[function(require,module,exports){
1711217109
const { gpuMock } = require('gpu-mock.js');
1711317110
const { utils } = require('./utils');
@@ -17534,7 +17531,7 @@ class GPU {
1753417531
}
1753517532
}
1753617533
} catch (e) {
17537-
reject();
17534+
reject(e);
1753817535
}
1753917536
resolve();
1754017537
}, 0);
@@ -17825,10 +17822,10 @@ class Texture {
1782517822
if (!texture) throw new Error('settings property "texture" required.');
1782617823
if (!kernel) throw new Error('settings property "kernel" required.');
1782717824
this.texture = texture;
17828-
if (texture.refs) {
17829-
texture.refs++;
17825+
if (texture._refs) {
17826+
texture._refs++;
1783017827
} else {
17831-
texture.refs = 1;
17828+
texture._refs = 1;
1783217829
}
1783317830
this.size = size;
1783417831
this.dimensions = dimensions;
@@ -17852,9 +17849,9 @@ class Texture {
1785217849
delete() {
1785317850
if (this._deleted) return;
1785417851
this._deleted = true;
17855-
if (this.texture.refs) {
17856-
this.texture.refs--;
17857-
if (this.texture.refs) return;
17852+
if (this.texture._refs) {
17853+
this.texture._refs--;
17854+
if (this.texture._refs) return;
1785817855
}
1785917856
return this.context.deleteTexture(this.texture);
1786017857
}

dist/gpu-browser.min.js

Lines changed: 3 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "gpu.js",
3-
"version": "2.4.1",
3+
"version": "2.4.2",
44
"description": "GPU Accelerated JavaScript",
55
"engines": {
66
"node": ">=8.0.0"

src/backend/gl/kernel.js

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -963,7 +963,7 @@ class GLKernel extends Kernel {
963963
if (this.texture.texture === arg.texture) {
964964
const { prevArg } = kernelValue;
965965
if (prevArg) {
966-
if (prevArg.texture.refs === 1) {
966+
if (prevArg.texture._refs === 1) {
967967
this.texture.delete();
968968
this.texture = prevArg.clone();
969969
}
@@ -977,7 +977,7 @@ class GLKernel extends Kernel {
977977
if (mappedTexture.texture === arg.texture) {
978978
const { prevArg } = kernelValue;
979979
if (prevArg) {
980-
if (prevArg.texture.refs === 1) {
980+
if (prevArg.texture._refs === 1) {
981981
mappedTexture.delete();
982982
mappedTextures[i] = prevArg.clone();
983983
}
@@ -990,8 +990,7 @@ class GLKernel extends Kernel {
990990
}
991991
}
992992

993-
initCanvas() {
994-
}
993+
initCanvas() {}
995994
}
996995

997996
const typeMap = {

src/backend/gl/texture/index.js

Lines changed: 11 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -19,46 +19,39 @@ class GLTexture extends Texture {
1919
}
2020

2121
beforeMutate() {
22-
if (this.texture.refs > 1) {
22+
if (this.texture._refs > 1) {
2323
this.cloneTexture();
2424
}
2525
}
2626

2727
cloneTexture() {
28-
this.texture.refs--;
28+
this.texture._refs--;
2929
const { context: gl, size, texture } = this;
3030
const existingFramebuffer = gl.getParameter(gl.FRAMEBUFFER_BINDING);
31-
const existingActiveTexture = gl.getParameter(gl.ACTIVE_TEXTURE);
32-
const existingTexture2DBinding = gl.getParameter(gl.TEXTURE_BINDING_2D);
33-
if (!this.framebuffer) {
34-
this.framebuffer = gl.createFramebuffer();
31+
if (!texture._framebuffer) {
32+
texture._framebuffer = gl.createFramebuffer();
3533
}
36-
this.framebuffer.width = size[0];
37-
this.framebuffer.height = size[1];
38-
gl.bindFramebuffer(gl.FRAMEBUFFER, this.framebuffer);
34+
texture._framebuffer.width = size[0];
35+
texture._framebuffer.width = size[1];
36+
gl.bindFramebuffer(gl.FRAMEBUFFER, texture._framebuffer);
3937
selectTexture(gl, texture);
4038
gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, texture, 0);
4139
const target = gl.createTexture();
4240
selectTexture(gl, target);
4341
gl.texImage2D(gl.TEXTURE_2D, 0, this.internalFormat, size[0], size[1], 0, this.textureFormat, this.textureType, null);
4442
gl.copyTexSubImage2D(gl.TEXTURE_2D, 0, 0, 0, 0, 0, size[0], size[1]);
45-
target.refs = 1;
43+
target._refs = 1;
44+
target._framebuffer = texture._framebuffer;
4645
this.texture = target;
4746
if (existingFramebuffer) {
4847
gl.bindFramebuffer(gl.FRAMEBUFFER, existingFramebuffer);
4948
}
50-
if (existingActiveTexture) {
51-
gl.activeTexture(existingActiveTexture);
52-
}
53-
if (existingTexture2DBinding) {
54-
gl.bindTexture(gl.TEXTURE_2D, existingTexture2DBinding);
55-
}
5649
}
5750

5851
delete() {
5952
super.delete();
60-
if (this.framebuffer) {
61-
this.context.deleteFramebuffer(this.framebuffer);
53+
if (this.texture._refs === 0 && this.texture._framebuffer) {
54+
this.context.deleteFramebuffer(this.texture._framebuffer);
6255
}
6356
}
6457
}

0 commit comments

Comments
 (0)