mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-02-14 00:20:34 +01:00
fix up mesa's probably bogus framebuffer updates with different read/write fbs
Conflicts: src/mesa/main/framebuffer.c
This commit is contained in:
parent
dbfb375805
commit
f9ac01eac5
1 changed files with 26 additions and 12 deletions
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue