diff options
author | Alon Zakai <alonzakai@gmail.com> | 2013-03-07 15:19:35 -0800 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2013-03-07 15:19:35 -0800 |
commit | 1951e2b8039e5744567059ce58050bf8201df2c2 (patch) | |
tree | 9d2545736271be0fd11391d5b49df31aab2e7c6b | |
parent | be863c59c1f682b35e181f46a80a7689ddd13f30 (diff) |
use temp buffers in FULL_ES2 array buffers
-rw-r--r-- | src/library_gl.js | 20 |
1 files changed, 18 insertions, 2 deletions
diff --git a/src/library_gl.js b/src/library_gl.js index 12ec0a12..84bb10d9 100644 --- a/src/library_gl.js +++ b/src/library_gl.js @@ -265,19 +265,33 @@ var LibraryGL = { return size * typeSize * count; }, + usedTempBuffers: [], + preDrawHandleClientVertexAttribBindings: function(count) { GL.resetBufferBinding = false; + var used = GL.usedTempBuffers; + used.length = 0; + for (var i = 0; i < GL.maxVertexAttribs; ++i) { var cb = GL.clientBuffers[i]; if (!cb.enabled) continue; GL.resetBufferBinding = true; - var buf = Module.ctx.createBuffer(); + var size = GL.calcBufLength(cb.size, cb.type, cb.stride, count); + var index = GL.tempBufferIndexLookup[size]; + var buf; + do { +#if ASSERTIONS + assert(index < GL.tempVertexBuffers.length); +#endif + buf = GL.tempVertexBuffers[index++]; + } while (used.indexOf(buf) >= 0); + used.push(buf); Module.ctx.bindBuffer(Module.ctx.ARRAY_BUFFER, buf); Module.ctx.bufferData(Module.ctx.ARRAY_BUFFER, - HEAPU8.subarray(cb.ptr, cb.ptr + GL.calcBufLength(cb.size, cb.type, cb.stride, count)), + HEAPU8.subarray(cb.ptr, cb.ptr + size), Module.ctx.DYNAMIC_DRAW); Module.ctx.vertexAttribPointer(i, cb.size, cb.type, cb.normalized, cb.stride, 0); } @@ -301,6 +315,8 @@ var LibraryGL = { for (var i = 0; i < GL.maxVertexAttribs; i++) { GL.clientBuffers[i] = { enabled: false, size: 0, type: 0, normalized: 0, stride: 0, ptr: 0 }; } + + GL.generateTempBuffers(); #endif GL.compressionExt = Module.ctx.getExtension('WEBGL_compressed_texture_s3tc') || |