mesa: move fixed function vertex program builder from tnl to core mesa
Also unify caching of fragment and vertex programs in shader/prog_cache.c` Brought across from gallium-0.2
This commit is contained in:
@@ -134,10 +134,6 @@ _mesa_fetch_state(GLcontext *ctx, const gl_state_index state[],
|
||||
value[3] = 1.0;
|
||||
}
|
||||
return;
|
||||
case STATE_POSITION_NORMALIZED:
|
||||
COPY_4V(value, ctx->Light.Light[ln].EyePosition);
|
||||
NORMALIZE_3FV( value );
|
||||
return;
|
||||
default:
|
||||
_mesa_problem(ctx, "Invalid light state in fetch_state");
|
||||
return;
|
||||
@@ -401,7 +397,11 @@ _mesa_fetch_state(GLcontext *ctx, const gl_state_index state[],
|
||||
case STATE_INTERNAL:
|
||||
switch (state[1]) {
|
||||
case STATE_NORMAL_SCALE:
|
||||
ASSIGN_4V(value, ctx->_ModelViewInvScale, 0, 0, 1);
|
||||
ASSIGN_4V(value,
|
||||
ctx->_ModelViewInvScale,
|
||||
ctx->_ModelViewInvScale,
|
||||
ctx->_ModelViewInvScale,
|
||||
1);
|
||||
return;
|
||||
case STATE_TEXRECT_SCALE:
|
||||
{
|
||||
@@ -431,15 +431,45 @@ _mesa_fetch_state(GLcontext *ctx, const gl_state_index state[],
|
||||
value[2] = ctx->Fog.Density * ONE_DIV_LN2;
|
||||
value[3] = ctx->Fog.Density * ONE_DIV_SQRT_LN2;
|
||||
return;
|
||||
case STATE_SPOT_DIR_NORMALIZED: {
|
||||
|
||||
case STATE_LIGHT_SPOT_DIR_NORMALIZED: {
|
||||
/* here, state[2] is the light number */
|
||||
/* pre-normalize spot dir */
|
||||
const GLuint ln = (GLuint) state[2];
|
||||
COPY_3V(value, ctx->Light.Light[ln].EyeDirection);
|
||||
NORMALIZE_3FV(value);
|
||||
COPY_3V(value, ctx->Light.Light[ln]._NormDirection);
|
||||
value[3] = ctx->Light.Light[ln]._CosCutoff;
|
||||
return;
|
||||
}
|
||||
|
||||
case STATE_LIGHT_POSITION: {
|
||||
const GLuint ln = (GLuint) state[2];
|
||||
COPY_4V(value, ctx->Light.Light[ln]._Position);
|
||||
return;
|
||||
}
|
||||
|
||||
case STATE_LIGHT_POSITION_NORMALIZED: {
|
||||
const GLuint ln = (GLuint) state[2];
|
||||
COPY_4V(value, ctx->Light.Light[ln]._Position);
|
||||
NORMALIZE_3FV( value );
|
||||
return;
|
||||
}
|
||||
|
||||
case STATE_LIGHT_HALF_VECTOR: {
|
||||
const GLuint ln = (GLuint) state[2];
|
||||
GLfloat p[3];
|
||||
/* Compute infinite half angle vector:
|
||||
* halfVector = normalize(normalize(lightPos) + (0, 0, 1))
|
||||
* light.EyePosition.w should be 0 for infinite lights.
|
||||
*/
|
||||
COPY_3V(p, ctx->Light.Light[ln]._Position);
|
||||
NORMALIZE_3FV(p);
|
||||
ADD_3V(value, p, ctx->_EyeZDir);
|
||||
NORMALIZE_3FV(value);
|
||||
value[3] = 1.0;
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
case STATE_PT_SCALE:
|
||||
value[0] = ctx->Pixel.RedScale;
|
||||
value[1] = ctx->Pixel.GreenScale;
|
||||
@@ -711,7 +741,6 @@ append_token(char *dst, gl_state_index k)
|
||||
append(dst, "normalScale");
|
||||
break;
|
||||
case STATE_INTERNAL:
|
||||
case STATE_POSITION_NORMALIZED:
|
||||
append(dst, "(internal)");
|
||||
break;
|
||||
case STATE_PT_SCALE:
|
||||
|
Reference in New Issue
Block a user