diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/library_gl.js | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/src/library_gl.js b/src/library_gl.js index 7c80b420..91b6b1eb 100644 --- a/src/library_gl.js +++ b/src/library_gl.js @@ -1182,6 +1182,7 @@ var LibraryGL = { case 'glBindProgram': func = function(type, id) { assert(id == 0); }; break; + case 'glDrawRangeElements': func = _glDrawRangeElements; break; case 'glShaderSource': func = _glShaderSource; break; case 'glCompileShader': func = _glCompileShader; break; case 'glLinkProgram': func = _glLinkProgram; break; @@ -1590,7 +1591,7 @@ var LibraryGL = { GL.immediate.flush(null, first); }; - _glDrawElements = function(mode, count, type, indices) { + _glDrawElements = function(mode, count, type, indices, start, end) { // start, end are given if we come from glDrawRangeElements if (GL.immediate.totalEnabledClientAttributes == 0 && mode <= 6 && GL.currElementArrayBuffer) { Module.ctx.drawElements(mode, count, type, indices); return; @@ -1601,11 +1602,9 @@ var LibraryGL = { GL.immediate.prepareClientAttributes(count, false); GL.immediate.mode = mode; if (!GL.currArrayBuffer) { - // We don't yet know how much of this data is needed (it depends on the indices), so map everything to the end of memory - GL.immediate.vertexData = {{{ makeHEAPView('F32', 'GL.immediate.vertexPointer', 'TOTAL_MEMORY') }}}; // XXX assuming float - // Need to find this out later TODO: support glDrawRangeElements - GL.immediate.firstVertex = TOTAL_MEMORY; - GL.immediate.lastVertex = 0; + GL.immediate.firstVertex = end ? start : TOTAL_MEMORY; // if we don't know the start, set an invalid value and we will calculate it later from the indices + GL.immediate.lastVertex = end ? end+1 : 0; + GL.immediate.vertexData = {{{ makeHEAPView('F32', 'GL.immediate.vertexPointer', '(end ? GL.immediate.vertexPointer + (end+1)*GL.immediate.stride : TOTAL_MEMORY)') }}}; // XXX assuming float } GL.immediate.flush(count, 0, indices); }; @@ -1887,6 +1886,11 @@ var LibraryGL = { glNormal3f: function(){}, // TODO + // Additional non-GLES rendering calls + + glDrawRangeElements: function(mode, start, end, count, type, indices) { + _glDrawElements(mode, count, type, indices, start, end); + }, // ClientState/gl*Pointer |