diff --git a/source/lib/glext_funcs.h b/source/lib/glext_funcs.h index 82c01b21ac..6dff419260 100644 --- a/source/lib/glext_funcs.h +++ b/source/lib/glext_funcs.h @@ -63,10 +63,6 @@ actually supported). // GL_EXT_draw_range_elements / GL1.2: FUNC2(void, glDrawRangeElementsEXT, glDrawRangeElements, "1.2", (GLenum, GLuint, GLuint, GLsizei, GLenum, GLvoid*)) -// GL_EXT_multi_draw_arrays / GL1.4 -FUNC2(void, glMultiDrawArraysEXT, glMultiDrawArrays, "1.4", (GLenum, GLint*, GLsizei*, GLsizei)) -FUNC2(void, glMultiDrawElementsEXT, glMultiDrawElements, "1.4", (GLenum, GLsizei*, GLenum, GLvoid**, GLsizei)) - // GL_ARB_multitexture / GL1.3: FUNC2(void, glMultiTexCoord2fARB, glMultiTexCoord2f, "1.3", (int, float, float)) FUNC2(void, glMultiTexCoord3fARB, glMultiTexCoord3f, "1.3", (int, float, float, float)) diff --git a/source/lib/ogl.cpp b/source/lib/ogl.cpp index 3ef75658b9..4e16a94e7f 100644 --- a/source/lib/ogl.cpp +++ b/source/lib/ogl.cpp @@ -288,24 +288,6 @@ static void GL_CALL_CONV dummy_glDrawRangeElementsEXT(GLenum mode, GLuint, GLuin glDrawElements(mode, count, type, indices); } -static void GL_CALL_CONV dummy_glMultiDrawArraysEXT(GLenum mode, GLint* first, GLsizei* count, GLsizei primcount) -{ - for (GLsizei i = 0; i < primcount; ++i) - { - if (count[i] > 0) - glDrawArrays(mode, first[i], count[i]); - } -} - -static void GL_CALL_CONV dummy_glMultiDrawElementsEXT(GLenum mode, GLsizei* count, GLenum type, GLvoid** indices, GLsizei primcount) -{ - for (GLsizei i = 0; i < primcount; ++i) - { - if (count[i] > 0) - glDrawElements(mode, count[i], type, indices[i]); - } -} - static void GL_CALL_CONV dummy_glActiveTextureARB(int) { } @@ -353,12 +335,6 @@ static void importExtensionFunctions() pglDrawRangeElementsEXT = &dummy_glDrawRangeElementsEXT; } - if(!ogl_HaveExtension("GL_EXT_multi_draw_arrays")) - { - pglMultiDrawArraysEXT = &dummy_glMultiDrawArraysEXT; - pglMultiDrawElementsEXT = &dummy_glMultiDrawElementsEXT; - } - if(!ogl_HaveExtension("GL_ARB_multitexture")) { pglActiveTextureARB = &dummy_glActiveTextureARB; diff --git a/source/renderer/PatchRData.cpp b/source/renderer/PatchRData.cpp index 7cff11d120..fe65a8a712 100644 --- a/source/renderer/PatchRData.cpp +++ b/source/renderer/PatchRData.cpp @@ -711,8 +711,11 @@ void CPatchRData::RenderBases(const std::vector& patches) if (!g_Renderer.m_SkipSubmit) { - pglMultiDrawElementsEXT(GL_TRIANGLES, &batch.first[0], GL_UNSIGNED_SHORT, - (GLvoid**)&batch.second[0], batch.first.size()); + // Don't use glMultiDrawElements here since it doesn't have a significant + // performance impact and it suffers from various driver bugs (e.g. it breaks + // in Mesa 7.10 swrast with index VBOs) + for (size_t i = 0; i < batch.first.size(); ++i) + glDrawElements(GL_TRIANGLES, batch.first[i], GL_UNSIGNED_SHORT, batch.second[i]); } g_Renderer.m_Stats.m_DrawCalls++; @@ -848,8 +851,8 @@ void CPatchRData::RenderBlends(const std::vector& patches) if (!g_Renderer.m_SkipSubmit) { - pglMultiDrawElementsEXT(GL_TRIANGLES, &batch.first[0], GL_UNSIGNED_SHORT, - (GLvoid**)&batch.second[0], batch.first.size()); + for (size_t i = 0; i < batch.first.size(); ++i) + glDrawElements(GL_TRIANGLES, batch.first[i], GL_UNSIGNED_SHORT, batch.second[i]); } g_Renderer.m_Stats.m_DrawCalls++; @@ -938,8 +941,8 @@ void CPatchRData::RenderStreams(const std::vector& patches, int st if (!g_Renderer.m_SkipSubmit) { - pglMultiDrawElementsEXT(GL_TRIANGLES, &batch.first[0], GL_UNSIGNED_SHORT, - (GLvoid**)&batch.second[0], batch.first.size()); + for (size_t i = 0; i < batch.first.size(); ++i) + glDrawElements(GL_TRIANGLES, batch.first[i], GL_UNSIGNED_SHORT, batch.second[i]); } g_Renderer.m_Stats.m_DrawCalls++;