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