summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKeith Whitwell <keith@tungstengraphics.com>2006-07-05 11:07:53 +0000
committerKeith Whitwell <keith@tungstengraphics.com>2006-07-05 11:07:53 +0000
commit0f2144cd0c4d27603afcdfe8d3b6a64f8c7f5637 (patch)
treef024651776bfa6594083b484a42e15853cbf985a
parentbcc480441060b067a5fc4d46f3339a7e778dd091 (diff)
downloadmesa-0f2144cd0c4d27603afcdfe8d3b6a64f8c7f5637.tar.gz
Import Brian's drawbuffers fix from trunk version 1.108 of this file.
-rw-r--r--src/mesa/main/attrib.c41
1 files changed, 29 insertions, 12 deletions
diff --git a/src/mesa/main/attrib.c b/src/mesa/main/attrib.c
index 4afd982314c..ef9b539ff31 100644
--- a/src/mesa/main/attrib.c
+++ b/src/mesa/main/attrib.c
@@ -848,18 +848,35 @@ _mesa_PopAttrib(void)
(GLboolean) (color->ColorMask[1] != 0),
(GLboolean) (color->ColorMask[2] != 0),
(GLboolean) (color->ColorMask[3] != 0));
- /* 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]);
+ {
+ /* Need to determine if more than one color output is
+ * specified. If so, call glDrawBuffersARB, else call
+ * glDrawBuffer(). This is a subtle, but essential point
+ * since GL_FRONT (for example) is illegal for the former
+ * function, but legal for the later.
+ */
+ GLboolean multipleBuffers = GL_FALSE;
+ if (ctx->Extensions.ARB_draw_buffers) {
+ GLuint i;
+ for (i = 1; i < ctx->Const.MaxDrawBuffers; i++) {
+ if (color->DrawBuffer[i] != GL_NONE) {
+ multipleBuffers = GL_TRUE;
+ break;
+ }
+ }
+ }
+ /* 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 (multipleBuffers)
+ _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);