added GL_EXT_texture_lod_bias extension (Michael Vance)

This commit is contained in:
Brian Paul
2000-03-07 17:54:58 +00:00
parent 4f92969899
commit aabf086a03
4 changed files with 92 additions and 40 deletions

View File

@@ -172,6 +172,16 @@ void fxDDTexEnv(GLcontext *ctx, GLenum target, GLenum pname, const GLfloat *para
fprintf(stderr,"fxmesa: texenv(%x)\n",pname); fprintf(stderr,"fxmesa: texenv(%x)\n",pname);
} }
/* apply any lod biasing right now */
if (pname==GL_TEXTURE_LOD_BIAS_EXT) {
grTexLodBiasValue(GR_TMU0,*param);
if(fxMesa->haveTwoTMUs) {
grTexLodBiasValue(GR_TMU1,*param);
}
}
fxMesa->new_state|=FX_NEW_TEXTURING; fxMesa->new_state|=FX_NEW_TEXTURING;
ctx->Driver.RenderStart = fxSetupFXUnits; ctx->Driver.RenderStart = fxSetupFXUnits;
} }

View File

@@ -1,4 +1,4 @@
/* $Id: enums.c,v 1.6 2000/02/05 01:52:05 brianp Exp $ */ /* $Id: enums.c,v 1.7 2000/03/07 17:54:58 brianp Exp $ */
/* /*
* Mesa 3-D graphics library * Mesa 3-D graphics library
@@ -769,6 +769,9 @@ enum_elt all_enums[] =
{ "GL_CLIENT_ACTIVE_TEXTURE_ARB", 0x84E1 }, { "GL_CLIENT_ACTIVE_TEXTURE_ARB", 0x84E1 },
{ "GL_MAX_TEXTURE_UNITS_ARB", 0x84E2 }, { "GL_MAX_TEXTURE_UNITS_ARB", 0x84E2 },
{ "GL_TEXTURE_FILTER_CONTROL_EXT", 0x8500 },
{ "GL_TEXTUER_LOD_BIAS_EXT", 0x8501 },
{ "GL_NORMAL_MAP_NV", 0x8511 }, { "GL_NORMAL_MAP_NV", 0x8511 },
{ "GL_REFLECTION_MAP_NV", 0x8512 }, { "GL_REFLECTION_MAP_NV", 0x8512 },

View File

@@ -1,4 +1,4 @@
/* $Id: extensions.c,v 1.18 2000/02/25 03:55:40 keithw Exp $ */ /* $Id: extensions.c,v 1.19 2000/03/07 17:54:58 brianp Exp $ */
/* /*
* Mesa 3-D graphics library * Mesa 3-D graphics library
@@ -41,7 +41,7 @@
struct extension { struct extension {
struct extension *next, *prev; struct extension *next, *prev;
int enabled; GLint enabled;
char name[MAX_EXT_NAMELEN+1]; char name[MAX_EXT_NAMELEN+1];
void (*notify)( GLcontext *, GLboolean ); void (*notify)( GLcontext *, GLboolean );
}; };
@@ -77,9 +77,23 @@ static struct { int enabled; const char *name; } default_extensions[] = {
{ ALWAYS_ENABLED, "GL_ARB_tranpose_matrix" }, { ALWAYS_ENABLED, "GL_ARB_tranpose_matrix" },
{ DEFAULT_OFF, "GL_EXT_vertex_array_set" }, { DEFAULT_OFF, "GL_EXT_vertex_array_set" },
{ DEFAULT_OFF, "GL_EXT_texture_env" }, { DEFAULT_OFF, "GL_EXT_texture_env" },
{ DEFAULT_ON, "GL_EXT_texture_lod_bias" }
}; };
/*
* Update the boolean convenience flags in the Extensions struct.
*/
static void
update_extension_flags( GLcontext *ctx )
{
/* Update flags */
ctx->Extensions.HaveTextureEnvAdd = gl_extension_is_enabled(ctx, "GL_EXT_texture_env_add");
ctx->Extensions.HaveTextureLodBias = gl_extension_is_enabled(ctx, "GL_EXT_texture_lod_bias");
}
int gl_extensions_add( GLcontext *ctx, int gl_extensions_add( GLcontext *ctx,
int state, int state,
const char *name, const char *name,
@@ -101,21 +115,26 @@ int gl_extensions_add( GLcontext *ctx,
} }
static int set_extension( GLcontext *ctx, const char *name, GLuint state ) /*
* Either enable or disable the named extension.
*/
static int set_extension( GLcontext *ctx, const char *name, GLint state )
{ {
struct extension *i; struct extension *i;
foreach( i, ctx->Extensions.ext_list ) foreach( i, ctx->Extensions.ext_list )
if (strncmp(i->name, name, MAX_EXT_NAMELEN) == 0) if (strncmp(i->name, name, MAX_EXT_NAMELEN) == 0)
break; break;
if (i == ctx->Extensions.ext_list) return 1; if (i == ctx->Extensions.ext_list)
return 1;
if (i->enabled && !(i->enabled & ALWAYS_ENABLED)) if (i->enabled && !(i->enabled & ALWAYS_ENABLED)) {
{
if (i->notify) i->notify( ctx, state ); if (i->notify) i->notify( ctx, state );
i->enabled = state; i->enabled = state;
} }
update_extension_flags(ctx);
return 0; return 0;
} }
@@ -189,6 +208,7 @@ void gl_extensions_ctr( GLcontext *ctx )
default_extensions[i].name, default_extensions[i].name,
0 ); 0 );
} }
update_extension_flags(ctx);
} }

View File

@@ -1,4 +1,4 @@
/* $Id: texstate.c,v 1.8 2000/03/07 17:11:29 brianp Exp $ */ /* $Id: texstate.c,v 1.9 2000/03/07 17:54:58 brianp Exp $ */
/* /*
* Mesa 3-D graphics library * Mesa 3-D graphics library
@@ -69,24 +69,13 @@ _mesa_TexEnvfv( GLenum target, GLenum pname, const GLfloat *param )
ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx, "glTexEnv"); ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx, "glTexEnv");
if (target!=GL_TEXTURE_ENV) { if (target==GL_TEXTURE_ENV) {
gl_error( ctx, GL_INVALID_ENUM, "glTexEnv(target)" );
return;
}
if (MESA_VERBOSE&(VERBOSE_API|VERBOSE_TEXTURE))
fprintf(stderr, "glTexEnv %s %s %.1f(%s) ...\n",
gl_lookup_enum_by_nr(target),
gl_lookup_enum_by_nr(pname),
*param,
gl_lookup_enum_by_nr((GLenum) (GLint) *param));
if (pname==GL_TEXTURE_ENV_MODE) { if (pname==GL_TEXTURE_ENV_MODE) {
GLenum mode = (GLenum) (GLint) *param; GLenum mode = (GLenum) (GLint) *param;
switch (mode) { switch (mode) {
case GL_ADD: case GL_ADD:
if (!gl_extension_is_enabled(ctx, "GL_EXT_texture_env_add")) { if (!ctx->Extensions.HaveTextureEnvAdd) {
gl_error(ctx, GL_INVALID_ENUM, "glTexEnv(param)"); gl_error(ctx, GL_INVALID_ENUM, "glTexEnv(param)");
return; return;
} }
@@ -123,10 +112,40 @@ _mesa_TexEnvfv( GLenum target, GLenum pname, const GLfloat *param )
return; return;
} }
}
else if (target==GL_TEXTURE_FILTER_CONTROL_EXT) {
if (!ctx->Extensions.HaveTextureLodBias) {
gl_error( ctx, GL_INVALID_ENUM, "glTexEnv(param)" );
return;
}
if (pname==GL_TEXTURE_LOD_BIAS_EXT) {
texUnit->LodBias = param[0];
}
else {
gl_error( ctx, GL_INVALID_ENUM, "glTexEnv(pname)" );
return;
}
}
else {
gl_error( ctx, GL_INVALID_ENUM, "glTexEnv(target)" );
return;
}
if (MESA_VERBOSE&(VERBOSE_API|VERBOSE_TEXTURE))
fprintf(stderr, "glTexEnv %s %s %.1f(%s) ...\n",
gl_lookup_enum_by_nr(target),
gl_lookup_enum_by_nr(pname),
*param,
gl_lookup_enum_by_nr((GLenum) (GLint) *param));
/* Tell device driver about the new texture environment */ /* Tell device driver about the new texture environment */
if (ctx->Driver.TexEnv) { if (ctx->Driver.TexEnv) {
(*ctx->Driver.TexEnv)( ctx, target, pname, param ); (*ctx->Driver.TexEnv)( ctx, target, pname, param );
} }
} }