Novum / vkQuake

Vulkan Quake port based on QuakeSpasm
GNU General Public License v2.0
1.84k stars 224 forks source link

vid_desktopfullscreen "1" is pixelated on macOS #684

Open Perlence opened 1 year ago

Perlence commented 1 year ago

Describe the bug

The vid_desktopfullscreen "1" setting produces pixelated, low DPI output on macOS, see the original vid_desktopfullscreen "1" screenshot.

To reproduce

Set the following settings:

vid_borderless "0"
vid_desktopfullscreen "1"
vid_fullscreen "1"
vid_height "1600"
vid_width "2560"

Expected behavior

Sharp rendering, identical to the graphics we get when vid_desktopfullscreen is "0", see the original vid_desktopfullscreen "0" screenshot.

Additional context

I use vid_desktopfullscreen "1" so I can easily Cmd-Tab between applications. Otherwise I have to press Alt-Enter to exit full screen and then switch between apps.

I've tried adding SDL_WINDOW_ALLOW_HIGHDPI to the SDL_CreateWindow call and it fixed the issue for me, see the allow_hidpi vid_desktopfullscreen "1" screenshot.

https://github.com/Novum/vkQuake/blob/d1b931cd362e8f48f2488c4854cfa7d96d8b33a1/Quake/gl_vidsdl.c#L414

However, doing vid_restart in the game afterwards freezes the video output. The game is going, but it's a still image.

Screenshots

Desktop

Novum commented 1 year ago

High DPI stuff is a nightmare and I don't just want to set that flag as it can have unknown side effects on all sorts of different configurations and I don't have a QA department. This might need to wait until I migrate to SDL3 which handles this better.

vsonnier commented 1 week ago

Ping @Perlence Sorry for the spam, is this still a thing on master or 1.31.2 with newer SDL2 and MoltenVK ?

Perlence commented 1 week ago

Hey @vsonnier, no worries! Unfortunately, I still have the issue on d5f8694e7bbdfeb0d61e3333a2403a182827371d. I made sure to remove my patch before building the latest version.

I have some thoughts on this. I assume that when vid_desktopfullscreen is "1", vkQuake asks the OS what the resolution is. I think the problem is what MacOS is telling it, because it's lying! 😁

In MacOS, you can set the display resolution:

However, changing the setting does not change the video resolution. It's always the same, determined by the display. In my case, it's 2560x1600:

image

So what does the resolution setting above do? It changes the scaling of the UI.

Given all that, here's what I get in vkQuake when vid_desktopfullscreen is "1":

]vid_describecurrentmode
1440x900x32 60Hz fullscreen

MacOS tells vkQuake the "virtual" resolution, 1440x900. I think it should tell it the real one, 2560x1600.