[ scummvm-Patches-1013937 ] OSystem layers with bigger resolution

SourceForge.net noreply at sourceforge.net
Sun Aug 22 22:16:42 CEST 2004


Patches item #1013937, was opened at 2004-08-22 23:16
Message generated for change (Tracker Item Submitted) made by Item Submitter
You can respond by visiting: 
https://sourceforge.net/tracker/?func=detail&atid=418822&aid=1013937&group_id=37116

Category: None
Group: None
Status: Open
Resolution: None
Priority: 5
Submitted By: Eugene Sandulenko (sev)
Assigned to: Nobody/Anonymous (nobody)
Summary: OSystem layers with bigger resolution

Initial Comment:
Here I present OSystem change which were mentioned some
time ago on the devlist.

It lets us to have that layer where cursor and menus
live use 2x or 3x bigger size than original resolution.
As it was discussed, it gives us possibilty to have
640x400 in-game interface as well as launcher.

It runs perfectly with 1x scale, i.e. with currenlty
implemented behaviour and also it requires just one
small change to backends which aren't going to
implement it. All other functions have default
implementation which runs layer in 1x mode.

Basically it adds another surface with keycolor
transparency, draws cursor there, and works with GUI as
former _tmpscreen, i.e. no changes to current gui code
were made to make things run.

Thing gets turned on when showOverlay() is called. In
this mode mouse events are generated in overlay space,
i.e. 640x400 for 2x overlay.

OSystem changes:
 o initSize gets third parameter (default to 1), which
specifies overlay 
   scale factor. Currently overlay works only for
320xYYY modes, i.e.
   in 640x480 its scale is always 1. This is the only
change which
   has to be implemented for other backends, but its
value could be
   safely ignored there.

 o OverlayColor overlayKeyColor(). Returns transparent
color of the
   overlay. Is not used now, but may be if you want to
draw holes.

 o int Scr2Ovl(x) and int Ovl2Scr(y). Functions which
convert 
   coordinates between game and overlay. I.e. if you
want to draw
   something on overlay but align it with game screen,
use those.

 o void cursorScaled(bool scale). If called with true
(default), then
   cursor is always scaled to match current scale
factor, i.e. it
   becomes bigger as in current implementation. When it
is called
   with false, then cursor is used as is. It is used
with HE 7.0 games
   which ran in scaled 320x200 with cursors designed
for 640x480.
 
Also this patch introduces GF_UNSCALED_CURSORS which is
set for HE 7.0 games.

I run launcher as well as all 320x200 SCUMM games with
2x overlay. As current GUI is 320x200-specific, it
spans only on 1/4th of the screen, but this is out of
this patch scope :).

This patch has some flaws:
 o It uses 1.5x scaler when user requests scale to 3x
with 2x 
   overlay, I wrote quick and dirty implementation of
it, so it has to
   be replaced with something more nice looking.

 o It obviously restricts scaling for rates lesser than
overlayscale, i.e.
   for 2x scaler you cannot switch back to 320x200. But
if you have
   some 1x scaler specified in your ini file, it
doesn't avoid that and
   crashes. This has to be fixed in main.cpp

 o For same reason when you try to start 640x480 game
with 2x
   overlay from launcher, runGame() tries to switch to
GFX_NORMAL
   before the game engine calls initSize, and this leads to
   crash. It is design flaw in current implementation,
and probably
   such engines should check scale by themselves and call
   initSize appropriately.

 o When overlay is visible, it copies game screen and
uses it as an
   eyecandy by providing interface shadows. As there is
1.5x scaler
   introduced, simple scalers are used to produce
shadows. There
   could be added some brains to call, say HQ2x in HQ3x
mode,
   but I'm not sure is it really necessary.

 o now showOverlay() and hideOverlay() functions change
their 
   meaning and could be renamed to activateOverlay() and 
   deactivateOverlay() or some better names. I didn't
do that in the
   patch.

 o We could introduce kFeatureScaledOverlay or
something to 
   denote backends which support overlaying and fall
back to 1x
   if they're not. But getOverlayHeight() could be used
for that as
   well.

 o Cursor jumps when user switches resolution. But it
works in
   same way in current implementation, just becomes more
   obvious with this patch. It definitely has to be fixed.

Your feedback/critique/whatever is more than welcome.


----------------------------------------------------------------------

You can respond by visiting: 
https://sourceforge.net/tracker/?func=detail&atid=418822&aid=1013937&group_id=37116




More information about the Scummvm-tracker mailing list