Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add a toggle to preserve fullscreen aspect ratio in "Display Layout & effects" #18693

Closed
2 tasks done
ghost opened this issue Jan 15, 2024 · 8 comments · Fixed by #18704
Closed
2 tasks done

Add a toggle to preserve fullscreen aspect ratio in "Display Layout & effects" #18693

ghost opened this issue Jan 15, 2024 · 8 comments · Fixed by #18704
Labels
User Interface PPSSPP's own user interface / UX
Milestone

Comments

@ghost
Copy link

ghost commented Jan 15, 2024

What should happen

With PPSSPP's current default behavior, the PSP's 30:17 DAR (1:1 PAR) gets squashed to 16:9 DAR from the top and bottom bezels of the screen when in fullscreen mode. There should be a toggle to disable this behavior and draw black bars instead.

Who would this benefit

Technically this is already possible by using the Resize feature, but having to slowly move the mouse until you get it just right for each game is somewhat tedious, since the size of the black bars required to preserve the original DAR on a 16:9 display are very small to begin with. Having this relegated to a toggle would benefit users who also want to preserve the original PSP aspect ratio without wasting any screen real estate.

  • In windowed mode, PPSSPP already preserves the 30:17 DAR, so having it get squashed when switching to fullscreen mode causes a bit of visual discontinuity. Integer scaling also preserves the 30:17 DAR (obviously), but it results in cropping.

  • The only "downside" I can think of is that unlike with integer scaling, drawing black bars will result in some blurring since the output has to get downscaled to fit the screen. However this isn't much of a difference from the current status quo since squashing the image already results in blurring.

Platform (if relevant)

None

Games this would be useful in

Any

Other emulators or software with a similar feature

At a cursory glance, the libretro core for PPSSPP seems to default to preserving the aspect ratio when using the "Core Provided" aspect ratio option.

Checklist

@hrydgard
Copy link
Owner

I assume you're referring to how we automatically cut off one original-sized pixel from the bottom and top to turn 1920x1088 into 1920x1080 to fit? Is it really an issue to lose one row of pixels from the top and one from the bottom to achieve a perfect fit?

We could for sure add a toggle though, although every setting has a cost in terms of translation, screen space, confusion etc. I have been leaning more towards the side of adding actually useful settings rather than keeping it to a minimum like I tried before, though...

@LunaMoo
Copy link
Collaborator

LunaMoo commented Jan 15, 2024

Maybe he's using stretching. The issue description doesn't really match removing 1 line from top and the bottom which was always default and pretty much by everyone considered best in standard HD/uhd resolutions. In non standard res what he wants was also happening by default. Not sure if anything changed.

@ghost
Copy link
Author

ghost commented Jan 15, 2024

I assume you're referring to how we automatically cut off one original-sized pixel from the bottom and top to turn 1920x1088 into 1920x1080 to fit?

I'm not really sure about the exact technical details, but what you're describing here sounds more akin to a crop (aspect ratio is preserved, but the top and bottom are hidden behind the monitor's bezels). This is already what PPSSPP does if you're say, integer scaling to a 1080p/2160p monitor and bumping up the internal resolution (272p*4=1088p, chop off the top and bottom pixels to fit 1080p). Now, this works fine, however, it's not like PSP games exhibit overscan or visual padding, so you're losing visual information here and prematurely cutting off the visuals.

However, what PPSSPP is currently doing by default is more akin to a stretch, because it distorts the aspect ratio to fit the image on to a 16:9 screen, even though the PSP's original output DAR at 1:1 PAR doesn't perfectly fit 16:9.

This menu screen demonstrates what I'm talking about pretty well because the logo has a symbol with even lengths, and there's text that reaches all the way to the bottom line.

Current default behavior

ULUS10576_00000

4x Scaling with integer scaling enabled

ULUS10576_00001

Aspect ratio preserved (I just took a screenshot with RetroArch and added black padding on the sides in GIMP for demonstration purposes)

fixed

The difference is subtle, but as you can see, PPSSPP by default will squish the image and distort the aspect ratio.

We could for sure add a toggle though, although every setting has a cost in terms of translation, screen space, confusion etc.

This is your own personal project and you're free to add/not add what features you want obviously, but from my own anecdotal experience I would say that the current status quo adds more confusion. PPSSPP stretches the output by default, but it can't be turned off with the already available "Stretch" option in the menu, so the behavior is hardcoded. The menu also claims that the aspect ratio is set at 1.00, but again, this isn't actually the case, it's closer to ~0.993 when taking the stretching into consideration. And like I said, there's already visual discontinuity between fullscreen and windowed mode, since windowed mode preserves the aspect ratio but fullscreen doesn't.

If adding a new toggle isn't possible, then perhaps have the "Stretch" option in the menu control this behavior instead? That would avoid the development burden of adding a new menu item, and toggling the Stretch option would work as intuitively expected.

@hrydgard
Copy link
Owner

hrydgard commented Jan 15, 2024

Hm, I'm confused right now. The intention is that the default should look like your retroarch example above, unless the 1-pixel crop activates, but if it doesn't (which I haven't even noticed, maybe because I run in a small window 99% of the time since it's easier to debug that way), it's a bug indeed. Will look into it.

@hrydgard hrydgard added this to the v1.17.0 milestone Jan 15, 2024
@hrydgard
Copy link
Owner

Yup, I made a mistake in the last refactoring and implemented the auto-crop wrong, resulting in this poor result. Will fix soon so it will have the exact correct aspect ratio but cropped in this case, which will lead to the best pixel-mapping. Then the question is if we should add the option to turn it off, which will result in your retroarch image, but with an inexact pixel scale, making the image a little fuzzy.

@ghost
Copy link
Author

ghost commented Jan 15, 2024

My mistake then, I assumed that the current behavior was intentional and not a regression, since it happened on git master and stable.

@hrydgard
Copy link
Owner

hrydgard commented Jan 15, 2024

Not much of a mistake from your side then, you found a bug that I caused :)

Never assume that the current behavior is intentional, even if on stable :D The testing surface of this thing is huge, very easy to miss things like this.

hrydgard added a commit that referenced this issue Jan 15, 2024
… top and bottom

I seem to have switched to a stretch at some point, which isn't ideal and can be
achieved anyway with the stretch option. A two-line crop (1 at top, 1 at bottom)
is generally the better option.

There's now also a hidden ini setting to turn it off. I might be
convinced to add it as a real setting once I figure out a good name for
it. The setting:

```ini
[Graphics]
DisplayCrop16x9 = True
```

Fixes #18693
@hrydgard
Copy link
Owner

Hm, seems I did an intentional switch at some point which I had forgotten. I prefer the crop solution anyway, so switching back to it and adding a hidden setting to turn it off, but I don't recommend that. See #18704.

@hrydgard hrydgard added the User Interface PPSSPP's own user interface / UX label Jan 15, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
User Interface PPSSPP's own user interface / UX
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants