diff options
author | Alon Zakai <alonzakai@gmail.com> | 2012-07-24 15:40:50 -0700 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2012-07-24 15:40:50 -0700 |
commit | 3a22d88914f435bb13398be85eccd1fe21e145bf (patch) | |
tree | a63691711eaea9b74030474a3bc5a75a3f2c3603 | |
parent | df425dc2c23b5ec1ad0fa92e693f10673ddb0b2f (diff) |
optimize generateTempBuffers by more than an order of magitude
-rw-r--r-- | src/library_gl.js | 23 |
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); |