void hsG3DDeviceSelector::ISetFudgeFactors( uint8_t chipsetID, hsG3DDeviceRecord &record ) { int i, maxIDs, j; maxIDs = sizeof( dsCFTable ) / sizeof( dsCFTable[ 0 ] ); /// Search for our chipset for( i = 0; i < maxIDs; i++ ) { if( dsCFTable[ i ].fType == chipsetID ) { /// Found it! // Flags to force set if( dsCFTable[ i ].fFlagsToSet != nil ) { for( j = 0; j < dsCFTable[ i ].fFlagsToSet[ 0 ]; j++ ) record.SetCap( dsCFTable[ i ].fFlagsToSet[ j + 1 ] ); } // Flags to force clear if( dsCFTable[ i ].fFlagsToClear != nil ) { for( j = 0; j < dsCFTable[ i ].fFlagsToClear[ 0 ]; j++ ) record.SetCap( dsCFTable[ i ].fFlagsToClear[ j + 1 ], false ); } // Suckiness record.SetZBiasRating( dsCFTable[ i ].fZSuckiness ); // Max # of layers if( dsCFTable[ i ].fForceMaxLayers > 0 ) record.SetLayersAtOnce( dsCFTable[ i ].fForceMaxLayers ); // LOD bias rating record.SetLODBiasRating( dsCFTable[ i ].fLODRating ); // Fog tweaks FogTweakTable *fogTweaks = dsCFTable[ i ].fFogTweaks; record.SetFogApproxStarts( fogTweaks->fFogExpApproxStart, fogTweaks->fFogExp2ApproxStart ); record.SetFogEndBias( fogTweaks->fFogEndBias ); record.SetFogKneeParams( hsG3DDeviceRecord::kFogExp, fogTweaks->fFogExpKnee, fogTweaks->fFogExpKneeVal ); record.SetFogKneeParams( hsG3DDeviceRecord::kFogExp2, fogTweaks->fFogExp2Knee, fogTweaks->fFogExp2KneeVal ); if( record.GetCap(kCapsNoAA) ) { int j; for( j = 0; j < record.GetModes().GetCount(); j++ ) record.GetModes()[j].ClearFSAATypes(); } return; } } }