Opened 16 years ago

Closed 16 years ago

Last modified 2 years ago

#1834 closed defect (fixed)

GUI: Starting games in fullscreen doesn't work

Reported by: SF/trinity78 Owned by: cyxx
Priority: blocker Component: Ports
Keywords: Cc:
Game:

Description

ScummVM Daily Build 0.7.0 CVS Windows 2000 Service Pack 4

If you start ScummVM in window mode and then switch to fullscreen using the alt+enter button, ScummVM exits/crashes without an error message when pressing the "start"-button. For some strange if you start a game in window mode and after the game has started switch to fullscreen using alt+enter, everything works fine.

Ticket imported from: #1074931. Ticket imported from: bugs/1834.

Change History (14)

comment:1 by SF/trinity78, 16 years ago

Sorry typos: alt + enter button = alt + enter keys For some strange "reason"

I'm tired. *sigh*

comment:2 by SF/trinity78, 16 years ago

Found the error message: Assertion failed: _transactionMode == kTransactionNone, file backends/sdl/graphics.cpp, line 1153

comment:3 by sev-, 16 years ago

Owner: set to sev-
Resolution: outdated
Status: newclosed

comment:4 by sev-, 16 years ago

It was fixed couple days ago. Use latest build.

comment:5 by SF/trinity78, 16 years ago

Hmm ok. In this case the Windows Daily Snapshot (November 28, 2004, 4:40 pm) seems to be quite old, because I downloaded it one hour ago.

Couple of days = couple of hours maybe?

comment:6 by sev-, 16 years ago

To reproduce the bug: 1. Run ScummVM without parameters 2. Switch to full screen mode 3. Run any game

comment:7 by sev-, 16 years ago

Resolution: outdated
Status: closednew
Summary: Starting games in fullscreen doesn't workGUI: Starting games in fullscreen doesn't work

comment:8 by fingolfin, 16 years ago

Priority: normalhigh

comment:9 by fingolfin, 16 years ago

This is release criticial, setting priority to 9.

comment:10 by fingolfin, 16 years ago

Priority: highblocker

comment:11 by cyxx, 16 years ago

I add a quick look at it. For the reference, here's the backtrace : #0 OSystem_SDL::undrawMouse() (this=<incomplete type>) at backends/sdl/graphics.cpp:1153 #1 0x00402f7b in OSystem_SDL::setFullscreenMode(bool) ( this=<incomplete type>, enable=false) at backends/sdl/graphics.cpp:564 #2 0x00402072 in OSystem_SDL::endGFXTransaction() (this=<incomplete type>) at backends/sdl/graphics.cpp:78 #3 0x004c52e6 in Queen::QueenEngine::init(GameDetector&) ( this=<incomplete type>, detector=@0x22ff18) at queen/queen.cpp:333 #4 0x00406b97 in runGame(GameDetector&, OSystem*) (detector=@0x22ff18, system=0x1078428) at base/main.cpp:263 #5 0x0040708c in main (argc=1, argv=0x3f2570) at base/main.cpp:389

Basically, a call to undrawMouse() is made from setFullscreen() with _transactionMode == kTransactionCommit

As I am not that familiar with the SDL backend nor the transaction stuff (_sev told me it was semi-implemented), I can only give 2 suggestions : - change the assert in undrawMouse to accept the kTransactionCommit (quite hackish) - remove the undrawMouse() call in setFullscreen(); afterall, is it really necessary ? setFullscreen() calls internUpdateScreen() which refresh the whole screen and call drawMouse()....

comment:12 by fingolfin, 16 years ago

Owner: changed from sev- to cyxx
Resolution: fixed
Status: newclosed

comment:13 by fingolfin, 16 years ago

Actually, the undrawMouse() is needed, because otherwise the mouse may leave traces in some systems (like in mine, because it switches between 555 and 565 mode; so when we switch the mode, the data gets converted, except the data behind the mouse).

So I commited the first suggested solution, I don't think that it is *that* hackish, actually :-)

comment:14 by digitall, 2 years ago

Component: --Unset--Ports
Note: See TracTickets for help on using tickets.