aboutsummaryrefslogtreecommitdiff
path: root/src/library_gl.js
diff options
context:
space:
mode:
authorAlon Zakai <alonzakai@gmail.com>2012-05-01 16:47:09 -0700
committerAlon Zakai <alonzakai@gmail.com>2012-05-01 16:47:09 -0700
commitf54612a210af5c85071d54d892d533656a940c7c (patch)
tree9cb2d5a18cc81d8cdc27ae448153d47b966a088e /src/library_gl.js
parent40b14c18fa3e2e52224fc0de567411d8ffe9f0b2 (diff)
reuse a buffer for immediate mode rendering
Diffstat (limited to 'src/library_gl.js')
-rw-r--r--src/library_gl.js13
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