diff options
| author | Michel Dänzer <michel@tungstengraphics.com> | 2007-04-08 14:04:15 +0200 | 
|---|---|---|
| committer | Michel Dänzer <michel@tungstengraphics.com> | 2007-04-08 14:04:15 +0200 | 
| commit | 917675217256480163d437015253d1d2b6cad55c (patch) | |
| tree | 9c3c1edffb54642789bad267255964e4504c8c57 | |
| parent | 79bf6924208136247bca2d5f70547f2fe359ecdb (diff) | |
i915tex: Clean up resizing of renderbuffers.
| -rw-r--r-- | src/mesa/drivers/dri/i915tex/intel_context.c | 9 | ||||
| -rw-r--r-- | src/mesa/drivers/dri/i915tex/intel_fbo.c | 39 | 
2 files changed, 31 insertions, 17 deletions
| diff --git a/src/mesa/drivers/dri/i915tex/intel_context.c b/src/mesa/drivers/dri/i915tex/intel_context.c index a2b0856fde..6a3456e154 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 9b84faaeb7..87ef22f52f 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;  } | 
