// Try and match the current cvar state against the scalability sections too see if one matches. OutQualityLevel will be set to -1 if none match static void InferCurrentQualityLevel(const FString& InGroupName, int32& OutQualityLevel, TArray<FString>* OutCVars) { TArray<FString> SectionNames; GConfig->GetSectionNames(GScalabilityIni, SectionNames); OutQualityLevel = -1; for (int32 SectionNameIndex = 0; SectionNameIndex < SectionNames.Num(); ++SectionNameIndex) { FString GroupName; int32 GroupQualityLevel; if (SplitSectionName(SectionNames[SectionNameIndex], GroupName, GroupQualityLevel)) { if (GroupName == FString(InGroupName)) { TArray<FString> CVarData; GConfig->GetSection(*SectionNames[SectionNameIndex], CVarData, GScalabilityIni); bool bAllMatch = true; // Check all cvars against current state to see if they match for (int32 DataIndex = 0; DataIndex < CVarData.Num(); ++DataIndex) { const FString& CVarString = CVarData[DataIndex]; FString CVarName, CVarValue; if (CVarString.Split(TEXT("="), &CVarName, &CVarValue)) { IConsoleVariable* CVar = IConsoleManager::Get().FindConsoleVariable(*CVarName); if (CVar) { float CurrentValue = CVar->GetFloat(); float ValueToCheck = FCString::Atof(*CVarValue); if (ValueToCheck != CurrentValue) { bAllMatch = false; break; } } } } if (bAllMatch) { OutQualityLevel = FMath::Max(OutQualityLevel, GroupQualityLevel); if (OutCVars) { *OutCVars = CVarData; } } } } } }
//------------------------------------------------------------------------ //! Retrieves the currently active profile //! //! @return Name of the profile //------------------------------------------------------------------------ CString CViewConfigSectionProfiles::GetActiveProfile() { CString strViewName, strProfile; SplitSectionName(m_CurrentSection, strViewName, strProfile); return strProfile; }