[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