summaryrefslogtreecommitdiff
path: root/src/mesa/drivers/dri/i915tex
diff options
context:
space:
mode:
authorMichel Dänzer <michel@tungstengraphics.com>2007-04-08 14:04:15 +0200
committerMichel Dänzer <michel@tungstengraphics.com>2007-04-08 14:04:15 +0200
commit917675217256480163d437015253d1d2b6cad55c (patch)
tree9c3c1edffb54642789bad267255964e4504c8c57 /src/mesa/drivers/dri/i915tex
parent79bf6924208136247bca2d5f70547f2fe359ecdb (diff)
i915tex: Clean up resizing of renderbuffers.
Diffstat (limited to 'src/mesa/drivers/dri/i915tex')
-rw-r--r--src/mesa/drivers/dri/i915tex/intel_context.c9
-rw-r--r--src/mesa/drivers/dri/i915tex/intel_fbo.c39
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;
}