diff options
author | Kristian Høgsberg <[email protected]> | 2010-09-09 17:08:12 -0400 |
---|---|---|
committer | Kristian Høgsberg <[email protected]> | 2010-09-09 17:08:12 -0400 |
commit | 144356f9925fa9d892faa64fa7264ef9f1d7e2b4 (patch) | |
tree | 36a326580bc155dbd71856e88c4799ca828dc788 | |
parent | 7aae70406bb1c4c9d1e3d026847249684b5e5d0e (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.
-rw-r--r-- | src/mesa/main/context.c | 3 | ||||
-rw-r--r-- | src/mesa/main/fbobject.c | 8 |
2 files changed, 10 insertions, 1 deletions
diff --git a/src/mesa/main/context.c b/src/mesa/main/context.c index 73d96e8d212..66e4183101c 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 72cbb09ab83..5201f502527 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; } /** |