diff options
-rw-r--r-- | src/library_gl.js | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/src/library_gl.js b/src/library_gl.js index de5cf6e8..74715785 100644 --- a/src/library_gl.js +++ b/src/library_gl.js @@ -1311,7 +1311,6 @@ var LibraryGL = { } assert(positionSize > 0); // TODO: verify vertexSize is equal to the stride in enabled client arrays - // XXX TODO: use bufferSubData to prevent reallocation of new buffers? Or all on GPU and doesn't matter? Anyhow, use DYNAMIC as hint var useCurrProgram = !!GL.currProgram; var ret = { vertexSize: vertexSize, @@ -1408,7 +1407,14 @@ var LibraryGL = { this.indexData = new Uint16Array(this.maxElements); this.vertexObject = Module.ctx.createBuffer(); + Module.ctx.bindBuffer(Module.ctx.ARRAY_BUFFER, this.vertexObject); + Module.ctx.bufferData(Module.ctx.ARRAY_BUFFER, this.maxElements*4, Module.ctx.DYNAMIC_DRAW); + Module.ctx.bindBuffer(Module.ctx.ARRAY_BUFFER, null); + this.indexObject = Module.ctx.createBuffer(); + Module.ctx.bindBuffer(Module.ctx.ELEMENT_ARRAY_BUFFER, this.indexObject); + Module.ctx.bufferData(Module.ctx.ELEMENT_ARRAY_BUFFER, this.maxElements*2, Module.ctx.DYNAMIC_DRAW); + Module.ctx.bindBuffer(Module.ctx.ELEMENT_ARRAY_BUFFER, null); // Replace some functions with immediate-mode aware versions _glDrawArrays = function(mode, first, count) { @@ -1497,7 +1503,6 @@ var LibraryGL = { var renderer = this.setRenderer(this.renderer); // Generate index data in a format suitable for GLES 2.0/WebGL - // TODO: if the mode is one that works in GLES 2.0/WebGL (not GL_QUADS), do not generate indexes at all var numVertexes = 4 * this.vertexCounter / renderer.vertexSize; // XXX assuming float assert(numVertexes % 1 == 0); @@ -1523,12 +1528,12 @@ var LibraryGL = { assert(numIndexes < GL.immediate.maxElements, 'too many immediate mode indexes'); Module.ctx.bindBuffer(Module.ctx.ELEMENT_ARRAY_BUFFER, this.indexObject); - Module.ctx.bufferData(Module.ctx.ELEMENT_ARRAY_BUFFER, this.indexData.subarray(0, numIndexes), Module.ctx.STATIC_DRAW); + Module.ctx.bufferSubData(Module.ctx.ELEMENT_ARRAY_BUFFER, 0, this.indexData.subarray(0, numIndexes)); } if (!GL.currArrayBuffer) { Module.ctx.bindBuffer(Module.ctx.ARRAY_BUFFER, this.vertexObject); - Module.ctx.bufferData(Module.ctx.ARRAY_BUFFER, this.vertexData.subarray(0, this.vertexCounter), Module.ctx.STATIC_DRAW); + Module.ctx.bufferSubData(Module.ctx.ARRAY_BUFFER, 0, this.vertexData.subarray(0, this.vertexCounter)); } // Render |