aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlon Zakai <alonzakai@gmail.com>2012-06-02 11:28:57 -0700
committerAlon Zakai <alonzakai@gmail.com>2012-06-02 11:28:57 -0700
commit4bf395da2ea761de8897b591bfca67779e1e0053 (patch)
treefaeb47733fd54ab6bed9d105caec4abdaaa0d64c
parent148de83015c295d185408fa0d4dfe15d74d33e63 (diff)
make temp buffer size larger by default, and add assertions
-rw-r--r--src/library_gl.js17
1 files changed, 9 insertions, 8 deletions
diff --git a/src/library_gl.js b/src/library_gl.js
index 912ce240..6fcde8ad 100644
--- a/src/library_gl.js
+++ b/src/library_gl.js
@@ -1239,7 +1239,7 @@ var LibraryGL = {
$GLImmediate__deps: ['$Browser'],
$GLImmediate: {
// Vertex and index data
- maxElements: 10240,
+ TEMP_BUFFER_SIZE: 1024*1024,
MAX_TEXTURES: 7,
vertexData: null, // current vertex data. either tempData (glBegin etc.) or a view into the heap (gl*Pointer). Default view is F32
vertexDataU8: null, // U8 view
@@ -1547,19 +1547,19 @@ var LibraryGL = {
}
// Buffers for data
- this.tempData = new Float32Array(this.maxElements);
- this.indexData = new Uint16Array(this.maxElements);
+ this.tempData = new Float32Array(this.TEMP_BUFFER_SIZE >> 2);
+ this.indexData = new Uint16Array(this.TEMP_BUFFER_SIZE >> 1);
this.vertexDataU8 = new Uint8Array(this.tempData.buffer);
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.bufferData(Module.ctx.ARRAY_BUFFER, this.TEMP_BUFFER_SIZE, 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.bufferData(Module.ctx.ELEMENT_ARRAY_BUFFER, this.TEMP_BUFFER_SIZE, Module.ctx.DYNAMIC_DRAW);
Module.ctx.bindBuffer(Module.ctx.ELEMENT_ARRAY_BUFFER, null);
this.clientColor = new Float32Array([1, 1, 1, 1]);
@@ -1680,6 +1680,7 @@ var LibraryGL = {
}
if (!GL.currElementArrayBuffer) {
// If no element array buffer is bound, then indices is a literal pointer to clientside data
+ assert(numProvidedIndexes < GL.immediate.TEMP_BUFFER_SIZE >> 1, 'too many immediate mode indexes (a)');
Module.ctx.bindBuffer(Module.ctx.ELEMENT_ARRAY_BUFFER, this.indexObject);
Module.ctx.bufferSubData(Module.ctx.ELEMENT_ARRAY_BUFFER, 0, {{{ makeHEAPView('U16', 'ptr', 'ptr + numProvidedIndexes*2') }}});
ptr = 0;
@@ -1701,8 +1702,7 @@ var LibraryGL = {
} else {
throw 'unsupported immediate mode ' + GL.immediate.mode;
}
- assert(numIndexes < GL.immediate.maxElements, 'too many immediate mode indexes');
-
+ assert(numIndexes < GL.immediate.TEMP_BUFFER_SIZE >> 1, 'too many immediate mode indexes (b)');
Module.ctx.bindBuffer(Module.ctx.ELEMENT_ARRAY_BUFFER, this.indexObject);
Module.ctx.bufferSubData(Module.ctx.ELEMENT_ARRAY_BUFFER, 0, this.indexData.subarray(0, numIndexes));
emulatedElementArrayBuffer = true;
@@ -1712,6 +1712,7 @@ var LibraryGL = {
Module.ctx.bindBuffer(Module.ctx.ARRAY_BUFFER, this.vertexObject);
var start = GL.immediate.firstVertex*GL.immediate.stride;
var end = GL.immediate.lastVertex*GL.immediate.stride;
+ assert(end < GL.immediate.TEMP_BUFFER_SIZE, 'too much vertex data');
Module.ctx.bufferSubData(Module.ctx.ARRAY_BUFFER, start, this.vertexData.subarray(start >> 2, end >> 2));
}
@@ -1772,7 +1773,7 @@ var LibraryGL = {
GL.immediate.vertexData[GL.immediate.vertexCounter++] = y;
GL.immediate.vertexData[GL.immediate.vertexCounter++] = z || 0;
#if ASSERTIONS
- assert(GL.immediate.vertexCounter < GL.immediate.maxElements);
+ assert(GL.immediate.vertexCounter < GL.immediate.TEMP_BUFFER_SIZE >> 2);
#endif
GL.immediate.addRendererComponent('V', 3, Module.ctx.FLOAT);
},