summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorKristian Høgsberg <krh@bitplanet.net>2010-09-09 17:08:12 -0400
committerKristian Høgsberg <krh@bitplanet.net>2010-09-09 17:08:12 -0400
commit144356f9925fa9d892faa64fa7264ef9f1d7e2b4 (patch)
tree36a326580bc155dbd71856e88c4799ca828dc788 /src
parent7aae70406bb1c4c9d1e3d026847249684b5e5d0e (diff)
mesa: Don't reuse DummyFramebuffer as the incomplete framebuffer
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.
Diffstat (limited to 'src')
-rw-r--r--src/mesa/main/context.c3
-rw-r--r--src/mesa/main/fbobject.c8
2 files changed, 10 insertions, 1 deletions
diff --git a/src/mesa/main/context.c b/src/mesa/main/context.c
index 73d96e8d21..66e4183101 100644
--- a/src/mesa/main/context.c
+++ b/src/mesa/main/context.c
@@ -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)
diff --git a/src/mesa/main/fbobject.c b/src/mesa/main/fbobject.c
index 72cbb09ab8..5201f50252 100644
--- a/src/mesa/main/fbobject.c
+++ b/src/mesa/main/fbobject.c
@@ -71,6 +71,10 @@
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;
}
/**