From 781fb93877ea3a6faeefcdb48d9b463da7d954a3 Mon Sep 17 00:00:00 2001 From: Brian Paul Date: Thu, 28 Aug 2003 03:04:41 +0000 Subject: [PATCH] Added OpenGL 1.4's per-texture LOD bias. --- src/mesa/main/extensions.c | 1 + src/mesa/main/get.c | 1 + src/mesa/main/mtypes.h | 1 + src/mesa/main/texobj.c | 2 ++ src/mesa/main/texstate.c | 20 ++++++++++++++++++++ src/mesa/swrast/s_texture.c | 4 ++-- 6 files changed, 27 insertions(+), 2 deletions(-) diff --git a/src/mesa/main/extensions.c b/src/mesa/main/extensions.c index 9122ff5..886311e 100644 --- a/src/mesa/main/extensions.c +++ b/src/mesa/main/extensions.c @@ -290,6 +290,7 @@ _mesa_enable_1_4_extensions(GLcontext *ctx) ctx->Extensions.EXT_point_parameters = GL_TRUE; ctx->Extensions.EXT_secondary_color = GL_TRUE; ctx->Extensions.EXT_stencil_wrap = GL_TRUE; + ctx->Extensions.EXT_texture_lod_bias = GL_TRUE; ctx->Extensions.SGIS_generate_mipmap = GL_TRUE; } diff --git a/src/mesa/main/get.c b/src/mesa/main/get.c index 92d6a1d..29cc146 100644 --- a/src/mesa/main/get.c +++ b/src/mesa/main/get.c @@ -6428,6 +6428,7 @@ _mesa_GetString( GLenum name ) ctx->Extensions.EXT_point_parameters && /*aka ARB*/ ctx->Extensions.EXT_secondary_color && ctx->Extensions.EXT_stencil_wrap && + ctx->Extensions.EXT_texture_lod_bias && ctx->Extensions.SGIS_generate_mipmap) { if (ctx->Extensions.ARB_occlusion_query && ctx->Extensions.ARB_point_sprite && diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h index 90fdd3b..5497aac 100644 --- a/src/mesa/main/mtypes.h +++ b/src/mesa/main/mtypes.h @@ -1073,6 +1073,7 @@ struct gl_texture_object { GLenum MagFilter; /**< magnification filter */ GLfloat MinLod; /**< min lambda, OpenGL 1.2 */ GLfloat MaxLod; /**< max lambda, OpenGL 1.2 */ + GLfloat LodBias; /**< OpenGL 1.4 */ GLint BaseLevel; /**< min mipmap level, OpenGL 1.2 */ GLint MaxLevel; /**< max mipmap level, OpenGL 1.2 */ GLfloat MaxAnisotropy; /**< GL_EXT_texture_filter_anisotropic */ diff --git a/src/mesa/main/texobj.c b/src/mesa/main/texobj.c index ff0a053..6edb7e6 100644 --- a/src/mesa/main/texobj.c +++ b/src/mesa/main/texobj.c @@ -114,6 +114,7 @@ _mesa_initialize_texture_object( struct gl_texture_object *obj, obj->MagFilter = GL_LINEAR; obj->MinLod = -1000.0; obj->MaxLod = 1000.0; + obj->LodBias = 0.0; obj->BaseLevel = 0; obj->MaxLevel = 1000; obj->MaxAnisotropy = 1.0; @@ -242,6 +243,7 @@ _mesa_copy_texture_object( struct gl_texture_object *dest, dest->MagFilter = src->MagFilter; dest->MinLod = src->MinLod; dest->MaxLod = src->MaxLod; + dest->LodBias = src->LodBias; dest->BaseLevel = src->BaseLevel; dest->MaxLevel = src->MaxLevel; dest->MaxAnisotropy = src->MaxAnisotropy; diff --git a/src/mesa/main/texstate.c b/src/mesa/main/texstate.c index 8110772..2c1d155 100644 --- a/src/mesa/main/texstate.c +++ b/src/mesa/main/texstate.c @@ -1399,6 +1399,14 @@ _mesa_TexParameterfv( GLenum target, GLenum pname, const GLfloat *params ) return; } break; + case GL_TEXTURE_LOD_BIAS: + /* NOTE: this is really part of OpenGL 1.4, not EXT_texture_lod_bias*/ + if (ctx->Extensions.EXT_texture_lod_bias) { + texObj->LodBias = CLAMP(params[0], + -ctx->Const.MaxTextureLodBias, + ctx->Const.MaxTextureLodBias); + } + break; default: _mesa_error(ctx, GL_INVALID_ENUM, @@ -1775,6 +1783,12 @@ _mesa_GetTexParameterfv( GLenum target, GLenum pname, GLfloat *params ) return; } break; + case GL_TEXTURE_LOD_BIAS: + if (ctx->Extensions.EXT_texture_lod_bias) { + *params = obj->LodBias; + break; + } + break; default: ; /* silence warnings */ } @@ -1801,6 +1815,12 @@ _mesa_GetTexParameteriv( GLenum target, GLenum pname, GLint *params ) switch (pname) { case GL_TEXTURE_MAG_FILTER: *params = (GLint) obj->MagFilter; + case GL_TEXTURE_LOD_BIAS: + if (ctx->Extensions.EXT_texture_lod_bias) { + *params = (GLint) obj->LodBias; + break; + } + break; return; case GL_TEXTURE_MIN_FILTER: *params = (GLint) obj->MinFilter; diff --git a/src/mesa/swrast/s_texture.c b/src/mesa/swrast/s_texture.c index 172401f..b9e0814 100644 --- a/src/mesa/swrast/s_texture.c +++ b/src/mesa/swrast/s_texture.c @@ -4198,11 +4198,11 @@ _swrast_texture_span( GLcontext *ctx, struct sw_span *span ) /* adjust texture lod (lambda) */ if (span->arrayMask & SPAN_LAMBDA) { - if (texUnit->LodBias != 0.0F) { + if (texUnit->LodBias + curObj->LodBias != 0.0F) { /* apply LOD bias, but don't clamp yet */ GLuint i; for (i = 0; i < span->end; i++) { - lambda[i] += texUnit->LodBias; + lambda[i] += (texUnit->LodBias + curObj->LodBias); } } -- 2.7.4