[Bug 9191] New: Roller Coaster Tycoon Will not switch to fullscreen (EnumDisplayModes bug?)

Wine Bugs wine-bugs at winehq.org
Sun Aug 5 07:29:46 CDT 2007


http://bugs.winehq.org/show_bug.cgi?id=9191

           Summary: Roller Coaster Tycoon Will not switch to fullscreen
                    (EnumDisplayModes bug?)
           Product: Wine
           Version: 0.9.42.
          Platform: PC
        OS/Version: Linux
            Status: UNCONFIRMED
          Severity: normal
          Priority: P2
         Component: wine-directx-ddraw
        AssignedTo: wine-bugs at winehq.org
        ReportedBy: phillipezolt at gmail.com


In roller coaster tycoon, when I try to switch to full-screen mode 640x480 (from
windowed), it won't work.   The application stays in windowed mode and turns
black.  (I can get the window back by moving various sub-windows around.)  

'xrandr -s 640x480' works so it isn't a permission problem.  Also, another
version of roller coaster tycoon (Rct2) works just fine. 


This used to work with:
1) FC6
2) Wine (v.????)
3) Original Roller Coaster Tycoon

But then I upgraded to: 
1) FC7, 
2) wine 0.9.42, 
3) RCT + Corkscreen Follies V. 1.20.013

And things don't work.  I reverted to wine-0.9.36-2.fc7, and that also doesn't
work. 

I traced the ddraw code, and I have a theory (which I can't yet prove) about why
it is failing:

On windows, EnumDisplayModes returns the lower bitdepth versions of a resolution
before the high bitdepth versions.  When running on wine the 32-bit version is
returned first. On wine, the application sees that it has 32-bit bitdepth
version of the resolution and (erroneously) decides that means it already missed
the 8-bit version. 

Here's why I say that: 

Looking at the trace these are the last few lines after issuing the request, the
application terminates the enumeration after it sees a 640x480 at 32, and never
gets to the 640x480 at 8: 

trace:ddraw:IDirectDrawImpl_EnumDisplayModes
(0x16e3e8)->((nil),0x32fd10,0x60fd5120): Relay
.....
 
trace:ddraw:IDirectDrawImpl_EnumDisplayModes Enumerating 800x600 at 32
trace:ddraw:PixelFormat_WineD3DtoDD Converting WINED3DFORMAT 22 to DDRAW
trace:ddraw:PixelFormat_WineD3DtoDD Returning: ( DDPF_RGB , RGB bits: 32,  R
00ff0000 G 0000ff00 B 000000ff)
trace:ddraw:IDirectDrawImpl_EnumDisplayModes Enumerating 640x480 at 32
trace:ddraw:IDirectDrawImpl_EnumDisplayModes Application asked to terminate the
enumeration

....

If I look at the whole trace, EARLIER in the execution that application does
iterate through all of the modes, and the 640x480 at 8 modes show up.  However,
every attempt at full screen stops with 640x480 at 32.

BTW.  I looked at the wine code, and it wasn't immediately obvious how to
reorder things so that this is sorted.  Suggestions welcome.

-- 
Configure bugmail: http://bugs.winehq.org/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the assignee for the bug, or are watching the assignee.



More information about the wine-bugs mailing list