mesa: Don't reuse DummyFramebuffer as the incomplete framebuffer
authorKristian Høgsberg <krh@bitplanet.net>
Thu, 9 Sep 2010 21:08:12 +0000 (17:08 -0400)
committerKristian Høgsberg <krh@bitplanet.net>
Thu, 9 Sep 2010 21:08:12 +0000 (17:08 -0400)
Binding framebuffer 0 on a context that doesn't have a winsys drawable
will try to bind the incomplete framebuffer.  That fails when that's
also the dummy framebuffer.

src/mesa/main/context.c
src/mesa/main/fbobject.c

index 73d96e8d2127b265c65e8d7bb1370af0e5950f0d..66e4183101cb1ebdfc596a8e2456dc953fdc178f 100644 (file)
@@ -1300,6 +1300,9 @@ check_compatible(const GLcontext *ctx, const GLframebuffer *buffer)
    if (ctxvis == bufvis)
       return GL_TRUE;
 
+   if (buffer == _mesa_get_incomplete_framebuffer())
+      return GL_TRUE;
+
 #if 0
    /* disabling this fixes the fgl_glxgears pbuffer demo */
    if (ctxvis->doubleBufferMode && !bufvis->doubleBufferMode)
index 72cbb09ab832a1275184b174fc3a022c32299b7d..5201f5025274133a84564dc5c73b87f1be67fa3a 100644 (file)
 static struct gl_framebuffer DummyFramebuffer;
 static struct gl_renderbuffer DummyRenderbuffer;
 
+/* We bind this framebuffer when applications pass a NULL
+ * drawable/surface in make current. */
+static struct gl_framebuffer IncompleteFramebuffer;
+
 
 #define IS_CUBE_FACE(TARGET) \
    ((TARGET) >= GL_TEXTURE_CUBE_MAP_POSITIVE_X && \
@@ -95,14 +99,16 @@ _mesa_init_fbobjects(GLcontext *ctx)
 {
    _glthread_INIT_MUTEX(DummyFramebuffer.Mutex);
    _glthread_INIT_MUTEX(DummyRenderbuffer.Mutex);
+   _glthread_INIT_MUTEX(IncompleteFramebuffer.Mutex);
    DummyFramebuffer.Delete = delete_dummy_framebuffer;
    DummyRenderbuffer.Delete = delete_dummy_renderbuffer;
+   IncompleteFramebuffer.Delete = delete_dummy_framebuffer;
 }
 
 struct gl_framebuffer *
 _mesa_get_incomplete_framebuffer(void)
 {
-   return &DummyFramebuffer;
+   return &IncompleteFramebuffer;
 }
 
 /**