#FPS drop at the scene load

1 messages · Page 1 of 1 (latest)

ebon vapor
#

This dirty patch works for me somehow.. I don't how, I don't know why, but..

#
private IEnumerator ReSetQualityLevelAfterSeconds(float delay)
{
    QualitySettings.vSyncCount = 4;
    Application.targetFrameRate = 70;

    yield return new WaitForSeconds(.2f);

    QualitySettings.SetQualityLevel(0, applyExpensiveChanges: true); // Default quality settings

    yield return new WaitForSecondsRealtime(delay);

    // this::GetRenderLevel returns an enum being Default, Quality or Performance
    // level is a ScriptableObject, Level::GetRenderLevel returns the string of the quality-level associated with the level ('scene') and the current platform
    // SetQualityLevel is defined below

    string levelMode = level.GetRenderLevel(this.GetRenderLevel());
    if (levelMode != null)
        SetQualityLevel(levelMode);

    yield return new WaitForSeconds(.2f);

    QualitySettings.vSyncCount = 0;
    Application.targetFrameRate = 60;
}```

with :

```csharp
private void SetQualityLevel(string levelMode)
{
    string[] names = QualitySettings.names;
    int curIndex = QualitySettings.GetQualityLevel();

    // Commented = Forced
    // if (string.Equals(names[curIndex], levelMode, System.StringComparison.CurrentCultureIgnoreCase))
    //     return;

    for (int i = 0; i < names.Length; i++)
    {
        if (string.Equals(names[i], levelMode, System.StringComparison.CurrentCultureIgnoreCase))
        {
            QualitySettings.SetQualityLevel(i, applyExpensiveChanges: true);
            lastQualityLevelSettingTime = Time.unscaledTime;

            break;
        }
    }
}
#

I call the routine with a little framerate analyser

#

I'm still interested if you have any idea, but for now this (whatever it does under the hood) fixes my issue