When popping GL_DRAW_BUFFER state, need to re-do error checking since

validity depends on whether a window-system FBO or user-created FBO is
currently bound.  glPopAttrib() may generate GL_INVALID_OPERATION because
of this.
This commit is contained in:
Brian Paul
2006-04-14 02:25:35 +00:00
parent 61608ecfa7
commit 730b26556b
+15 -4
View File
@@ -1,8 +1,8 @@
/*
* Mesa 3-D graphics library
* Version: 6.5
* Version: 6.5.1
*
* Copyright (C) 1999-2005 Brian Paul All Rights Reserved.
* Copyright (C) 1999-2006 Brian Paul All Rights Reserved.
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
@@ -848,8 +848,19 @@ _mesa_PopAttrib(void)
(GLboolean) (color->ColorMask[1] != 0),
(GLboolean) (color->ColorMask[2] != 0),
(GLboolean) (color->ColorMask[3] != 0));
_mesa_drawbuffers(ctx, ctx->Const.MaxDrawBuffers,
color->DrawBuffer, NULL);
/* Call the API_level functions, not _mesa_drawbuffers() since
* we need to do error checking on the pop'd GL_DRAW_BUFFER.
* Ex: if GL_FRONT were pushed, but we're popping with a user
* FBO bound, GL_FRONT will be illegal and we'll need to
* record that error. Per OpenGL ARB decision.
*/
if (ctx->Extensions.ARB_draw_buffers) {
_mesa_DrawBuffersARB(ctx->Const.MaxDrawBuffers,
color->DrawBuffer);
}
else {
_mesa_DrawBuffer(color->DrawBuffer[0]);
}
_mesa_set_enable(ctx, GL_ALPHA_TEST, color->AlphaEnabled);
_mesa_AlphaFunc(color->AlphaFunc, color->AlphaRef);
_mesa_set_enable(ctx, GL_BLEND, color->BlendEnabled);