diff options
author | Keith Whitwell <keith@tungstengraphics.com> | 2006-07-05 11:07:53 +0000 |
---|---|---|
committer | Keith Whitwell <keith@tungstengraphics.com> | 2006-07-05 11:07:53 +0000 |
commit | 0f2144cd0c4d27603afcdfe8d3b6a64f8c7f5637 (patch) | |
tree | f024651776bfa6594083b484a42e15853cbf985a | |
parent | bcc480441060b067a5fc4d46f3339a7e778dd091 (diff) |
Import Brian's drawbuffers fix from trunk version 1.108 of this file.
-rw-r--r-- | src/mesa/main/attrib.c | 41 |
1 files changed, 29 insertions, 12 deletions
diff --git a/src/mesa/main/attrib.c b/src/mesa/main/attrib.c index 4afd982314..ef9b539ff3 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); |