swrast: fix glDrawBuffer(GL_FRONT_AND_BACK)
authorBrian Paul <brianp@vmware.com>
Thu, 2 Apr 2009 00:44:15 +0000 (18:44 -0600)
committerBrian Paul <brianp@vmware.com>
Thu, 2 Apr 2009 00:44:15 +0000 (18:44 -0600)
We weren't putting the right colors into the back buffer in this mode.

src/mesa/swrast/s_span.c

index 15a783b236bbb6d1dde4b44dcc3be72c21211abb..08d725c5ebf900ae5ae75c015945f54dabcf9bbf 100644 (file)
@@ -1403,11 +1403,17 @@ _swrast_write_rgba_span( GLcontext *ctx, SWspan *span)
    }
 
    /*
-    * Write to renderbuffers
+    * Write to renderbuffers.
+    * Depending on glDrawBuffer() state and the which color outputs are
+    * written by the fragment shader, we may either replicate one color to
+    * all renderbuffers or write a different color to each renderbuffer.
+    * multiFragOutputs=TRUE for the later case.
     */
    {
       const GLuint numBuffers = fb->_NumColorDrawBuffers;
-      const GLboolean multiFragOutputs = numBuffers > 1;
+      const struct gl_fragment_program *fp = ctx->FragmentProgram._Current;
+      const GLboolean multiFragOutputs = 
+         (fp && fp->Base.OutputsWritten >= (1 << FRAG_RESULT_DATA0));
       GLuint buf;
 
       for (buf = 0; buf < numBuffers; buf++) {