[Libufo-commits] ufo-0.5/src/gl ugl_graphics.cpp,1.20,1.21
Status: Beta
Brought to you by:
schmidtjf
|
From: Johannes S. <sch...@us...> - 2006-09-17 14:25:21
|
Update of /cvsroot/libufo/ufo-0.5/src/gl In directory sc8-pr-cvs6.sourceforge.net:/tmp/cvs-serv21924/src/gl Modified Files: ugl_graphics.cpp Log Message: Added workaround for a MESA (6.4.*) bug in glPopClientAttrib. Index: ugl_graphics.cpp =================================================================== RCS file: /cvsroot/libufo/ufo-0.5/src/gl/ugl_graphics.cpp,v retrieving revision 1.20 retrieving revision 1.21 diff -C2 -d -r1.20 -r1.21 *** ugl_graphics.cpp 11 Apr 2006 12:34:36 -0000 1.20 --- ugl_graphics.cpp 17 Sep 2006 14:25:17 -0000 1.21 *************** *** 488,502 **** break; } if (buffer->getType() == UVertexArray::V3F) { ugl_driver->glInterleavedArrays(GL_V3F, 0, buffer->getArray()); ugl_driver->glDrawArrays(glType, 0, buffer->getCount()); } else if (buffer->getType() == UVertexArray::C3F_V3F) { // we use color arrays ... ! ugl_driver->glPushClientAttrib(GL_CLIENT_VERTEX_ARRAY_BIT); ugl_driver->glShadeModel(GL_SMOOTH); ugl_driver->glInterleavedArrays(GL_C3F_V3F, 0, buffer->getArray()); ugl_driver->glDrawArrays(glType, 0, buffer->getCount()); ugl_driver->glShadeModel(GL_FLAT); ! ugl_driver->glPopClientAttrib(); } ugl_driver->glTranslatef(-ufo_line_add, -ufo_line_add, 0); --- 488,519 ---- break; } + // workaround for buggy glPopClientAttrib in MESA 6.4.* + GLboolean vertexArrayWasEnabled = false; + GLboolean colorArrayWasEnabled = false; + ugl_driver->glGetBooleanv(GL_VERTEX_ARRAY, &vertexArrayWasEnabled); + ugl_driver->glGetBooleanv(GL_COLOR_ARRAY, &colorArrayWasEnabled); if (buffer->getType() == UVertexArray::V3F) { + ugl_driver->glEnableClientState(GL_VERTEX_ARRAY); ugl_driver->glInterleavedArrays(GL_V3F, 0, buffer->getArray()); ugl_driver->glDrawArrays(glType, 0, buffer->getCount()); + if (!vertexArrayWasEnabled) { + ugl_driver->glDisableClientState(GL_VERTEX_ARRAY); + } } else if (buffer->getType() == UVertexArray::C3F_V3F) { // we use color arrays ... ! //ugl_driver->glPushClientAttrib(GL_CLIENT_VERTEX_ARRAY_BIT); ! ugl_driver->glEnableClientState(GL_VERTEX_ARRAY); ! ugl_driver->glEnableClientState(GL_COLOR_ARRAY); ugl_driver->glShadeModel(GL_SMOOTH); ugl_driver->glInterleavedArrays(GL_C3F_V3F, 0, buffer->getArray()); ugl_driver->glDrawArrays(glType, 0, buffer->getCount()); ugl_driver->glShadeModel(GL_FLAT); ! //ugl_driver->glPopClientAttrib(); ! if (!vertexArrayWasEnabled) { ! ugl_driver->glDisableClientState(GL_VERTEX_ARRAY); ! } ! if (!colorArrayWasEnabled) { ! ugl_driver->glDisableClientState(GL_COLOR_ARRAY); ! } } ugl_driver->glTranslatef(-ufo_line_add, -ufo_line_add, 0); |