From 06970b2ccb6add0696710f01a07ebf9ec3922c80 Mon Sep 17 00:00:00 2001 From: Brian Paul Date: Wed, 6 Jan 2010 18:12:42 -0700 Subject: meta: set viewport and projection matrix in _mesa_meta_GenerateMipmap This fixes mipmap levels being clipped to the last viewport. Based on a patch submitted by Pierre Willenbrock --- src/mesa/drivers/common/meta.c | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'src/mesa/drivers/common/meta.c') diff --git a/src/mesa/drivers/common/meta.c b/src/mesa/drivers/common/meta.c index cd9075b393..adc986402c 100644 --- a/src/mesa/drivers/common/meta.c +++ b/src/mesa/drivers/common/meta.c @@ -2408,6 +2408,15 @@ _mesa_meta_GenerateMipmap(GLcontext *ctx, GLenum target, break; } + assert(dstWidth == ctx->DrawBuffer->Width); + assert(dstHeight == ctx->DrawBuffer->Height); + + /* setup viewport and matching projection matrix */ + _mesa_set_viewport(ctx, 0, 0, dstWidth, dstHeight); + _mesa_MatrixMode(GL_PROJECTION); + _mesa_LoadIdentity(); + _mesa_Ortho(0.0F, dstWidth, 0.0F, dstHeight, -1.0F, 1.0F); + _mesa_DrawArrays(GL_TRIANGLE_FAN, 0, 4); } -- cgit v1.2.3 From cb3cb96fbd3279bf3dd50439444c4c064ed6f748 Mon Sep 17 00:00:00 2001 From: Brian Paul Date: Wed, 6 Jan 2010 18:18:04 -0700 Subject: meta: move destination vertex/projection setup out of _mesa_meta_GenerateMipmap Based on a patch submitted by Pierre Willenbrock --- src/mesa/drivers/common/meta.c | 40 +++++++++++++++++++++------------------- 1 file changed, 21 insertions(+), 19 deletions(-) (limited to 'src/mesa/drivers/common/meta.c') diff --git a/src/mesa/drivers/common/meta.c b/src/mesa/drivers/common/meta.c index adc986402c..181fc03556 100644 --- a/src/mesa/drivers/common/meta.c +++ b/src/mesa/drivers/common/meta.c @@ -2289,6 +2289,26 @@ _mesa_meta_GenerateMipmap(GLcontext *ctx, GLenum target, _mesa_set_enable(ctx, target, GL_TRUE); + /* setup vertex positions */ + { + verts[0].x = 0.0F; + verts[0].y = 0.0F; + verts[1].x = 1.0F; + verts[1].y = 0.0F; + verts[2].x = 1.0F; + verts[2].y = 1.0F; + verts[3].x = 0.0F; + verts[3].y = 1.0F; + + /* upload new vertex data */ + _mesa_BufferSubDataARB(GL_ARRAY_BUFFER_ARB, 0, sizeof(verts), verts); + } + + /* setup projection matrix */ + _mesa_MatrixMode(GL_PROJECTION); + _mesa_LoadIdentity(); + _mesa_Ortho(0.0, 1.0, 0.0, 1.0, -1.0, 1.0); + /* texture is already locked, unlock now */ _mesa_unlock_texture(ctx, texObj); @@ -2355,21 +2375,6 @@ _mesa_meta_GenerateMipmap(GLcontext *ctx, GLenum target, } } - /* setup vertex positions */ - { - verts[0].x = 0.0F; - verts[0].y = 0.0F; - verts[1].x = (GLfloat) dstWidth; - verts[1].y = 0.0F; - verts[2].x = (GLfloat) dstWidth; - verts[2].y = (GLfloat) dstHeight; - verts[3].x = 0.0F; - verts[3].y = (GLfloat) dstHeight; - - /* upload new vertex data */ - _mesa_BufferSubDataARB(GL_ARRAY_BUFFER_ARB, 0, sizeof(verts), verts); - } - /* limit sampling to src level */ _mesa_TexParameteri(target, GL_TEXTURE_BASE_LEVEL, srcLevel); _mesa_TexParameteri(target, GL_TEXTURE_MAX_LEVEL, srcLevel); @@ -2411,11 +2416,8 @@ _mesa_meta_GenerateMipmap(GLcontext *ctx, GLenum target, assert(dstWidth == ctx->DrawBuffer->Width); assert(dstHeight == ctx->DrawBuffer->Height); - /* setup viewport and matching projection matrix */ + /* setup viewport */ _mesa_set_viewport(ctx, 0, 0, dstWidth, dstHeight); - _mesa_MatrixMode(GL_PROJECTION); - _mesa_LoadIdentity(); - _mesa_Ortho(0.0F, dstWidth, 0.0F, dstHeight, -1.0F, 1.0F); _mesa_DrawArrays(GL_TRIANGLE_FAN, 0, 4); } -- cgit v1.2.3 From ef7eb62423077becf2f896f771d6d76e9671f114 Mon Sep 17 00:00:00 2001 From: Brian Paul Date: Wed, 6 Jan 2010 18:22:05 -0700 Subject: meta: remove F suffix from _mesa_Ortho() params _mesa_Ortho() takes GLdoubles. --- src/mesa/drivers/common/meta.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'src/mesa/drivers/common/meta.c') diff --git a/src/mesa/drivers/common/meta.c b/src/mesa/drivers/common/meta.c index 181fc03556..28abcc4673 100644 --- a/src/mesa/drivers/common/meta.c +++ b/src/mesa/drivers/common/meta.c @@ -500,9 +500,9 @@ _mesa_meta_begin(GLcontext *ctx, GLbitfield state) _mesa_LoadIdentity(); _mesa_MatrixMode(GL_PROJECTION); _mesa_LoadIdentity(); - _mesa_Ortho(0.0F, ctx->DrawBuffer->Width, - 0.0F, ctx->DrawBuffer->Height, - -1.0F, 1.0F); + _mesa_Ortho(0.0, ctx->DrawBuffer->Width, + 0.0, ctx->DrawBuffer->Height, + -1.0, 1.0); save->ClipPlanesEnabled = ctx->Transform.ClipPlanesEnabled; if (ctx->Transform.ClipPlanesEnabled) { GLuint i; -- cgit v1.2.3