diff options
author | Jukka Jylänki <jujjyl@gmail.com> | 2014-01-02 19:46:41 +0200 |
---|---|---|
committer | Jukka Jylänki <jujjyl@gmail.com> | 2014-01-09 20:05:29 +0200 |
commit | e158bd1e5d861f82efa84ce427034fb0098b6e2f (patch) | |
tree | aa29e7af545d42629747fa02960926c861a24340 | |
parent | d302f6121076f6a7c1191d4e5a27e35d3dd149b2 (diff) |
Make caching of last bound GL_ARRAY_BUFFER in FFP emulation mode safe and always enable that optimization.
-rw-r--r-- | src/library_gl.js | 13 |
1 files changed, 5 insertions, 8 deletions
diff --git a/src/library_gl.js b/src/library_gl.js index 70ba105e..1c57dd9e 100644 --- a/src/library_gl.js +++ b/src/library_gl.js @@ -1348,7 +1348,7 @@ var LibraryGL = { #endif #if LEGACY_GL_EMULATION if (target == Module.ctx.ARRAY_BUFFER) { - GL.currArrayBuffer = buffer; + GL.immediate.lastArrayBuffer = GL.currArrayBuffer = buffer; } else if (target == Module.ctx.ELEMENT_ARRAY_BUFFER) { GL.currElementArrayBuffer = buffer; } @@ -3739,20 +3739,17 @@ var LibraryGL = { #endif if (!GL.currArrayBuffer) { // Bind the array buffer and upload data after cleaning up the previous renderer -#if GL_UNSAFE_OPTS - // Potentially unsafe, since lastArrayBuffer might not reflect the true array buffer in code that mixes immediate/non-immediate + if (arrayBuffer != GL.immediate.lastArrayBuffer) { -#endif Module.ctx.bindBuffer(Module.ctx.ARRAY_BUFFER, arrayBuffer); -#if GL_UNSAFE_OPTS + GL.immediate.lastArrayBuffer = arrayBuffer; } -#endif + Module.ctx.bufferSubData(Module.ctx.ARRAY_BUFFER, start, GL.immediate.vertexData.subarray(start >> 2, end >> 2)); } #if GL_UNSAFE_OPTS if (canSkip) return; GL.immediate.lastRenderer = this; - GL.immediate.lastArrayBuffer = arrayBuffer; GL.immediate.lastProgram = GL.currProgram || this.program; GL.immediate.lastStride == GL.immediate.stride; GL.immediate.matricesModified = false; @@ -3894,11 +3891,11 @@ var LibraryGL = { } if (!GL.currArrayBuffer) { Module.ctx.bindBuffer(Module.ctx.ARRAY_BUFFER, null); + GL.immediate.lastArrayBuffer = null; } #if GL_UNSAFE_OPTS GL.immediate.lastRenderer = null; - GL.immediate.lastArrayBuffer = null; GL.immediate.lastProgram = null; #endif GL.immediate.matricesModified = true; |