diff --git a/source/src/rendercubes.cpp b/source/src/rendercubes.cpp index f0225f1b..332c75f7 100644 --- a/source/src/rendercubes.cpp +++ b/source/src/rendercubes.cpp @@ -34,10 +34,12 @@ stripbatch stripbatches[256]; uchar renderedtex[256]; int renderedtexs = 0; +extern int ati_mda_bug; + #define RENDERSTRIPS(strips, type) \ if(strips.first.length()) \ { \ - if(hasMDA) glMultiDrawArrays_(type, strips.first.getbuf(), strips.count.getbuf(), strips.first.length()); \ + if(hasMDA && !ati_mda_bug) glMultiDrawArrays_(type, strips.first.getbuf(), strips.count.getbuf(), strips.first.length()); \ else loopv(strips.first) glDrawArrays(type, strips.first[i], strips.count[i]); \ strips.first.setsizenodelete(0); \ strips.count.setsizenodelete(0); \ diff --git a/source/src/rendergl.cpp b/source/src/rendergl.cpp index e151469c..316f09b0 100644 --- a/source/src/rendergl.cpp +++ b/source/src/rendergl.cpp @@ -38,6 +38,8 @@ int glext(char *ext) } COMMAND(glext, ARG_1EST); +VAR(ati_mda_bug, 0, 0, 1); + void gl_checkextensions() { const char *vendor = (const char *)glGetString(GL_VENDOR); @@ -64,6 +66,8 @@ void gl_checkextensions() glMultiDrawArrays_ = (PFNGLMULTIDRAWARRAYSEXTPROC) getprocaddress("glMultiDrawArraysEXT"); glMultiDrawElements_ = (PFNGLMULTIDRAWELEMENTSEXTPROC)getprocaddress("glMultiDrawElementsEXT"); hasMDA = true; + + if(strstr(vendor, "ATI")) ati_mda_bug = 1; } #ifndef _DEBUG