aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlon Zakai <alonzakai@gmail.com>2012-07-24 15:40:50 -0700
committerAlon Zakai <alonzakai@gmail.com>2012-07-24 15:40:50 -0700
commit3a22d88914f435bb13398be85eccd1fe21e145bf (patch)
treea63691711eaea9b74030474a3bc5a75a3f2c3603
parentdf425dc2c23b5ec1ad0fa92e693f10673ddb0b2f (diff)
optimize generateTempBuffers by more than an order of magitude
-rw-r--r--src/library_gl.js23
1 files changed, 7 insertions, 16 deletions
diff --git a/src/library_gl.js b/src/library_gl.js
index db81e358..adf9d611 100644
--- a/src/library_gl.js
+++ b/src/library_gl.js
@@ -1439,26 +1439,17 @@ var LibraryGL = {
tempQuadIndexBuffer: null,
generateTempBuffers: function() {
- function ceilPower2(x) {
- return Math.pow(2, Math.ceil(Math.log(x || 1)/Math.log(2)));
- }
this.tempBufferIndexLookup = new Uint8Array(this.MAX_TEMP_BUFFER_SIZE+1);
- var last = -1, curr = -1;
- for (var i = 0; i <= this.MAX_TEMP_BUFFER_SIZE; i++) {
- var size = ceilPower2(i);
- if (size != last) {
- curr++;
- last = size;
- }
- this.tempBufferIndexLookup[i] = curr;
- }
this.tempVertexBuffers = [];
this.tempIndexBuffers = [];
- last = -1;
+ var last = -1, curr = -1;
+ var size = 1;
for (var i = 0; i <= this.MAX_TEMP_BUFFER_SIZE; i++) {
- var size = ceilPower2(i);
- curr = this.tempBufferIndexLookup[i];
+ if (i > size) {
+ size <<= 1;
+ }
if (size != last) {
+ curr++;
this.tempVertexBuffers[curr] = Module.ctx.createBuffer();
Module.ctx.bindBuffer(Module.ctx.ARRAY_BUFFER, this.tempVertexBuffers[curr]);
Module.ctx.bufferData(Module.ctx.ARRAY_BUFFER, size, Module.ctx.DYNAMIC_DRAW);
@@ -1469,8 +1460,8 @@ var LibraryGL = {
Module.ctx.bindBuffer(Module.ctx.ELEMENT_ARRAY_BUFFER, null);
last = size;
}
+ this.tempBufferIndexLookup[i] = curr;
}
-
// GL_QUAD indexes can be precalculated
this.tempQuadIndexBuffer = Module.ctx.createBuffer();
Module.ctx.bindBuffer(Module.ctx.ELEMENT_ARRAY_BUFFER, this.tempQuadIndexBuffer);