diff options
Diffstat (limited to 'wrappers/gltrace_arrays.cpp')
-rw-r--r-- | wrappers/gltrace_arrays.cpp | 83 |
1 files changed, 49 insertions, 34 deletions
diff --git a/wrappers/gltrace_arrays.cpp b/wrappers/gltrace_arrays.cpp index b2b1eb38..8986131d 100644 --- a/wrappers/gltrace_arrays.cpp +++ b/wrappers/gltrace_arrays.cpp @@ -27,19 +27,35 @@ #include "gltrace_arrays.hpp" +/* FIXME take in consideration instancing */ + + GLuint -_glDrawArrays_count(GLint first, GLsizei count) +_glDraw_count(const DrawArraysParams ¶ms) { - if (!count) { + if (!params.count) { return 0; } - return first + count; + return params.first + params.count; } GLuint -_glDrawElementsBaseVertex_count(GLsizei count, GLenum type, const GLvoid *indices, GLint basevertex) +_glDraw_count(const DrawElementsParams ¶ms) { + if (params.end < params.start || + params.count <= 0) { + return 0; + } + + if (params.end != ~0U) { + return params.end + params.basevertex + 1; + } + + GLuint count = params.count; + GLenum type = params.type; + const void *indices = params.indices; + GLvoid *temp = 0; if (!count) { @@ -117,30 +133,27 @@ _glDrawElementsBaseVertex_count(GLsizei count, GLenum type, const GLvoid *indice free(temp); } - maxindex += basevertex; + maxindex += params.basevertex; return maxindex + 1; } GLuint -_glDrawRangeElementsBaseVertex_count(GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices, GLint basevertex) -{ - if (end < start || - count < 0) { - return 0; - } - - return end + basevertex + 1; -} - - -GLuint -_glMultiDrawArrays_count(const GLint *first, const GLsizei *count, GLsizei drawcount) +_glDraw_count(const MultiDrawArraysParams ¶ms) { GLuint _count = 0; - for (GLsizei draw = 0; draw < drawcount; ++draw) { - GLuint _count_draw = _glDrawArrays_count(first[draw], count[draw]); + for (GLsizei draw = 0; draw < params.drawcount; ++draw) { + DrawArraysParams params_draw; + if (params.first) { + params_draw.first = params.first[draw]; + } + if (params.count) { + params_draw.count = params.count[draw]; + } + params_draw.instancecount = params.instancecount; + params_draw.baseinstance = params.baseinstance; + GLuint _count_draw = _glDraw_count(params_draw); _count = std::max(_count, _count_draw); } return _count; @@ -148,24 +161,26 @@ _glMultiDrawArrays_count(const GLint *first, const GLsizei *count, GLsizei drawc GLuint -_glMultiDrawElements_count(const GLsizei *count, GLenum type, const GLvoid* const *indices, GLsizei drawcount) +_glDraw_count(const MultiDrawElementsParams ¶ms) { GLuint _count = 0; - for (GLsizei draw = 0; draw < drawcount; ++draw) { - GLuint _count_draw = _glDrawElements_count(count[draw], type, indices[draw]); + for (GLsizei draw = 0; draw < params.drawcount; ++draw) { + DrawElementsParams params_draw; + if (params.count) { + params_draw.count = params.count[draw]; + } + params_draw.type = params.type; + if (params.indices) { + params_draw.indices = params.indices[draw]; + } + if (params.basevertex) { + params_draw.basevertex = params.basevertex[draw]; + } + params_draw.instancecount = params.instancecount; + params_draw.baseinstance = params.baseinstance; + GLuint _count_draw = _glDraw_count(params_draw); _count = std::max(_count, _count_draw); } return _count; } - -GLuint -_glMultiDrawElementsBaseVertex_count(const GLsizei *count, GLenum type, const GLvoid* const *indices, GLsizei drawcount, const GLint * basevertex) -{ - GLuint _count = 0; - for (GLsizei draw = 0; draw < drawcount; ++draw) { - GLuint _count_draw = _glDrawElementsBaseVertex_count(count[draw], type, indices[draw], basevertex[draw]); - _count = std::max(_count, _count_draw); - } - return _count; -} |