fix up mesa's probably bogus framebuffer updates with different read/write fbs

Conflicts:

	src/mesa/main/framebuffer.c
This commit is contained in:
Roland Scheidegger 2007-07-19 17:58:21 +02:00
parent dbfb375805
commit f9ac01eac5

View file

@ -654,6 +654,27 @@ update_color_read_buffer(GLcontext *ctx, struct gl_framebuffer *fb)
}
static void
update_framebuffer(GLcontext *ctx, struct gl_framebuffer *fb)
{
/* Completeness only matters for user-created framebuffers */
if (fb->Name != 0) {
/* XXX: EXT_framebuffer_blit:
framebuffer must still be complete wrt read/draw? */
_mesa_test_framebuffer_completeness(ctx, fb);
_mesa_update_framebuffer_visual(fb);
}
/* update_color_draw/read_buffers not needed for
read/draw only fb, but shouldn't hurt ??? */
update_color_draw_buffers(ctx, fb);
update_color_read_buffer(ctx, fb);
_mesa_update_depth_buffer(ctx, fb, BUFFER_DEPTH);
_mesa_update_stencil_buffer(ctx, fb, BUFFER_STENCIL);
compute_depth_max(fb);
}
/**
* Update state related to the current draw/read framebuffers.
* Specifically, update these framebuffer fields:
@ -671,19 +692,12 @@ void
_mesa_update_framebuffer(GLcontext *ctx)
{
struct gl_framebuffer *fb = ctx->DrawBuffer;
struct gl_framebuffer *fbread = ctx->ReadBuffer;
/* Completeness only matters for user-created framebuffers */
if (fb->Name != 0) {
_mesa_test_framebuffer_completeness(ctx, fb);
_mesa_update_framebuffer_visual(fb);
}
update_color_draw_buffers(ctx, fb);
update_color_read_buffer(ctx, fb);
_mesa_update_depth_buffer(ctx, fb, BUFFER_DEPTH);
_mesa_update_stencil_buffer(ctx, fb, BUFFER_STENCIL);
compute_depth_max(fb);
update_framebuffer(ctx, fb);
if (fbread != fb && fbread != NULL /* can happen at make_current -
core/driver circular dependencies, should be fixed up */)
update_framebuffer(ctx, fbread);
}