From: Keith Whitwell Date: Wed, 20 Sep 2006 14:30:22 +0000 (+0000) Subject: Add a new internal program parameter value STATE_TEXRECT_SCALE which X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=187f2cfb4ace79fabc994f4ce2753db5b11528eb;p=mesa.git Add a new internal program parameter value STATE_TEXRECT_SCALE which provides 1/width and 1/height of the active texture, useful for implementing ARB_texture_rectangle support on hardware which only supports ARB_npot-style texturing. --- diff --git a/src/mesa/shader/program.c b/src/mesa/shader/program.c index 6fd69dd982f..f999e0695ba 100644 --- a/src/mesa/shader/program.c +++ b/src/mesa/shader/program.c @@ -917,6 +917,15 @@ _mesa_fetch_state(GLcontext *ctx, const enum state_index state[], case STATE_NORMAL_SCALE: ASSIGN_4V(value, ctx->_ModelViewInvScale, 0, 0, 1); break; + case STATE_TEXRECT_SCALE: { + const int unit = (int) state[2]; + const struct gl_texture_object *texObj = ctx->Texture.Unit[unit]._Current; + if (texObj) { + struct gl_texture_image *texImage = texObj->Image[0][0]; + ASSIGN_4V(value, 1.0 / texImage->Width, 1.0 / texImage->Height, 0, 1); + } + break; + } default: _mesa_problem(ctx, "Bad state switch in _mesa_fetch_state()"); return; @@ -988,6 +997,8 @@ static GLuint make_state_flags(const GLint state[]) switch (state[1]) { case STATE_NORMAL_SCALE: return _NEW_MODELVIEW; + case STATE_TEXRECT_SCALE: + return _NEW_TEXTURE; default: _mesa_problem(NULL, "unexpected int. state in make_state_flags()"); return 0; diff --git a/src/mesa/shader/program.h b/src/mesa/shader/program.h index 5b73965dcaf..cf3b1cc0990 100644 --- a/src/mesa/shader/program.h +++ b/src/mesa/shader/program.h @@ -188,6 +188,7 @@ enum state_index { STATE_INTERNAL, /* Mesa additions */ STATE_NORMAL_SCALE, + STATE_TEXRECT_SCALE, STATE_POSITION_NORMALIZED /* normalized light position */ };