Stop using glMultiDrawElements since it's too buggy

This was SVN commit r9064.
This commit is contained in:
Ykkrosh 2011-03-14 21:57:09 +00:00
parent 099dbdb24a
commit e70fae8d80
3 changed files with 9 additions and 34 deletions

View File

@ -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))

View File

@ -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;

View File

@ -711,8 +711,11 @@ void CPatchRData::RenderBases(const std::vector<CPatchRData*>& 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<CPatchRData*>& 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<CPatchRData*>& 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++;