From 917675217256480163d437015253d1d2b6cad55c Mon Sep 17 00:00:00 2001 From: Michel Dänzer Date: Sun, 8 Apr 2007 14:04:15 +0200 Subject: i915tex: Clean up resizing of renderbuffers. --- src/mesa/drivers/dri/i915tex/intel_context.c | 9 ++++--- src/mesa/drivers/dri/i915tex/intel_fbo.c | 39 ++++++++++++++++++---------- 2 files changed, 31 insertions(+), 17 deletions(-) (limited to 'src/mesa/drivers') diff --git a/src/mesa/drivers/dri/i915tex/intel_context.c b/src/mesa/drivers/dri/i915tex/intel_context.c index a2b0856fde1..6a3456e154b 100644 --- a/src/mesa/drivers/dri/i915tex/intel_context.c +++ b/src/mesa/drivers/dri/i915tex/intel_context.c @@ -587,10 +587,11 @@ intelMakeCurrent(__DRIcontextPrivate * driContextPriv, } /* set GLframebuffer size to match window, if needed */ - if (driReadPriv != driDrawPriv && readFb->Width != driReadPriv->w) { - _mesa_resize_framebuffer(&intel->ctx, readFb, - driReadPriv->w, driReadPriv->h); - } + driUpdateFramebufferSize(&intel->ctx, driDrawPriv); + + if (driReadPriv != driDrawPriv) { + driUpdateFramebufferSize(&intel->ctx, driReadPriv); + } _mesa_make_current(&intel->ctx, &intel_fb->Base, readFb); diff --git a/src/mesa/drivers/dri/i915tex/intel_fbo.c b/src/mesa/drivers/dri/i915tex/intel_fbo.c index 9b84faaeb7d..87ef22f52f4 100644 --- a/src/mesa/drivers/dri/i915tex/intel_fbo.c +++ b/src/mesa/drivers/dri/i915tex/intel_fbo.c @@ -309,27 +309,39 @@ static GLboolean intel_alloc_window_storage(GLcontext * ctx, struct gl_renderbuffer *rb, GLenum internalFormat, GLuint width, GLuint height) { - struct intel_context *intel = intel_context(ctx); - struct intel_framebuffer *intel_fb; - ASSERT(rb->Name == 0); rb->Width = width; rb->Height = height; rb->_ActualFormat = internalFormat; - if (intel && intel->driDrawable && - (intel_fb = intel->driDrawable->driverPrivate) && - intel_fb->pf_num_pages == 3 && - rb == &intel_fb->color_rb[intel_fb->pf_current_page]->Base && - (rb = &intel_fb->color_rb[(intel_fb->pf_current_page + 2) % 3]->Base)) { - rb->Width = width; - rb->Height = height; - rb->_ActualFormat = internalFormat; - } - return GL_TRUE; } +static void +intel_resize_buffers(GLcontext *ctx, struct gl_framebuffer *fb, + GLuint width, GLuint height) +{ + struct intel_framebuffer *intel_fb = (struct intel_framebuffer*)fb; + int i; + + _mesa_resize_framebuffer(ctx, fb, width, height); + + fb->Initialized = GL_TRUE; /* XXX remove someday */ + + if (fb->Name != 0) { + return; + } + + /* Make sure all window system renderbuffers are up to date */ + for (i = 0; i < 3; i++) { + struct gl_renderbuffer *rb = &intel_fb->color_rb[i]->Base; + + /* only resize if size is changing */ + if (rb && (rb->Width != width || rb->Height != height)) { + rb->AllocStorage(ctx, rb, rb->InternalFormat, width, height); + } + } +} static GLboolean intel_nop_alloc_storage(GLcontext * ctx, struct gl_renderbuffer *rb, @@ -671,4 +683,5 @@ intel_fbo_init(struct intel_context *intel) intel->ctx.Driver.FramebufferRenderbuffer = intel_framebuffer_renderbuffer; intel->ctx.Driver.RenderTexture = intel_render_texture; intel->ctx.Driver.FinishRenderTexture = intel_finish_render_texture; + intel->ctx.Driver.ResizeBuffers = intel_resize_buffers; } -- cgit v1.2.3