On 10/11/2011 12:55 PM, Eric Anholt wrote:
On Mon, 10 Oct 2011 21:05:32 -0600, Brian Paul<brian.e.p...@gmail.com>  wrote:
From: Brian Paul<bri...@vmware.com>

---
  src/mesa/main/framebuffer.c |  117 +++++++++++-------------------------------
  1 files changed, 31 insertions(+), 86 deletions(-)

diff --git a/src/mesa/main/framebuffer.c b/src/mesa/main/framebuffer.c
index 8beda31..90ac2ef 100644
--- a/src/mesa/main/framebuffer.c
+++ b/src/mesa/main/framebuffer.c
@@ -839,23 +839,24 @@ _mesa_update_framebuffer(struct gl_context *ctx)


  /**
- * Check if the renderbuffer for a read operation (glReadPixels, glCopyPixels,
- * glCopyTex[Sub]Image, etc) exists.
+ * Check if the renderbuffer for a read/draw operation exists.
   * \param format  a basic image format such as GL_RGB, GL_RGBA, GL_ALPHA,
   *                GL_DEPTH_COMPONENT, etc. or GL_COLOR, GL_DEPTH, GL_STENCIL.
   * \return GL_TRUE if buffer exists, GL_FALSE otherwise
   */
-GLboolean
-_mesa_source_buffer_exists(struct gl_context *ctx, GLenum format)
+static GLboolean
+renderbuffer_exists(struct gl_context *ctx,
+                    struct gl_framebuffer *fb,
+                    GLenum format)
  {

@@ -884,14 +885,14 @@ _mesa_source_buffer_exists(struct gl_context *ctx, GLenum 
format)
     case GL_BGRA_INTEGER_EXT:
     case GL_LUMINANCE_INTEGER_EXT:
     case GL_LUMINANCE_ALPHA_INTEGER_EXT:
-      if (ctx->ReadBuffer->_ColorReadBuffer == NULL) {
+      if (fb->_ColorReadBuffer == NULL) {
           return GL_FALSE;
        }

So this renderbuffer_exists fails out if !_ColorReadBuffer

...

+/**
   * As above, but for drawing operations.
   * XXX could do some code merging w/ above function.
   */
  GLboolean
  _mesa_dest_buffer_exists(struct gl_context *ctx, GLenum format)
  {

...

-   switch (format) {
-   case GL_COLOR:
-   case GL_RED:
-   case GL_GREEN:
-   case GL_BLUE:
-   case GL_ALPHA:
-   case GL_LUMINANCE:
-   case GL_LUMINANCE_ALPHA:
-   case GL_INTENSITY:
-   case GL_RGB:
-   case GL_BGR:
-   case GL_RGBA:
-   case GL_BGRA:
-   case GL_ABGR_EXT:
-   case GL_RED_INTEGER_EXT:
-   case GL_GREEN_INTEGER_EXT:
-   case GL_BLUE_INTEGER_EXT:
-   case GL_ALPHA_INTEGER_EXT:
-   case GL_RGB_INTEGER_EXT:
-   case GL_RGBA_INTEGER_EXT:
-   case GL_BGR_INTEGER_EXT:
-   case GL_BGRA_INTEGER_EXT:
-   case GL_LUMINANCE_INTEGER_EXT:
-   case GL_LUMINANCE_ALPHA_INTEGER_EXT:
-      /* Nothing special since GL_DRAW_BUFFER could be GL_NONE. */
-      /* Could assert that colorbuffer has RedBits>  0 */
-      break;

...

+   return renderbuffer_exists(ctx, ctx->DrawBuffer, format);
  }

And now _mesa_dest_buffer_exists() will fail if !_ColorReadBuffer.  That
doesn't seem intentional.

Yeah, thanks for catching that.  I'll redo this one.

-Brian

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to