Integer scale mode breaks in fullscreen?

Godot Version

4.2 Stable.

Question

Does the new Integer scale mode not work with fullscreen? I’ve tried setting up a clean project on two different computers today using the new integer scale mode and have found strange results when trying to use this mode with fullscreen. Here’s an example:

Viewport scale 640x360 should scale nicely to 1280x720, 1920x1080, 2560x1440, 3840x2160, etc. and it does…in windowed mode. When scaling to such resolutions in windowed mode, the game scales nicely with no black bars. However, when the game is launched in fullscreen it refuses to properly scale.

Despite having a 3840x2160 res monitor (a clean 6x the viewport resolution), there are still thick black bars surrounding the game in fullscreen mode. I’ve read through the documentation on multiple resolutions but none of the info there seems to be of use in this case. Does anyone know what might be causing this issue or how it can be fixed? Or is it an engine bug with the new scale mode?

Thank you!

2 Likes

You need to use the Exclusive Fullscreen window mode, not Fullscreen as that mode intentionally leaves a 1-pixel line at the bottom of the screen (so that the OS doesn’t make the window automatically considered as exclusive fullscreen).

Exclusive Fullscreen should be used for games, while Fullscreen is meant to be used by GUI applications that explicitly want not to be considered as fullscreen by the OS (e.g. when you need per-pixel transparency).

I’ve opened a PR to document this.

6 Likes

I’ve tried that and just did so again to be sure. Exclusive fullscreen has the same result as fullscreen on one system…but not the other?

On my macbook, I have the same issue as normal fullscreen (even with a resolution that is a perfect 2x-4x smaller than the monitor’s resolution). There are thick black bars surrounding the viewport which ironically get even thicker when the viewport resolution is increased.

Yesterday, EFS behaved the same as FS on my windows desktop as well. However, I just tried again and it scaled perfectly. So now I’m looking at two different computers with the same setup and completely different results. This is strange :joy:

Are you using hiDPI scaling on the external monitor? If so, which scale factor are you using? You can calculate it by comparing the effective “screen real estate” pixel count compared to 3840×2160. For instance, a screen real estate of 1920×1080 on a 3840×2160 display indicates a scale factor of 200%.

This will reduce the available screen real estate, which can affect the actual scale factor being used. Godot is hiDPI-aware but on macOS, it also implements seamless display scaling which can mess things up if using monitors with different DPI settings.

Also, fractional DPI on macOS is implemented by rendering at a higher integer DPI then downscaling. This means that a scale factor of 150% is implemented as a 300% scale factor that is then downscaled by a 2× factor on each axis. This can cause integer scaling to not fill the screen, in addition to causing performance issues due to the internal rendering resolution being so high.

Yesterday, EFS behaved the same as FS on my windows desktop as well. However, I
just tried again and it scaled perfectly. So now I’m looking at two different computers with the same setup and completely different results. This is strange :joy:

The Exclusive Fullscreen and Fullscreen settings behave differently depending on the OS. This 1-pixel line behavior is only present on Windows because it’s needed there – it’s not needed on other platforms. On macOS, Exclusive Fullscreen prevents the menu bar from appearing when the mouse cursor goes near the top of the screen.

But how exactly do you enable “exclusive fullscreen” versus “normal fullscreen” in project settings?

In the case of macOS I’m not using an external monitor, just the one built into the macbook (res 3024 x 1964 but displays at a half res of 1512 x 982 by default). For this reason, I tried 756 x 491 as my Godot viewport resolution to scale but that didn’t work. Unfortunately, Apple likes to be different so there’s no way for me to use a standard resolution on this device.

Project Settings > Window > Mode. You should see the option right under the viewport width and height. It’s set to “Windowed” by default.

1 Like

Oh, thank you, I guess it’s something new in Godot 4, don’t remember that in 3.x.

If that setting is set to “Exclusive Fullscreen” and I check “Borderless” checkbox, then what happens? Is it borderless or is it exclusive?

That’s really a shame.

As a gamer I much prefer borderless fullscreen as it allows easy alt-tabing and using secondary monitors without game window minimizing/flickering after loosing focus.

It’s kinda sad that this new shiny feature of integer scaling which is so useful for pixel art games is incompatible with borderless fullscreen mode.

1 Like

In my case with a 1920x1080p monitor I had an issue with the windowed mode the scaling was kept at 2x instead of 3x for 1080p because the window would be 71px less because of the decorations of the window (1920, 1009) so I resized to (1920, 1080) and it worked…
I do not know if that’s the proper way to handle it however I hope it helps somehow anyone…