[Scummvm-tracker] [ScummVM :: Bugs] #16253: MACOSX: MYST3: 3D OpenGL incorrectly resizes window when switching from Fullscreen Mode.
ScummVM :: Bugs
trac at scummvm.org
Fri Feb 13 15:14:31 UTC 2026
#16253: MACOSX: MYST3: 3D OpenGL incorrectly resizes window when switching from
Fullscreen Mode.
-------------------+-----------------------------
Reporter: macca8 | Owner: (none)
Type: defect | Status: new
Priority: high | Component: Port: Mac OS X
Version: | Resolution:
Keywords: | Game: Myst 3: Exile
-------------------+-----------------------------
Comment (by antoniou79):
As far as I can tell this issue is a result of two factors:
(A). The MYST3 engine is **set to support the
"kSupportsArbitraryResolutions" feature**
(B). There's an **added code** in
OpenGLSdlGraphicsManager::loadVideoMode() to prevent "unnecessary
downscaling" starting here:
https://github.com/scummvm/scummvm/blob/b48ac7ddcb3f161c94cbdda453af1b85deb0ba83/backends/graphics/openglsdl
/openglsdl-graphics.cpp#L511
(which comes from this commit:
https://github.com/scummvm/scummvm/blob/b48ac7ddcb3f161c94cbdda453af1b85deb0ba83/backends/graphics/openglsdl
/openglsdl-graphics.cpp#L511)
---
So when launching **Myst 3** from a windowed ScummVM launcher, say of
custom dimensions 1487x955 in a desktop screen resolution of 1920x1200:
1. OpenGLSdlGraphicsManager::loadVideoMode() will eventually be called
with the engine-required-dimensions requestedWidth=853, and
requestedHeight=480 (from OpenGLGraphicsManager::initSize()), but the
final line (setupMode()) will be called for dimensions 1487x955 (of the
launcher window), which were saved in ScummVM configuration as
last_window_width, last_window_height. **Then, since Myst 3 supports
kSupportsArbitraryResolutions**, this piece of code
(https://github.com/scummvm/scummvm/blob/b48ac7ddcb3f161c94cbdda453af1b85deb0ba83/backends/graphics/opengl
/opengl-graphics.cpp#L1859) "stores" the game's "new" width and height
(1487x955) in _currentState.gameWidth and _currentState.gameHeight.
2. When switching Myst 3 to full screen
OpenGLSdlGraphicsManager::loadVideoMode() is now called with
requestedWidth=1487, and requestedHeight=955 (because of the previous
change to in _currentState.gameWidth and _currentState.gameHeight), and
setupMode() will be called with the those same dimensions. And again, this
piece of code
(https://github.com/scummvm/scummvm/blob/b48ac7ddcb3f161c94cbdda453af1b85deb0ba83/backends/graphics/opengl
/opengl-graphics.cpp#L1859) "stores" the game's width and height which is
now also the desktop full screen's width and height (1900x1200) in
_currentState.gameWidth and _currentState.gameHeight.
3. Finally, when switching out of full screen, loadVideoMode() is now
called with dimensions requestedWidth=1920, and requestedHeight=1200
(screen resolution, because of the previous change to
_currentState.gameWidth and _currentState.gameHeight), **gets the 1487x955
values stored in ScummVM config, but then qualifies for the condition of
code (B) so it ignores those** and keeps 1920x1200 calling setupMode().
Also, following that, OpenGLSdlGraphicsManager::notifyResize() is called,
finally persisting (saving) the new dimensions (1900x1200) to the ScummVM
config file.
---
In comparison, **Grim Fandango**, is not set to support the
"kSupportsArbitraryResolutions" feature.
So when launching **Grim Fandango** from a windowed ScummVM launcher, of
dimensions 1487x955 in a desktop screen resolution of 1920x1200:
1. OpenGLSdlGraphicsManager::loadVideoMode() will eventually be called
with the engine-required-dimensions requestedWidth=640, and
requestedHeight=480, but the final line (setupMode()) will be called for
dimensions 1487x955. (Up to here, this is similar behavior to Myst 3)
2. When switching Grim Fandango to full screen
OpenGLSdlGraphicsManager::loadVideoMode() is now called with
requestedWidth=640, and requestedHeight=480, and setupMode() will be
called with the those same dimensions.(This **differs from Myst 3**
because the _currentState.gameWidth and _currentState.gameHeight values
are not changed in Grim Fandango's case)
3. Finally, when switching out of full screen, loadVideoMode() is called
with dimensions requestedWidth=640, and requestedHeight=480, gets the
1487x955 values stored in ScummVM config, **does not qualify** for the
condition of code (B) and calls setupMode() for the 1487x955 (original
launcher resolution). Also, following that,
OpenGLSdlGraphicsManager::notifyResize() is called, persisting (saving)
these dimensions to the ScummVM config file (even though they've not
changed in this case).
---
Hopefully the above will be useful in working towards resolving this
issue.
--
Ticket URL: <https://bugs.scummvm.org/ticket/16253#comment:5>
ScummVM :: Bugs <https://bugs.scummvm.org>
ScummVM
More information about the Scummvm-tracker
mailing list