Sereni / Simply-Love-SM5-Vertical

Simply Love on vertical screens
MIT License
13 stars 3 forks source link

Visual stutters during gameplay #78

Open Sereni opened 3 years ago

Sereni commented 3 years ago

If you're reading this and understand Stepmania/graphics, we need help :)

Got multiple reports of visual lags/freezing during gameplay. I suspect this isn't a theme issue, given that we don't have much theme UI on the screen at that point. Still, would be good to find out why.

What we know:

Open questions:

Known setups that lag:

Setups that don't lag:

teejusb commented 3 years ago

Maybe it has to do with the internal resolution of the theme?

Take a look at these links: https://github.com/stepmania/stepmania/blob/5_1-new/Themes/_fallback/metrics.ini#L18 https://github.com/stepmania/stepmania/blob/8ab7c7fab937acc684392b909b6b30b47d9a8c7b/src/ScreenDimensions.cpp#L11

Which show how the game scales the resolution of the game for the theme. Stock SL doesn't change override the fallback parameters.

I wonder if adding ScreenWidth=480 ScreenHeight=1 in your theme's metrics under [Common] (thus overriding the fallback's) will help.

Roujo commented 3 years ago

It looks like it might help, although my stuttering issues aren't consistent enough for me to say for sure. I applied the fix and there was no lagging anymore, but then I removed it and there wasn't any lag then either. =P

Most of the layout is broken with that resolution change, which was to be expected, so I'll try and make a branch where the game is playable (although visually broken) and we could get players with more issues to try it out. =)

Sereni commented 3 years ago

I chatted with Squirrel, who said our problem might be the odd height, which upsets opengl. In the snippet below, note a width-= width % 2;, but no such line for height.

{
    float fAspect = PREFSMAN->m_fDisplayAspectRatio;
    float fScale = 1;
    if( fAspect > THEME_NATIVE_ASPECT )
        fScale = fAspect / THEME_NATIVE_ASPECT;
    ASSERT( fScale >= 1 );
    // ceilf causes the width to come out odd when it shouldn't.
    // 576 * 1.7778 = 1024.0128, which is rounded to 1025. -Kyz
    int width= (int)ceilf(THEME_SCREEN_WIDTH * fScale);
    width-= width % 2;
    return (float)width;
}

float ScreenDimensions::GetScreenHeight()
{
    float fAspect = PREFSMAN->m_fDisplayAspectRatio;
    float fScale = 1;
    if( fAspect < THEME_NATIVE_ASPECT )
        fScale = THEME_NATIVE_ASPECT / fAspect;
    ASSERT( fScale >= 1 );
    return (float) ceilf(THEME_SCREEN_HEIGHT * fScale);
}

They said that 5.3 does the same at the moment, which aligns with us seeing the issue on both 5.1 and 5.3.

We could try adding a height-=height%2, compiling 5.1, and seeing if it gets any better?

https://github.com/stepmania/stepmania/blob/8ab7c7fab937acc684392b909b6b30b47d9a8c7b/src/ScreenDimensions.cpp#L31

Roujo commented 3 years ago

We could try adding a height-=height%2, compiling 5.1, and seeing if it gets any better?

Sure, on it.

teejusb commented 3 years ago

Do you know if the height is an odd number to begin with with the given dimensions as is? If it's not then the changes wouldn't do anything.

SCREENMAN:SystemMessage(SCREEN_HEIGHT) should tell you

teejusb commented 3 years ago

Also if it is an odd number, you can also first slightly change the Preferences of screen height/width to make it an even number to see if that's the cause. I think it would be a easier than recompiling/distributing StepMania.

Roujo commented 3 years ago

Bad news: I was playing with my wife yesterday, so I was using vanilla Simply Love. I had the same lagging issues on the same kind of songs that usually trigger them on Simply Love Vertical, so it looks like I can't really reproduce this issue after all. =/