MYBOOL LUSOL_tightenpivot(LUSOLrec *LUSOL) { #if 0 REAL newvalue; #endif /* Give up tightening if we are already less than limit and we cannot change strategy */ if(MIN(LUSOL->parmlu[LUSOL_RP_FACTORMAX_Lij], LUSOL->parmlu[LUSOL_RP_UPDATEMAX_Lij]) < 1.1) { if(LUSOL->luparm[LUSOL_IP_PIVOTTYPE] >= LUSOL_PIVMOD_TRP) return( FALSE ); LUSOL_setpivotmodel(LUSOL, LUSOL->luparm[LUSOL_IP_PIVOTTYPE]+1, LUSOL_PIVTOL_DEFAULT+1); return( 2 ); } /* Otherwise tighten according to defined schedule */ #if 0 /* This is Michael Saunder's proposed tightening procedure */ newvalue = sqrt(LUSOL->parmlu[LUSOL_RP_FACTORMAX_Lij]); LUSOL->parmlu[LUSOL_RP_FACTORMAX_Lij] = newvalue; SETMIN(LUSOL->parmlu[LUSOL_RP_UPDATEMAX_Lij], newvalue); #elif 0 /* This is Kjell Eikland's schedule #1 */ newvalue = sqrt(LUSOL->parmlu[LUSOL_RP_FACTORMAX_Lij]); LUSOL->parmlu[LUSOL_RP_FACTORMAX_Lij] = newvalue; LUSOL->parmlu[LUSOL_RP_UPDATEMAX_Lij] = 1.0 + (newvalue - 1.0) / 2; #else /* This was Kjell Eikland's schedule #2 */ LUSOL->parmlu[LUSOL_RP_FACTORMAX_Lij] = 1.0 + LUSOL->parmlu[LUSOL_RP_FACTORMAX_Lij]/3.0; LUSOL->parmlu[LUSOL_RP_UPDATEMAX_Lij] = 1.0 + LUSOL->parmlu[LUSOL_RP_UPDATEMAX_Lij]/3.0; #endif return( TRUE ); }
STATIC void accumulate_for_scale(lprec *lp, REAL *min, REAL *max, REAL value) { if(transform_for_scale(lp, &value)) { if(is_scaletype(lp, SCALE_MEAN)) { *max += value; *min += 1; } else { SETMAX(*max, value); SETMIN(*min, value); } } }
//********************************************************************************** // //********************************************************************************** void CBackground::Render() { if ( s_bPBPFadeIn == true ) { s_PBPFadeAlpha += 8; SETMAX( s_PBPFadeAlpha, 0xff ); } else { s_PBPFadeAlpha -= 8; if ( s_PBPFadeAlpha < 0 ) { SAFE_DELETE( s_pPBPIconTexture ); } SETMIN( s_PBPFadeAlpha, 0x00 ); } if ( s_pPBPIconTexture != NULL ) { CGfx::DrawQuad( s_pPBPIconTexture, V2( 0.f, 0.f ), V2( CGfx::s_ScreenWidth, CGfx::s_ScreenHeight ), ARGB( s_PBPFadeAlpha, 0x80, 0x80, 0x80 ) ); } CTexture * p_background_texture( s_pBackgroundTexture ); if ( CSkinManager::GetComponent( CSkinManager::SC_BACKGROUND )->GetTexture() != NULL ) { p_background_texture = CSkinManager::GetComponent( CSkinManager::SC_BACKGROUND )->GetTexture(); } if ( p_background_texture == NULL ) { CGfx::DrawQuad( V2( 0.f, 0.f ), V2( CGfx::s_ScreenWidth, CGfx::s_ScreenHeight ), 0x00000000 ); } else { CGfx::DrawQuad( p_background_texture, V2( 0.f, 0.f ), V2( CGfx::s_ScreenWidth, CGfx::s_ScreenHeight ), ARGB( 0xff - s_PBPFadeAlpha, 0xff, 0xff, 0xff ) ); } for ( u32 i = 0; i < NUM_STRIPS; ++i ) { RenderStrip( s_StripInfo[ i ] ); } }
STATIC REAL minmax_to_scale(lprec *lp, REAL min, REAL max, int itemcount) { REAL scale; /* Initialize according to transformation / weighting model */ if(is_scalemode(lp, SCALE_LOGARITHMIC)) scale = 0; else scale = 1; if(itemcount <= 0) return(scale); /* Compute base scalar according to chosen scaling type */ if(is_scaletype(lp, SCALE_MEAN)) { if(min > 0) scale = max / min; } else if(is_scaletype(lp, SCALE_RANGE)) scale = (max + min) / 2; else if(is_scaletype(lp, SCALE_GEOMETRIC)) scale = sqrt(min*max); else if(is_scaletype(lp, SCALE_EXTREME)) scale = max; /* Compute final scalar according to transformation / weighting model */ if(is_scalemode(lp, SCALE_LOGARITHMIC)) scale = exp(-scale); else if(is_scalemode(lp, SCALE_QUADRATIC)) { if(scale == 0) scale = 1; else scale = 1 / sqrt(scale); } else { if(scale == 0) scale = 1; else scale = 1 / scale; } /* Make sure we are within acceptable scaling ranges */ SETMAX(scale, MIN_SCALAR); SETMIN(scale, MAX_SCALAR); return(scale); }