2003-09-25 16:20:34 +00:00
|
|
|
//============================================================================
|
|
|
|
//
|
|
|
|
// SSSS tt lll lll
|
|
|
|
// SS SS tt ll ll
|
|
|
|
// SS tttttt eeee ll ll aaaa
|
|
|
|
// SSSS tt ee ee ll ll aa
|
|
|
|
// SS tt eeeeee ll ll aaaaa -- "An Atari 2600 VCS Emulator"
|
|
|
|
// SS SS tt ee ll ll aa aa
|
|
|
|
// SSSS ttt eeeee llll llll aaaaa
|
|
|
|
//
|
2010-04-10 21:37:23 +00:00
|
|
|
// Copyright (c) 1995-2010 by Bradford W. Mott, Stephen Anthony
|
|
|
|
// and the Stella Team
|
2003-09-25 16:20:34 +00:00
|
|
|
//
|
2010-01-10 03:23:32 +00:00
|
|
|
// See the file "License.txt" for information on usage and redistribution of
|
2003-09-25 16:20:34 +00:00
|
|
|
// this file, and for a DISCLAIMER OF ALL WARRANTIES.
|
|
|
|
//
|
2009-05-13 13:55:40 +00:00
|
|
|
// $Id$
|
2003-09-25 16:20:34 +00:00
|
|
|
//============================================================================
|
|
|
|
|
2003-10-17 18:02:16 +00:00
|
|
|
#ifndef FRAMEBUFFER_HXX
|
|
|
|
#define FRAMEBUFFER_HXX
|
2003-09-25 16:20:34 +00:00
|
|
|
|
2008-12-12 15:51:07 +00:00
|
|
|
#include <map>
|
2005-02-21 02:23:57 +00:00
|
|
|
#include <SDL.h>
|
|
|
|
|
2008-06-13 13:14:52 +00:00
|
|
|
class FBSurface;
|
2007-09-03 18:37:24 +00:00
|
|
|
class OSystem;
|
|
|
|
class Console;
|
|
|
|
|
|
|
|
namespace GUI {
|
|
|
|
class Font;
|
2008-06-20 12:19:42 +00:00
|
|
|
struct Rect;
|
2007-09-03 18:37:24 +00:00
|
|
|
}
|
|
|
|
|
Added new rendering modes to FrameBufferSoft, which don't use dirty
rectangle merging. This makes the 'dirtyrects' option more relevant,
since now if it's turned off, dirty rectangles are not merged, and
the screen is updated with SDL_Flip() instead of SDL_UpdateRects().
This new functionality is very similar to how z26 works, but
experiments on my Linux system show it to be twice as fast on
average :) Dirty rectangle merging now defaults to off. I'm
leaving it in, since it benefits people in some cases. Basically,
non-dirty-rect support is optimal when many things are changing
onscreen at once, at the cost of more constant and generally slightly
higher CPU usage. Dirty-rect support is optimal at larger resolutions,
where it's usually at least twice as fast as without, but is suboptimal
at larger resolutions when lots of stuff is changing. At some point in
the future, maybe Stella itself can automatically switch modes depending
on which is faster at any point in time.
Added "[..]" previous directory functionality to BrowserWidget, the same
as already in the LauncherDialog. Thanks for Alex and Lou for the
reminder.
git-svn-id: svn://svn.code.sf.net/p/stella/code/trunk@1197 8b62c5a3-ac7e-4cc8-8f21-d9a121418aba
2006-12-10 17:04:34 +00:00
|
|
|
#include "EventHandler.hxx"
|
Reworked 'fullres' argument to also accept the 'auto' option. In this case,
fullscreen resolutions will be automatically chosen based on the required
size for the window. The image will be centered and keep the same aspect
ratio, however, so operation will still work correctly on widescreen
monitors. 'Auto' will be the new default. Otherwise, if a specific
resolution is requested, Stella will try to accomodate it *only* if it fits
into the resolution; otherwise the smallest resolution that fits will be
used.
Removed 'zoom_ui' and 'zoom_tia'. The UI can now only be at 1x mode.
Aded 'tia_filter' commandline argument, which specifies to the filter
to use when rendering the tia image. For now, these accept 'zoom1x',
'zoom2x'..., up to 'zoom10x', and duplicate previous behaviour. Eventually,
Scalexx and HQxx filters may be added. Still TODO is add this to the UI.
First pass at making the standard build use a minimum of zoom2x for the TIA,
so the UI can be larger and use a better looking font. There's still work
to do in this area, especially for those ports with limited hardware that
support zoom1x only.
git-svn-id: svn://svn.code.sf.net/p/stella/code/trunk@1544 8b62c5a3-ac7e-4cc8-8f21-d9a121418aba
2008-07-22 14:54:39 +00:00
|
|
|
#include "Settings.hxx"
|
2008-06-19 12:01:31 +00:00
|
|
|
#include "Rect.hxx"
|
2007-09-03 18:37:24 +00:00
|
|
|
#include "bspf.hxx"
|
2003-09-25 16:20:34 +00:00
|
|
|
|
2006-01-19 00:45:13 +00:00
|
|
|
// Different types of framebuffer derived objects
|
|
|
|
enum BufferType {
|
|
|
|
kSoftBuffer,
|
|
|
|
kGLBuffer
|
|
|
|
};
|
|
|
|
|
2010-07-22 15:41:46 +00:00
|
|
|
// Return values for initialization of framebuffer window
|
|
|
|
enum FBInitStatus {
|
|
|
|
kSuccess,
|
|
|
|
kFailComplete,
|
|
|
|
kFailTooLarge,
|
|
|
|
kFailNotSupported,
|
|
|
|
};
|
|
|
|
|
2006-03-19 18:17:48 +00:00
|
|
|
// Positions for onscreen/overlaid messages
|
|
|
|
enum MessagePosition {
|
|
|
|
kTopLeft,
|
|
|
|
kTopCenter,
|
|
|
|
kTopRight,
|
|
|
|
kMiddleLeft,
|
|
|
|
kMiddleCenter,
|
|
|
|
kMiddleRight,
|
|
|
|
kBottomLeft,
|
|
|
|
kBottomCenter,
|
|
|
|
kBottomRight
|
|
|
|
};
|
|
|
|
|
2006-03-25 00:34:17 +00:00
|
|
|
// Colors indices to use for the various GUI elements
|
2009-01-03 22:57:12 +00:00
|
|
|
enum {
|
|
|
|
kColor = 256,
|
2006-03-25 00:34:17 +00:00
|
|
|
kBGColor,
|
|
|
|
kShadowColor,
|
|
|
|
kTextColor,
|
|
|
|
kTextColorHi,
|
|
|
|
kTextColorEm,
|
2007-08-06 20:16:51 +00:00
|
|
|
kDlgColor,
|
2007-08-12 23:05:12 +00:00
|
|
|
kWidColor,
|
2007-08-15 17:43:51 +00:00
|
|
|
kWidFrameColor,
|
2007-08-06 20:16:51 +00:00
|
|
|
kBtnColor,
|
|
|
|
kBtnColorHi,
|
2007-08-12 23:05:12 +00:00
|
|
|
kBtnTextColor,
|
|
|
|
kBtnTextColorHi,
|
|
|
|
kCheckColor,
|
2007-08-06 20:16:51 +00:00
|
|
|
kScrollColor,
|
|
|
|
kScrollColorHi,
|
2007-08-12 23:05:12 +00:00
|
|
|
kSliderColor,
|
|
|
|
kSliderColorHi,
|
2007-08-15 17:43:51 +00:00
|
|
|
kDbgChangedColor,
|
|
|
|
kDbgChangedTextColor,
|
|
|
|
kDbgColorHi,
|
2009-01-03 22:57:12 +00:00
|
|
|
kNumColors
|
2006-03-25 00:34:17 +00:00
|
|
|
};
|
|
|
|
|
Added preliminary framework for using advanced scalers. Right now,
functionality is exactly the same as before; Alt-Equals goes to the
next valid scaler, and Alt-Minus goes to the previous one.
What were previously zoomed modes are now treated as scalers, named
'Zoom1x', 'Zoom2x', etc. Various scalexx and hqxx modes will also be made
available.
For now, and probably forever, these advanced scaling modes will only
be available for OpenGL, since if you don't have a card that can handle
GL well, the scalers will probably be too much anyway. Also, the advanced
scaling will not be available in UI mode, only OpenGL emulation mode.
The UI (Launcher, Debugger) and emulation modes are now scaled separately,
specified with the new settings 'scale_ui' and 'scale_tia'. The 'zoom'
setting has been removed.
git-svn-id: svn://svn.code.sf.net/p/stella/code/trunk@1133 8b62c5a3-ac7e-4cc8-8f21-d9a121418aba
2006-10-14 20:08:29 +00:00
|
|
|
|
2003-09-25 16:20:34 +00:00
|
|
|
/**
|
2009-01-19 16:52:32 +00:00
|
|
|
This class encapsulates all video buffers and is the basis for the video
|
2005-02-21 02:23:57 +00:00
|
|
|
display in Stella. All graphics ports should derive from this class for
|
2003-10-26 19:40:39 +00:00
|
|
|
platform-specific video stuff.
|
|
|
|
|
2009-01-19 16:52:32 +00:00
|
|
|
The TIA is drawn here, and all GUI elements (ala ScummVM, which are drawn
|
|
|
|
into FBSurfaces), are in turn drawn here as well.
|
2003-09-25 16:20:34 +00:00
|
|
|
|
|
|
|
@author Stephen Anthony
|
2009-05-13 13:55:40 +00:00
|
|
|
@version $Id$
|
2003-09-25 16:20:34 +00:00
|
|
|
*/
|
2003-10-17 18:02:16 +00:00
|
|
|
class FrameBuffer
|
2003-09-25 16:20:34 +00:00
|
|
|
{
|
|
|
|
public:
|
|
|
|
/**
|
2003-10-17 18:02:16 +00:00
|
|
|
Creates a new Frame Buffer
|
2003-09-25 16:20:34 +00:00
|
|
|
*/
|
2005-02-21 20:43:53 +00:00
|
|
|
FrameBuffer(OSystem* osystem);
|
2003-09-25 16:20:34 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
Destructor
|
|
|
|
*/
|
2003-10-26 19:40:39 +00:00
|
|
|
virtual ~FrameBuffer();
|
|
|
|
|
|
|
|
/**
|
2005-02-22 18:41:16 +00:00
|
|
|
(Re)initializes the framebuffer display. This must be called before any
|
2003-10-26 19:40:39 +00:00
|
|
|
calls are made to derived methods.
|
|
|
|
|
2005-05-06 22:50:15 +00:00
|
|
|
@param title The title of the window
|
|
|
|
@param width The width of the framebuffer
|
|
|
|
@param height The height of the framebuffer
|
2010-07-22 15:41:46 +00:00
|
|
|
|
|
|
|
@return Status of initialization (see FBInitStatus 'enum')
|
2003-10-26 19:40:39 +00:00
|
|
|
*/
|
2010-07-22 15:41:46 +00:00
|
|
|
FBInitStatus initialize(const string& title, uInt32 width, uInt32 height);
|
2003-10-26 19:40:39 +00:00
|
|
|
|
|
|
|
/**
|
2005-02-21 02:23:57 +00:00
|
|
|
Updates the display, which depending on the current mode could mean
|
2009-01-19 16:52:32 +00:00
|
|
|
drawing the TIA, any pending menus, etc.
|
2003-10-26 19:40:39 +00:00
|
|
|
*/
|
|
|
|
void update();
|
|
|
|
|
|
|
|
/**
|
|
|
|
Shows a message onscreen.
|
|
|
|
|
|
|
|
@param message The message to be shown
|
2006-03-19 18:17:48 +00:00
|
|
|
@param position Onscreen position for the message
|
Revamped the result on floating pins for TIA reads. Previously, this was
controlled by 'tiafloat', which has now been removed. Now, all
undriven pins take on the last value on the databus. This fixes a bug
in those reads where bit 6 or bits 6 & 7 are also undriven (previously,
these bits would always be zero, and only bits 0-5 were from lastdatabus.
Added new commandline argument 'tiadriven', which defaults to false.
In this default case, relevant bits take on values from the databus.
If true, relevant bits still take on databus values, but some are
randomly driven high as well. This helps to expose bugs when
developers assume the values for undriven/floating bits.
Added 'uimessages' commandline argument and associated UI item. When
disabled, messages which are normally shown in-game are disabled.
Certain messages which indicate a serious error are still shown, however.
git-svn-id: svn://svn.code.sf.net/p/stella/code/trunk@1900 8b62c5a3-ac7e-4cc8-8f21-d9a121418aba
2009-11-10 20:12:50 +00:00
|
|
|
@param force Force showing this message, even if messages are disabled
|
2006-03-19 18:17:48 +00:00
|
|
|
@param color Color of text in the message
|
2003-10-26 19:40:39 +00:00
|
|
|
*/
|
2006-03-19 18:17:48 +00:00
|
|
|
void showMessage(const string& message,
|
|
|
|
MessagePosition position = kBottomCenter,
|
Revamped the result on floating pins for TIA reads. Previously, this was
controlled by 'tiafloat', which has now been removed. Now, all
undriven pins take on the last value on the databus. This fixes a bug
in those reads where bit 6 or bits 6 & 7 are also undriven (previously,
these bits would always be zero, and only bits 0-5 were from lastdatabus.
Added new commandline argument 'tiadriven', which defaults to false.
In this default case, relevant bits take on values from the databus.
If true, relevant bits still take on databus values, but some are
randomly driven high as well. This helps to expose bugs when
developers assume the values for undriven/floating bits.
Added 'uimessages' commandline argument and associated UI item. When
disabled, messages which are normally shown in-game are disabled.
Certain messages which indicate a serious error are still shown, however.
git-svn-id: svn://svn.code.sf.net/p/stella/code/trunk@1900 8b62c5a3-ac7e-4cc8-8f21-d9a121418aba
2009-11-10 20:12:50 +00:00
|
|
|
bool force = false,
|
2009-01-03 22:57:12 +00:00
|
|
|
uInt32 color = kTextColorHi);
|
2003-10-26 19:40:39 +00:00
|
|
|
|
2005-08-29 18:36:42 +00:00
|
|
|
/**
|
2008-05-20 13:42:50 +00:00
|
|
|
Toggles showing or hiding framerate statistics.
|
2005-08-29 18:36:42 +00:00
|
|
|
*/
|
2008-05-20 13:42:50 +00:00
|
|
|
void toggleFrameStats();
|
|
|
|
|
|
|
|
/**
|
|
|
|
Shows a message containing frame statistics for the current frame.
|
|
|
|
*/
|
|
|
|
void showFrameStats(bool enable);
|
|
|
|
|
|
|
|
/**
|
|
|
|
Enable/disable any pending messages. Disabled messages aren't removed
|
|
|
|
from the message queue; they're just not redrawn into the framebuffer.
|
|
|
|
*/
|
|
|
|
void enableMessages(bool enable);
|
2005-08-29 18:36:42 +00:00
|
|
|
|
2008-12-12 15:51:07 +00:00
|
|
|
/**
|
2008-12-12 18:32:53 +00:00
|
|
|
Allocate a new surface with a unique ID. The FrameBuffer class takes
|
|
|
|
all responsibility for freeing this surface (ie, other classes must not
|
|
|
|
delete it directly).
|
2008-12-12 15:51:07 +00:00
|
|
|
|
|
|
|
@param w The requested width of the new surface.
|
|
|
|
@param h The requested height of the new surface.
|
|
|
|
@param useBase Use the base surface instead of creating a new one
|
|
|
|
|
|
|
|
@return A unique ID used to identify this surface
|
|
|
|
*/
|
|
|
|
int allocateSurface(int w, int h, bool useBase = false);
|
|
|
|
|
|
|
|
/**
|
|
|
|
Retrieve the surface associated with the given ID.
|
|
|
|
|
|
|
|
@param id The ID for the surface to retrieve.
|
|
|
|
@return A pointer to a valid surface object, or NULL.
|
|
|
|
*/
|
|
|
|
FBSurface* surface(int id) const;
|
|
|
|
|
2003-10-26 19:40:39 +00:00
|
|
|
/**
|
2008-06-19 12:01:31 +00:00
|
|
|
Returns the current dimensions of the framebuffer image.
|
|
|
|
Note that this will take into account the current scaling (if any)
|
|
|
|
as well as image 'centering'.
|
2003-10-26 19:40:39 +00:00
|
|
|
*/
|
2008-06-19 12:01:31 +00:00
|
|
|
inline const GUI::Rect& imageRect() const { return myImageRect; }
|
2003-10-26 19:40:39 +00:00
|
|
|
|
|
|
|
/**
|
2008-06-19 12:01:31 +00:00
|
|
|
Returns the current dimensions of the framebuffer window.
|
|
|
|
This is the entire area containing the framebuffer image as well as any
|
|
|
|
'unusable' area.
|
2003-10-26 19:40:39 +00:00
|
|
|
*/
|
2008-06-19 12:01:31 +00:00
|
|
|
inline const GUI::Rect& screenRect() const { return myScreenRect; }
|
2005-02-21 02:23:57 +00:00
|
|
|
|
2003-11-24 14:51:06 +00:00
|
|
|
/**
|
2008-12-27 23:27:32 +00:00
|
|
|
Refresh display according to the current state, taking single vs.
|
|
|
|
double-buffered modes into account, and redrawing accordingly.
|
2003-11-24 14:51:06 +00:00
|
|
|
*/
|
2006-05-15 12:24:09 +00:00
|
|
|
void refresh();
|
2003-11-24 14:51:06 +00:00
|
|
|
|
2005-02-21 02:23:57 +00:00
|
|
|
/**
|
2005-05-01 20:11:07 +00:00
|
|
|
Toggles between fullscreen and window mode.
|
2009-01-24 17:32:29 +00:00
|
|
|
Grabmouse activated when in fullscreen mode.
|
2005-05-01 20:11:07 +00:00
|
|
|
*/
|
|
|
|
void toggleFullscreen();
|
|
|
|
|
|
|
|
/**
|
|
|
|
Enables/disables fullscreen mode.
|
|
|
|
Grabmouse activated when in fullscreen mode.
|
2005-03-26 19:26:48 +00:00
|
|
|
|
2005-05-01 20:11:07 +00:00
|
|
|
@param enable Set the fullscreen mode to this value
|
2005-02-21 02:23:57 +00:00
|
|
|
*/
|
2005-05-01 20:11:07 +00:00
|
|
|
void setFullscreen(bool enable);
|
2005-02-21 02:23:57 +00:00
|
|
|
|
|
|
|
/**
|
Added 'WINDOWED_SUPPORT' compile-time argument, which can be used for
those systems which don't actually have a windowing environment. When
this is set, toggling from fullscreen will not be possible, and certain
window-related UI functions will not be accessible.
Completely revamped video subsystem. Windowed and fullscreen modes are
now dealt with separately. Windows can be zoomed using the 'zoom_ui'
and 'zoom_tia' arguments. Fullscreen modes are now set by resolution,
not zoom, so you can specify to always use a certain fullscreen
resolution, and the images will be scaled appropriately. This also
fixes the fullscreen issues on widescreen monitors; just select a
widescreen video mode, and the aspect ratio will always be correct.
Removed dirty-rect support for software rendering of the TIA image,
as it ended up being slower than just updating the entire image.
For those resolutions where it will start to slow down (1024x768 or
higher), one should be using OpenGL.
Fixed issue in Windows when returning from fullscreen mode made the
window constantly 'shrink' in size. It was related to auto-detecting
the desktop resolution, which is really the job of SDL. As such, all
further releases of Stella will require SDL 1.2.10, which includes
this auto-detection code internally.
Made ROM launcher resizable, configurable in sizes from 320x240
to 800x600. Updated the UIDialog to change these quantities from the
UI (Stella will need to be restarted for it to take effect).
Removed aspect ratio support, since it was causing problems, and the
new fullscreen mode work has made it obsolete. i *may* consider it
again in the future, if there's sufficient demand.
Added 'fullres' commandline argument, used to set the fullscreen
resolution.
Added 'launcherres' commandline argument, used to set the ROM
launcher resolution. This replaces 'launchersize' argument, which
has been removed.
Changed 'scale_ui' and 'scale_tia' to 'zoom_ui' and 'zoom_tia',
respectively. Their function remains the same.
Changed meaning of 'gl_fsmax' argument to specify what modes to use
fullscreen OpenGL scaling (previously, this was a boolean, and
didn't consider different modes).
git-svn-id: svn://svn.code.sf.net/p/stella/code/trunk@1323 8b62c5a3-ac7e-4cc8-8f21-d9a121418aba
2007-06-20 16:33:23 +00:00
|
|
|
This method is called when the user wants to switch to the next available
|
|
|
|
video mode (functionality depends on fullscreen or windowed mode).
|
|
|
|
direction = -1 means go to the next lower video mode
|
2009-01-03 22:57:12 +00:00
|
|
|
direction = 0 means to reload the current video mode
|
Added 'WINDOWED_SUPPORT' compile-time argument, which can be used for
those systems which don't actually have a windowing environment. When
this is set, toggling from fullscreen will not be possible, and certain
window-related UI functions will not be accessible.
Completely revamped video subsystem. Windowed and fullscreen modes are
now dealt with separately. Windows can be zoomed using the 'zoom_ui'
and 'zoom_tia' arguments. Fullscreen modes are now set by resolution,
not zoom, so you can specify to always use a certain fullscreen
resolution, and the images will be scaled appropriately. This also
fixes the fullscreen issues on widescreen monitors; just select a
widescreen video mode, and the aspect ratio will always be correct.
Removed dirty-rect support for software rendering of the TIA image,
as it ended up being slower than just updating the entire image.
For those resolutions where it will start to slow down (1024x768 or
higher), one should be using OpenGL.
Fixed issue in Windows when returning from fullscreen mode made the
window constantly 'shrink' in size. It was related to auto-detecting
the desktop resolution, which is really the job of SDL. As such, all
further releases of Stella will require SDL 1.2.10, which includes
this auto-detection code internally.
Made ROM launcher resizable, configurable in sizes from 320x240
to 800x600. Updated the UIDialog to change these quantities from the
UI (Stella will need to be restarted for it to take effect).
Removed aspect ratio support, since it was causing problems, and the
new fullscreen mode work has made it obsolete. i *may* consider it
again in the future, if there's sufficient demand.
Added 'fullres' commandline argument, used to set the fullscreen
resolution.
Added 'launcherres' commandline argument, used to set the ROM
launcher resolution. This replaces 'launchersize' argument, which
has been removed.
Changed 'scale_ui' and 'scale_tia' to 'zoom_ui' and 'zoom_tia',
respectively. Their function remains the same.
Changed meaning of 'gl_fsmax' argument to specify what modes to use
fullscreen OpenGL scaling (previously, this was a boolean, and
didn't consider different modes).
git-svn-id: svn://svn.code.sf.net/p/stella/code/trunk@1323 8b62c5a3-ac7e-4cc8-8f21-d9a121418aba
2007-06-20 16:33:23 +00:00
|
|
|
direction = +1 means go to the next higher video mode
|
2005-03-26 19:26:48 +00:00
|
|
|
|
Added preliminary framework for using advanced scalers. Right now,
functionality is exactly the same as before; Alt-Equals goes to the
next valid scaler, and Alt-Minus goes to the previous one.
What were previously zoomed modes are now treated as scalers, named
'Zoom1x', 'Zoom2x', etc. Various scalexx and hqxx modes will also be made
available.
For now, and probably forever, these advanced scaling modes will only
be available for OpenGL, since if you don't have a card that can handle
GL well, the scalers will probably be too much anyway. Also, the advanced
scaling will not be available in UI mode, only OpenGL emulation mode.
The UI (Launcher, Debugger) and emulation modes are now scaled separately,
specified with the new settings 'scale_ui' and 'scale_tia'. The 'zoom'
setting has been removed.
git-svn-id: svn://svn.code.sf.net/p/stella/code/trunk@1133 8b62c5a3-ac7e-4cc8-8f21-d9a121418aba
2006-10-14 20:08:29 +00:00
|
|
|
@param direction Described above
|
2005-02-21 02:23:57 +00:00
|
|
|
*/
|
Added 'WINDOWED_SUPPORT' compile-time argument, which can be used for
those systems which don't actually have a windowing environment. When
this is set, toggling from fullscreen will not be possible, and certain
window-related UI functions will not be accessible.
Completely revamped video subsystem. Windowed and fullscreen modes are
now dealt with separately. Windows can be zoomed using the 'zoom_ui'
and 'zoom_tia' arguments. Fullscreen modes are now set by resolution,
not zoom, so you can specify to always use a certain fullscreen
resolution, and the images will be scaled appropriately. This also
fixes the fullscreen issues on widescreen monitors; just select a
widescreen video mode, and the aspect ratio will always be correct.
Removed dirty-rect support for software rendering of the TIA image,
as it ended up being slower than just updating the entire image.
For those resolutions where it will start to slow down (1024x768 or
higher), one should be using OpenGL.
Fixed issue in Windows when returning from fullscreen mode made the
window constantly 'shrink' in size. It was related to auto-detecting
the desktop resolution, which is really the job of SDL. As such, all
further releases of Stella will require SDL 1.2.10, which includes
this auto-detection code internally.
Made ROM launcher resizable, configurable in sizes from 320x240
to 800x600. Updated the UIDialog to change these quantities from the
UI (Stella will need to be restarted for it to take effect).
Removed aspect ratio support, since it was causing problems, and the
new fullscreen mode work has made it obsolete. i *may* consider it
again in the future, if there's sufficient demand.
Added 'fullres' commandline argument, used to set the fullscreen
resolution.
Added 'launcherres' commandline argument, used to set the ROM
launcher resolution. This replaces 'launchersize' argument, which
has been removed.
Changed 'scale_ui' and 'scale_tia' to 'zoom_ui' and 'zoom_tia',
respectively. Their function remains the same.
Changed meaning of 'gl_fsmax' argument to specify what modes to use
fullscreen OpenGL scaling (previously, this was a boolean, and
didn't consider different modes).
git-svn-id: svn://svn.code.sf.net/p/stella/code/trunk@1323 8b62c5a3-ac7e-4cc8-8f21-d9a121418aba
2007-06-20 16:33:23 +00:00
|
|
|
bool changeVidMode(int direction);
|
2005-02-21 02:23:57 +00:00
|
|
|
|
2005-03-14 04:08:15 +00:00
|
|
|
/**
|
|
|
|
Sets the state of the cursor (hidden or grabbed) based on the
|
|
|
|
current mode.
|
|
|
|
*/
|
|
|
|
void setCursorState();
|
|
|
|
|
2005-02-21 02:23:57 +00:00
|
|
|
/**
|
|
|
|
Shows or hides the cursor based on the given boolean value.
|
|
|
|
*/
|
2006-12-02 23:25:55 +00:00
|
|
|
virtual void showCursor(bool show);
|
2005-02-21 02:23:57 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
Grabs or ungrabs the mouse based on the given boolean value.
|
|
|
|
*/
|
|
|
|
void grabMouse(bool grab);
|
|
|
|
|
|
|
|
/**
|
|
|
|
Answers if the display is currently in fullscreen mode.
|
|
|
|
*/
|
2007-09-03 18:37:24 +00:00
|
|
|
bool fullScreen() const;
|
2005-02-21 02:23:57 +00:00
|
|
|
|
|
|
|
/**
|
2005-02-22 18:41:16 +00:00
|
|
|
Set the title for the main SDL window.
|
2005-02-21 02:23:57 +00:00
|
|
|
*/
|
2005-03-26 19:26:48 +00:00
|
|
|
void setWindowTitle(const string& title);
|
2005-02-21 02:23:57 +00:00
|
|
|
|
Reworked 'fullres' argument to also accept the 'auto' option. In this case,
fullscreen resolutions will be automatically chosen based on the required
size for the window. The image will be centered and keep the same aspect
ratio, however, so operation will still work correctly on widescreen
monitors. 'Auto' will be the new default. Otherwise, if a specific
resolution is requested, Stella will try to accomodate it *only* if it fits
into the resolution; otherwise the smallest resolution that fits will be
used.
Removed 'zoom_ui' and 'zoom_tia'. The UI can now only be at 1x mode.
Aded 'tia_filter' commandline argument, which specifies to the filter
to use when rendering the tia image. For now, these accept 'zoom1x',
'zoom2x'..., up to 'zoom10x', and duplicate previous behaviour. Eventually,
Scalexx and HQxx filters may be added. Still TODO is add this to the UI.
First pass at making the standard build use a minimum of zoom2x for the TIA,
so the UI can be larger and use a better looking font. There's still work
to do in this area, especially for those ports with limited hardware that
support zoom1x only.
git-svn-id: svn://svn.code.sf.net/p/stella/code/trunk@1544 8b62c5a3-ac7e-4cc8-8f21-d9a121418aba
2008-07-22 14:54:39 +00:00
|
|
|
/**
|
|
|
|
Get the supported TIA filters for the given framebuffer type.
|
|
|
|
*/
|
2008-07-25 12:41:41 +00:00
|
|
|
const StringMap& supportedTIAFilters(const string& type);
|
Reworked 'fullres' argument to also accept the 'auto' option. In this case,
fullscreen resolutions will be automatically chosen based on the required
size for the window. The image will be centered and keep the same aspect
ratio, however, so operation will still work correctly on widescreen
monitors. 'Auto' will be the new default. Otherwise, if a specific
resolution is requested, Stella will try to accomodate it *only* if it fits
into the resolution; otherwise the smallest resolution that fits will be
used.
Removed 'zoom_ui' and 'zoom_tia'. The UI can now only be at 1x mode.
Aded 'tia_filter' commandline argument, which specifies to the filter
to use when rendering the tia image. For now, these accept 'zoom1x',
'zoom2x'..., up to 'zoom10x', and duplicate previous behaviour. Eventually,
Scalexx and HQxx filters may be added. Still TODO is add this to the UI.
First pass at making the standard build use a minimum of zoom2x for the TIA,
so the UI can be larger and use a better looking font. There's still work
to do in this area, especially for those ports with limited hardware that
support zoom1x only.
git-svn-id: svn://svn.code.sf.net/p/stella/code/trunk@1544 8b62c5a3-ac7e-4cc8-8f21-d9a121418aba
2008-07-22 14:54:39 +00:00
|
|
|
|
2009-01-03 22:57:12 +00:00
|
|
|
/**
|
2009-09-01 11:54:59 +00:00
|
|
|
Get the TIA pixel associated with the given TIA buffer index,
|
|
|
|
shifting by the given offset (for greyscale values).
|
2009-01-03 22:57:12 +00:00
|
|
|
*/
|
2009-09-01 11:54:59 +00:00
|
|
|
uInt32 tiaPixel(uInt32 idx, uInt8 shift = 0) const;
|
2009-01-03 22:57:12 +00:00
|
|
|
|
2005-02-21 02:23:57 +00:00
|
|
|
/**
|
OK, some huge changes across the board, so lets see if I get it all:
After much request, added ability to access the settings menu from the
ROM browser dialog. This menu now contains almost all items that can
be selected in Stella, and can be accessed in-game as before.
Completely removed pause functionality from the core code. It made
sense back when Stella was a single-mode program: there were two modes;
emulation and pause. Now that there are other event modes, the
EventHandler state machine is getting too complicated. If you want to
pause, you can simply enter one of the in-game menus. Related to this,
when the app is minimized, Stella enters the menu dialog state.
Previously, minimizing the app caused a pause, but since there was no
onscreen feedback, many people assumed the app locked up.
Added centering to all Dialog boxes, which is done dynamically, as they're
placed on the dialog stack to be drawn to the screen.
Cleaned up the API of Console/FrameBuffer/OSystem classes wrt to palettes
and timing. Parts of each were being done in different classes; now it
should be more consistent.
Started infrastructure for user-selectable UI palettes. For now, there's
no way to change it in the GUI, and it defaults to the normal palette.
Eventually, there will be several choices selectable from an in-game
menu.
Removed '-channels' commandline argument, since that feature can be
set from the ROM properties.
Added '128' to the choices for fragment size in AudioDialog.
Tweaked the OpenGL dynamic loading code to test both the given GL
lib, and if that fails to use auto-detection. It seems in the OSX port,
the first approach works for some people, and not the other (and vice-versa),
git-svn-id: svn://svn.code.sf.net/p/stella/code/trunk@1255 8b62c5a3-ac7e-4cc8-8f21-d9a121418aba
2006-12-30 22:26:29 +00:00
|
|
|
Set up the TIA/emulation palette for a screen of any depth > 8.
|
2005-05-05 00:10:49 +00:00
|
|
|
|
|
|
|
@param palette The array of colors
|
2005-02-21 02:23:57 +00:00
|
|
|
*/
|
OK, some huge changes across the board, so lets see if I get it all:
After much request, added ability to access the settings menu from the
ROM browser dialog. This menu now contains almost all items that can
be selected in Stella, and can be accessed in-game as before.
Completely removed pause functionality from the core code. It made
sense back when Stella was a single-mode program: there were two modes;
emulation and pause. Now that there are other event modes, the
EventHandler state machine is getting too complicated. If you want to
pause, you can simply enter one of the in-game menus. Related to this,
when the app is minimized, Stella enters the menu dialog state.
Previously, minimizing the app caused a pause, but since there was no
onscreen feedback, many people assumed the app locked up.
Added centering to all Dialog boxes, which is done dynamically, as they're
placed on the dialog stack to be drawn to the screen.
Cleaned up the API of Console/FrameBuffer/OSystem classes wrt to palettes
and timing. Parts of each were being done in different classes; now it
should be more consistent.
Started infrastructure for user-selectable UI palettes. For now, there's
no way to change it in the GUI, and it defaults to the normal palette.
Eventually, there will be several choices selectable from an in-game
menu.
Removed '-channels' commandline argument, since that feature can be
set from the ROM properties.
Added '128' to the choices for fragment size in AudioDialog.
Tweaked the OpenGL dynamic loading code to test both the given GL
lib, and if that fails to use auto-detection. It seems in the OSX port,
the first approach works for some people, and not the other (and vice-versa),
git-svn-id: svn://svn.code.sf.net/p/stella/code/trunk@1255 8b62c5a3-ac7e-4cc8-8f21-d9a121418aba
2006-12-30 22:26:29 +00:00
|
|
|
virtual void setTIAPalette(const uInt32* palette);
|
|
|
|
|
|
|
|
/**
|
|
|
|
Set up the user interface palette for a screen of any depth > 8.
|
|
|
|
|
|
|
|
@param palette The array of colors
|
|
|
|
*/
|
|
|
|
virtual void setUIPalette(const uInt32* palette);
|
2005-02-21 02:23:57 +00:00
|
|
|
|
Added new rendering modes to FrameBufferSoft, which don't use dirty
rectangle merging. This makes the 'dirtyrects' option more relevant,
since now if it's turned off, dirty rectangles are not merged, and
the screen is updated with SDL_Flip() instead of SDL_UpdateRects().
This new functionality is very similar to how z26 works, but
experiments on my Linux system show it to be twice as fast on
average :) Dirty rectangle merging now defaults to off. I'm
leaving it in, since it benefits people in some cases. Basically,
non-dirty-rect support is optimal when many things are changing
onscreen at once, at the cost of more constant and generally slightly
higher CPU usage. Dirty-rect support is optimal at larger resolutions,
where it's usually at least twice as fast as without, but is suboptimal
at larger resolutions when lots of stuff is changing. At some point in
the future, maybe Stella itself can automatically switch modes depending
on which is faster at any point in time.
Added "[..]" previous directory functionality to BrowserWidget, the same
as already in the LauncherDialog. Thanks for Alex and Lou for the
reminder.
git-svn-id: svn://svn.code.sf.net/p/stella/code/trunk@1197 8b62c5a3-ac7e-4cc8-8f21-d9a121418aba
2006-12-10 17:04:34 +00:00
|
|
|
/**
|
|
|
|
Informs the Framebuffer of a change in EventHandler state.
|
|
|
|
*/
|
2009-01-10 18:52:55 +00:00
|
|
|
void stateChanged(EventHandler::State state);
|
Added new rendering modes to FrameBufferSoft, which don't use dirty
rectangle merging. This makes the 'dirtyrects' option more relevant,
since now if it's turned off, dirty rectangles are not merged, and
the screen is updated with SDL_Flip() instead of SDL_UpdateRects().
This new functionality is very similar to how z26 works, but
experiments on my Linux system show it to be twice as fast on
average :) Dirty rectangle merging now defaults to off. I'm
leaving it in, since it benefits people in some cases. Basically,
non-dirty-rect support is optimal when many things are changing
onscreen at once, at the cost of more constant and generally slightly
higher CPU usage. Dirty-rect support is optimal at larger resolutions,
where it's usually at least twice as fast as without, but is suboptimal
at larger resolutions when lots of stuff is changing. At some point in
the future, maybe Stella itself can automatically switch modes depending
on which is faster at any point in time.
Added "[..]" previous directory functionality to BrowserWidget, the same
as already in the LauncherDialog. Thanks for Alex and Lou for the
reminder.
git-svn-id: svn://svn.code.sf.net/p/stella/code/trunk@1197 8b62c5a3-ac7e-4cc8-8f21-d9a121418aba
2006-12-10 17:04:34 +00:00
|
|
|
|
2009-05-25 17:51:52 +00:00
|
|
|
/**
|
|
|
|
Get the zoom level.
|
|
|
|
*/
|
|
|
|
uInt32 getZoomLevel() { return myZoomLevel; }
|
|
|
|
|
Added 'WINDOWED_SUPPORT' compile-time argument, which can be used for
those systems which don't actually have a windowing environment. When
this is set, toggling from fullscreen will not be possible, and certain
window-related UI functions will not be accessible.
Completely revamped video subsystem. Windowed and fullscreen modes are
now dealt with separately. Windows can be zoomed using the 'zoom_ui'
and 'zoom_tia' arguments. Fullscreen modes are now set by resolution,
not zoom, so you can specify to always use a certain fullscreen
resolution, and the images will be scaled appropriately. This also
fixes the fullscreen issues on widescreen monitors; just select a
widescreen video mode, and the aspect ratio will always be correct.
Removed dirty-rect support for software rendering of the TIA image,
as it ended up being slower than just updating the entire image.
For those resolutions where it will start to slow down (1024x768 or
higher), one should be using OpenGL.
Fixed issue in Windows when returning from fullscreen mode made the
window constantly 'shrink' in size. It was related to auto-detecting
the desktop resolution, which is really the job of SDL. As such, all
further releases of Stella will require SDL 1.2.10, which includes
this auto-detection code internally.
Made ROM launcher resizable, configurable in sizes from 320x240
to 800x600. Updated the UIDialog to change these quantities from the
UI (Stella will need to be restarted for it to take effect).
Removed aspect ratio support, since it was causing problems, and the
new fullscreen mode work has made it obsolete. i *may* consider it
again in the future, if there's sufficient demand.
Added 'fullres' commandline argument, used to set the fullscreen
resolution.
Added 'launcherres' commandline argument, used to set the ROM
launcher resolution. This replaces 'launchersize' argument, which
has been removed.
Changed 'scale_ui' and 'scale_tia' to 'zoom_ui' and 'zoom_tia',
respectively. Their function remains the same.
Changed meaning of 'gl_fsmax' argument to specify what modes to use
fullscreen OpenGL scaling (previously, this was a boolean, and
didn't consider different modes).
git-svn-id: svn://svn.code.sf.net/p/stella/code/trunk@1323 8b62c5a3-ac7e-4cc8-8f21-d9a121418aba
2007-06-20 16:33:23 +00:00
|
|
|
//////////////////////////////////////////////////////////////////////
|
|
|
|
// The following methods are system-specific and must be implemented
|
|
|
|
// in derived classes.
|
|
|
|
//////////////////////////////////////////////////////////////////////
|
2003-10-17 18:02:16 +00:00
|
|
|
public:
|
2006-01-10 20:37:00 +00:00
|
|
|
/**
|
2006-01-15 16:31:01 +00:00
|
|
|
Enable/disable phosphor effect.
|
2006-01-10 20:37:00 +00:00
|
|
|
*/
|
2006-11-04 19:38:25 +00:00
|
|
|
virtual void enablePhosphor(bool enable, int blend) = 0;
|
2006-01-10 20:37:00 +00:00
|
|
|
|
2007-09-01 23:31:18 +00:00
|
|
|
/**
|
2009-01-03 22:57:12 +00:00
|
|
|
This method is called to retrieve the R/G/B data from the given pixel.
|
|
|
|
|
|
|
|
@param pixel The pixel containing R/G/B data
|
|
|
|
@param r The red component of the color
|
|
|
|
@param g The green component of the color
|
|
|
|
@param b The blue component of the color
|
|
|
|
*/
|
|
|
|
virtual void getRGB(Uint32 pixel, Uint8* r, Uint8* g, Uint8* b) const = 0;
|
|
|
|
|
|
|
|
/**
|
|
|
|
This method is called to map a given R/G/B triple to the screen palette.
|
2007-09-01 23:31:18 +00:00
|
|
|
|
|
|
|
@param r The red component of the color.
|
|
|
|
@param g The green component of the color.
|
|
|
|
@param b The blue component of the color.
|
|
|
|
*/
|
2007-09-03 18:37:24 +00:00
|
|
|
virtual Uint32 mapRGB(Uint8 r, Uint8 g, Uint8 b) const = 0;
|
2007-09-01 23:31:18 +00:00
|
|
|
|
2008-06-13 13:14:52 +00:00
|
|
|
/**
|
|
|
|
This method is called to query the type of the FrameBuffer.
|
|
|
|
*/
|
|
|
|
virtual BufferType type() const = 0;
|
|
|
|
|
Added 'WINDOWED_SUPPORT' compile-time argument, which can be used for
those systems which don't actually have a windowing environment. When
this is set, toggling from fullscreen will not be possible, and certain
window-related UI functions will not be accessible.
Completely revamped video subsystem. Windowed and fullscreen modes are
now dealt with separately. Windows can be zoomed using the 'zoom_ui'
and 'zoom_tia' arguments. Fullscreen modes are now set by resolution,
not zoom, so you can specify to always use a certain fullscreen
resolution, and the images will be scaled appropriately. This also
fixes the fullscreen issues on widescreen monitors; just select a
widescreen video mode, and the aspect ratio will always be correct.
Removed dirty-rect support for software rendering of the TIA image,
as it ended up being slower than just updating the entire image.
For those resolutions where it will start to slow down (1024x768 or
higher), one should be using OpenGL.
Fixed issue in Windows when returning from fullscreen mode made the
window constantly 'shrink' in size. It was related to auto-detecting
the desktop resolution, which is really the job of SDL. As such, all
further releases of Stella will require SDL 1.2.10, which includes
this auto-detection code internally.
Made ROM launcher resizable, configurable in sizes from 320x240
to 800x600. Updated the UIDialog to change these quantities from the
UI (Stella will need to be restarted for it to take effect).
Removed aspect ratio support, since it was causing problems, and the
new fullscreen mode work has made it obsolete. i *may* consider it
again in the future, if there's sufficient demand.
Added 'fullres' commandline argument, used to set the fullscreen
resolution.
Added 'launcherres' commandline argument, used to set the ROM
launcher resolution. This replaces 'launchersize' argument, which
has been removed.
Changed 'scale_ui' and 'scale_tia' to 'zoom_ui' and 'zoom_tia',
respectively. Their function remains the same.
Changed meaning of 'gl_fsmax' argument to specify what modes to use
fullscreen OpenGL scaling (previously, this was a boolean, and
didn't consider different modes).
git-svn-id: svn://svn.code.sf.net/p/stella/code/trunk@1323 8b62c5a3-ac7e-4cc8-8f21-d9a121418aba
2007-06-20 16:33:23 +00:00
|
|
|
/**
|
2009-01-03 15:44:13 +00:00
|
|
|
This method is called to get the specified scanline data from the
|
|
|
|
viewable FrameBuffer area. Note that this isn't the same as any
|
|
|
|
internal surfaces that may be in use; it should return the actual
|
|
|
|
data as it is currently seen onscreen.
|
2008-06-13 13:14:52 +00:00
|
|
|
|
|
|
|
@param row The row we are looking for
|
|
|
|
@param data The actual pixel data (in bytes)
|
Added 'WINDOWED_SUPPORT' compile-time argument, which can be used for
those systems which don't actually have a windowing environment. When
this is set, toggling from fullscreen will not be possible, and certain
window-related UI functions will not be accessible.
Completely revamped video subsystem. Windowed and fullscreen modes are
now dealt with separately. Windows can be zoomed using the 'zoom_ui'
and 'zoom_tia' arguments. Fullscreen modes are now set by resolution,
not zoom, so you can specify to always use a certain fullscreen
resolution, and the images will be scaled appropriately. This also
fixes the fullscreen issues on widescreen monitors; just select a
widescreen video mode, and the aspect ratio will always be correct.
Removed dirty-rect support for software rendering of the TIA image,
as it ended up being slower than just updating the entire image.
For those resolutions where it will start to slow down (1024x768 or
higher), one should be using OpenGL.
Fixed issue in Windows when returning from fullscreen mode made the
window constantly 'shrink' in size. It was related to auto-detecting
the desktop resolution, which is really the job of SDL. As such, all
further releases of Stella will require SDL 1.2.10, which includes
this auto-detection code internally.
Made ROM launcher resizable, configurable in sizes from 320x240
to 800x600. Updated the UIDialog to change these quantities from the
UI (Stella will need to be restarted for it to take effect).
Removed aspect ratio support, since it was causing problems, and the
new fullscreen mode work has made it obsolete. i *may* consider it
again in the future, if there's sufficient demand.
Added 'fullres' commandline argument, used to set the fullscreen
resolution.
Added 'launcherres' commandline argument, used to set the ROM
launcher resolution. This replaces 'launchersize' argument, which
has been removed.
Changed 'scale_ui' and 'scale_tia' to 'zoom_ui' and 'zoom_tia',
respectively. Their function remains the same.
Changed meaning of 'gl_fsmax' argument to specify what modes to use
fullscreen OpenGL scaling (previously, this was a boolean, and
didn't consider different modes).
git-svn-id: svn://svn.code.sf.net/p/stella/code/trunk@1323 8b62c5a3-ac7e-4cc8-8f21-d9a121418aba
2007-06-20 16:33:23 +00:00
|
|
|
*/
|
2008-06-13 13:14:52 +00:00
|
|
|
virtual void scanline(uInt32 row, uInt8* data) const = 0;
|
Added 'WINDOWED_SUPPORT' compile-time argument, which can be used for
those systems which don't actually have a windowing environment. When
this is set, toggling from fullscreen will not be possible, and certain
window-related UI functions will not be accessible.
Completely revamped video subsystem. Windowed and fullscreen modes are
now dealt with separately. Windows can be zoomed using the 'zoom_ui'
and 'zoom_tia' arguments. Fullscreen modes are now set by resolution,
not zoom, so you can specify to always use a certain fullscreen
resolution, and the images will be scaled appropriately. This also
fixes the fullscreen issues on widescreen monitors; just select a
widescreen video mode, and the aspect ratio will always be correct.
Removed dirty-rect support for software rendering of the TIA image,
as it ended up being slower than just updating the entire image.
For those resolutions where it will start to slow down (1024x768 or
higher), one should be using OpenGL.
Fixed issue in Windows when returning from fullscreen mode made the
window constantly 'shrink' in size. It was related to auto-detecting
the desktop resolution, which is really the job of SDL. As such, all
further releases of Stella will require SDL 1.2.10, which includes
this auto-detection code internally.
Made ROM launcher resizable, configurable in sizes from 320x240
to 800x600. Updated the UIDialog to change these quantities from the
UI (Stella will need to be restarted for it to take effect).
Removed aspect ratio support, since it was causing problems, and the
new fullscreen mode work has made it obsolete. i *may* consider it
again in the future, if there's sufficient demand.
Added 'fullres' commandline argument, used to set the fullscreen
resolution.
Added 'launcherres' commandline argument, used to set the ROM
launcher resolution. This replaces 'launchersize' argument, which
has been removed.
Changed 'scale_ui' and 'scale_tia' to 'zoom_ui' and 'zoom_tia',
respectively. Their function remains the same.
Changed meaning of 'gl_fsmax' argument to specify what modes to use
fullscreen OpenGL scaling (previously, this was a boolean, and
didn't consider different modes).
git-svn-id: svn://svn.code.sf.net/p/stella/code/trunk@1323 8b62c5a3-ac7e-4cc8-8f21-d9a121418aba
2007-06-20 16:33:23 +00:00
|
|
|
|
|
|
|
protected:
|
2008-07-04 14:27:17 +00:00
|
|
|
// Different types of graphic filters to apply to the TIA image
|
|
|
|
enum GfxID {
|
|
|
|
GFX_Zoom1x,
|
|
|
|
GFX_Zoom2x,
|
|
|
|
GFX_Zoom3x,
|
|
|
|
GFX_Zoom4x,
|
|
|
|
GFX_Zoom5x,
|
|
|
|
GFX_Zoom6x,
|
|
|
|
GFX_Zoom7x,
|
|
|
|
GFX_Zoom8x,
|
|
|
|
GFX_Zoom9x,
|
|
|
|
GFX_Zoom10x,
|
|
|
|
GFX_NumModes
|
|
|
|
};
|
|
|
|
|
|
|
|
struct GraphicsMode {
|
|
|
|
GfxID type;
|
|
|
|
const char* name;
|
|
|
|
const char* description;
|
|
|
|
uInt32 zoom;
|
2008-07-25 12:41:41 +00:00
|
|
|
uInt8 avail; // 0x1 bit -> software, 0x2 bit -> opengl
|
2008-07-04 14:27:17 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
// Contains all relevant info for the dimensions of an SDL screen
|
|
|
|
// Also takes care of the case when the SDL image should be 'centered'
|
|
|
|
// within the given screen
|
|
|
|
// image_XXX are the image offsets into the SDL screen
|
|
|
|
// screen_XXX are the dimensions of the SDL screen itself
|
|
|
|
// Also contains relevant info for the graphics mode/filter to use
|
|
|
|
// when rendering the image
|
|
|
|
struct VideoMode {
|
|
|
|
uInt32 image_x, image_y, image_w, image_h;
|
|
|
|
uInt32 screen_w, screen_h;
|
|
|
|
GraphicsMode gfxmode;
|
|
|
|
};
|
|
|
|
|
Added 'WINDOWED_SUPPORT' compile-time argument, which can be used for
those systems which don't actually have a windowing environment. When
this is set, toggling from fullscreen will not be possible, and certain
window-related UI functions will not be accessible.
Completely revamped video subsystem. Windowed and fullscreen modes are
now dealt with separately. Windows can be zoomed using the 'zoom_ui'
and 'zoom_tia' arguments. Fullscreen modes are now set by resolution,
not zoom, so you can specify to always use a certain fullscreen
resolution, and the images will be scaled appropriately. This also
fixes the fullscreen issues on widescreen monitors; just select a
widescreen video mode, and the aspect ratio will always be correct.
Removed dirty-rect support for software rendering of the TIA image,
as it ended up being slower than just updating the entire image.
For those resolutions where it will start to slow down (1024x768 or
higher), one should be using OpenGL.
Fixed issue in Windows when returning from fullscreen mode made the
window constantly 'shrink' in size. It was related to auto-detecting
the desktop resolution, which is really the job of SDL. As such, all
further releases of Stella will require SDL 1.2.10, which includes
this auto-detection code internally.
Made ROM launcher resizable, configurable in sizes from 320x240
to 800x600. Updated the UIDialog to change these quantities from the
UI (Stella will need to be restarted for it to take effect).
Removed aspect ratio support, since it was causing problems, and the
new fullscreen mode work has made it obsolete. i *may* consider it
again in the future, if there's sufficient demand.
Added 'fullres' commandline argument, used to set the fullscreen
resolution.
Added 'launcherres' commandline argument, used to set the ROM
launcher resolution. This replaces 'launchersize' argument, which
has been removed.
Changed 'scale_ui' and 'scale_tia' to 'zoom_ui' and 'zoom_tia',
respectively. Their function remains the same.
Changed meaning of 'gl_fsmax' argument to specify what modes to use
fullscreen OpenGL scaling (previously, this was a boolean, and
didn't consider different modes).
git-svn-id: svn://svn.code.sf.net/p/stella/code/trunk@1323 8b62c5a3-ac7e-4cc8-8f21-d9a121418aba
2007-06-20 16:33:23 +00:00
|
|
|
/**
|
|
|
|
This method is called to initialize the video subsystem
|
|
|
|
with the given video mode. Normally, it will also call setVidMode().
|
2008-06-19 12:01:31 +00:00
|
|
|
|
|
|
|
@param mode The video mode to use
|
|
|
|
|
|
|
|
@return False on any errors, else true
|
Added 'WINDOWED_SUPPORT' compile-time argument, which can be used for
those systems which don't actually have a windowing environment. When
this is set, toggling from fullscreen will not be possible, and certain
window-related UI functions will not be accessible.
Completely revamped video subsystem. Windowed and fullscreen modes are
now dealt with separately. Windows can be zoomed using the 'zoom_ui'
and 'zoom_tia' arguments. Fullscreen modes are now set by resolution,
not zoom, so you can specify to always use a certain fullscreen
resolution, and the images will be scaled appropriately. This also
fixes the fullscreen issues on widescreen monitors; just select a
widescreen video mode, and the aspect ratio will always be correct.
Removed dirty-rect support for software rendering of the TIA image,
as it ended up being slower than just updating the entire image.
For those resolutions where it will start to slow down (1024x768 or
higher), one should be using OpenGL.
Fixed issue in Windows when returning from fullscreen mode made the
window constantly 'shrink' in size. It was related to auto-detecting
the desktop resolution, which is really the job of SDL. As such, all
further releases of Stella will require SDL 1.2.10, which includes
this auto-detection code internally.
Made ROM launcher resizable, configurable in sizes from 320x240
to 800x600. Updated the UIDialog to change these quantities from the
UI (Stella will need to be restarted for it to take effect).
Removed aspect ratio support, since it was causing problems, and the
new fullscreen mode work has made it obsolete. i *may* consider it
again in the future, if there's sufficient demand.
Added 'fullres' commandline argument, used to set the fullscreen
resolution.
Added 'launcherres' commandline argument, used to set the ROM
launcher resolution. This replaces 'launchersize' argument, which
has been removed.
Changed 'scale_ui' and 'scale_tia' to 'zoom_ui' and 'zoom_tia',
respectively. Their function remains the same.
Changed meaning of 'gl_fsmax' argument to specify what modes to use
fullscreen OpenGL scaling (previously, this was a boolean, and
didn't consider different modes).
git-svn-id: svn://svn.code.sf.net/p/stella/code/trunk@1323 8b62c5a3-ac7e-4cc8-8f21-d9a121418aba
2007-06-20 16:33:23 +00:00
|
|
|
*/
|
2008-06-19 12:01:31 +00:00
|
|
|
virtual bool initSubsystem(VideoMode& mode) = 0;
|
Added 'WINDOWED_SUPPORT' compile-time argument, which can be used for
those systems which don't actually have a windowing environment. When
this is set, toggling from fullscreen will not be possible, and certain
window-related UI functions will not be accessible.
Completely revamped video subsystem. Windowed and fullscreen modes are
now dealt with separately. Windows can be zoomed using the 'zoom_ui'
and 'zoom_tia' arguments. Fullscreen modes are now set by resolution,
not zoom, so you can specify to always use a certain fullscreen
resolution, and the images will be scaled appropriately. This also
fixes the fullscreen issues on widescreen monitors; just select a
widescreen video mode, and the aspect ratio will always be correct.
Removed dirty-rect support for software rendering of the TIA image,
as it ended up being slower than just updating the entire image.
For those resolutions where it will start to slow down (1024x768 or
higher), one should be using OpenGL.
Fixed issue in Windows when returning from fullscreen mode made the
window constantly 'shrink' in size. It was related to auto-detecting
the desktop resolution, which is really the job of SDL. As such, all
further releases of Stella will require SDL 1.2.10, which includes
this auto-detection code internally.
Made ROM launcher resizable, configurable in sizes from 320x240
to 800x600. Updated the UIDialog to change these quantities from the
UI (Stella will need to be restarted for it to take effect).
Removed aspect ratio support, since it was causing problems, and the
new fullscreen mode work has made it obsolete. i *may* consider it
again in the future, if there's sufficient demand.
Added 'fullres' commandline argument, used to set the fullscreen
resolution.
Added 'launcherres' commandline argument, used to set the ROM
launcher resolution. This replaces 'launchersize' argument, which
has been removed.
Changed 'scale_ui' and 'scale_tia' to 'zoom_ui' and 'zoom_tia',
respectively. Their function remains the same.
Changed meaning of 'gl_fsmax' argument to specify what modes to use
fullscreen OpenGL scaling (previously, this was a boolean, and
didn't consider different modes).
git-svn-id: svn://svn.code.sf.net/p/stella/code/trunk@1323 8b62c5a3-ac7e-4cc8-8f21-d9a121418aba
2007-06-20 16:33:23 +00:00
|
|
|
|
|
|
|
/**
|
2008-06-19 12:01:31 +00:00
|
|
|
This method is called to change to the given video mode. If the mode
|
|
|
|
is successfully changed, 'mode' holds the actual dimensions used.
|
|
|
|
|
|
|
|
@param mode The video mode to use
|
Added 'WINDOWED_SUPPORT' compile-time argument, which can be used for
those systems which don't actually have a windowing environment. When
this is set, toggling from fullscreen will not be possible, and certain
window-related UI functions will not be accessible.
Completely revamped video subsystem. Windowed and fullscreen modes are
now dealt with separately. Windows can be zoomed using the 'zoom_ui'
and 'zoom_tia' arguments. Fullscreen modes are now set by resolution,
not zoom, so you can specify to always use a certain fullscreen
resolution, and the images will be scaled appropriately. This also
fixes the fullscreen issues on widescreen monitors; just select a
widescreen video mode, and the aspect ratio will always be correct.
Removed dirty-rect support for software rendering of the TIA image,
as it ended up being slower than just updating the entire image.
For those resolutions where it will start to slow down (1024x768 or
higher), one should be using OpenGL.
Fixed issue in Windows when returning from fullscreen mode made the
window constantly 'shrink' in size. It was related to auto-detecting
the desktop resolution, which is really the job of SDL. As such, all
further releases of Stella will require SDL 1.2.10, which includes
this auto-detection code internally.
Made ROM launcher resizable, configurable in sizes from 320x240
to 800x600. Updated the UIDialog to change these quantities from the
UI (Stella will need to be restarted for it to take effect).
Removed aspect ratio support, since it was causing problems, and the
new fullscreen mode work has made it obsolete. i *may* consider it
again in the future, if there's sufficient demand.
Added 'fullres' commandline argument, used to set the fullscreen
resolution.
Added 'launcherres' commandline argument, used to set the ROM
launcher resolution. This replaces 'launchersize' argument, which
has been removed.
Changed 'scale_ui' and 'scale_tia' to 'zoom_ui' and 'zoom_tia',
respectively. Their function remains the same.
Changed meaning of 'gl_fsmax' argument to specify what modes to use
fullscreen OpenGL scaling (previously, this was a boolean, and
didn't consider different modes).
git-svn-id: svn://svn.code.sf.net/p/stella/code/trunk@1323 8b62c5a3-ac7e-4cc8-8f21-d9a121418aba
2007-06-20 16:33:23 +00:00
|
|
|
|
2008-06-19 12:01:31 +00:00
|
|
|
@return False on any errors (in which case 'mode' is invalid), else true
|
Added 'WINDOWED_SUPPORT' compile-time argument, which can be used for
those systems which don't actually have a windowing environment. When
this is set, toggling from fullscreen will not be possible, and certain
window-related UI functions will not be accessible.
Completely revamped video subsystem. Windowed and fullscreen modes are
now dealt with separately. Windows can be zoomed using the 'zoom_ui'
and 'zoom_tia' arguments. Fullscreen modes are now set by resolution,
not zoom, so you can specify to always use a certain fullscreen
resolution, and the images will be scaled appropriately. This also
fixes the fullscreen issues on widescreen monitors; just select a
widescreen video mode, and the aspect ratio will always be correct.
Removed dirty-rect support for software rendering of the TIA image,
as it ended up being slower than just updating the entire image.
For those resolutions where it will start to slow down (1024x768 or
higher), one should be using OpenGL.
Fixed issue in Windows when returning from fullscreen mode made the
window constantly 'shrink' in size. It was related to auto-detecting
the desktop resolution, which is really the job of SDL. As such, all
further releases of Stella will require SDL 1.2.10, which includes
this auto-detection code internally.
Made ROM launcher resizable, configurable in sizes from 320x240
to 800x600. Updated the UIDialog to change these quantities from the
UI (Stella will need to be restarted for it to take effect).
Removed aspect ratio support, since it was causing problems, and the
new fullscreen mode work has made it obsolete. i *may* consider it
again in the future, if there's sufficient demand.
Added 'fullres' commandline argument, used to set the fullscreen
resolution.
Added 'launcherres' commandline argument, used to set the ROM
launcher resolution. This replaces 'launchersize' argument, which
has been removed.
Changed 'scale_ui' and 'scale_tia' to 'zoom_ui' and 'zoom_tia',
respectively. Their function remains the same.
Changed meaning of 'gl_fsmax' argument to specify what modes to use
fullscreen OpenGL scaling (previously, this was a boolean, and
didn't consider different modes).
git-svn-id: svn://svn.code.sf.net/p/stella/code/trunk@1323 8b62c5a3-ac7e-4cc8-8f21-d9a121418aba
2007-06-20 16:33:23 +00:00
|
|
|
*/
|
2008-06-19 12:01:31 +00:00
|
|
|
virtual bool setVidMode(VideoMode& mode) = 0;
|
Added 'WINDOWED_SUPPORT' compile-time argument, which can be used for
those systems which don't actually have a windowing environment. When
this is set, toggling from fullscreen will not be possible, and certain
window-related UI functions will not be accessible.
Completely revamped video subsystem. Windowed and fullscreen modes are
now dealt with separately. Windows can be zoomed using the 'zoom_ui'
and 'zoom_tia' arguments. Fullscreen modes are now set by resolution,
not zoom, so you can specify to always use a certain fullscreen
resolution, and the images will be scaled appropriately. This also
fixes the fullscreen issues on widescreen monitors; just select a
widescreen video mode, and the aspect ratio will always be correct.
Removed dirty-rect support for software rendering of the TIA image,
as it ended up being slower than just updating the entire image.
For those resolutions where it will start to slow down (1024x768 or
higher), one should be using OpenGL.
Fixed issue in Windows when returning from fullscreen mode made the
window constantly 'shrink' in size. It was related to auto-detecting
the desktop resolution, which is really the job of SDL. As such, all
further releases of Stella will require SDL 1.2.10, which includes
this auto-detection code internally.
Made ROM launcher resizable, configurable in sizes from 320x240
to 800x600. Updated the UIDialog to change these quantities from the
UI (Stella will need to be restarted for it to take effect).
Removed aspect ratio support, since it was causing problems, and the
new fullscreen mode work has made it obsolete. i *may* consider it
again in the future, if there's sufficient demand.
Added 'fullres' commandline argument, used to set the fullscreen
resolution.
Added 'launcherres' commandline argument, used to set the ROM
launcher resolution. This replaces 'launchersize' argument, which
has been removed.
Changed 'scale_ui' and 'scale_tia' to 'zoom_ui' and 'zoom_tia',
respectively. Their function remains the same.
Changed meaning of 'gl_fsmax' argument to specify what modes to use
fullscreen OpenGL scaling (previously, this was a boolean, and
didn't consider different modes).
git-svn-id: svn://svn.code.sf.net/p/stella/code/trunk@1323 8b62c5a3-ac7e-4cc8-8f21-d9a121418aba
2007-06-20 16:33:23 +00:00
|
|
|
|
2010-02-10 22:55:08 +00:00
|
|
|
/**
|
|
|
|
This method is called to invalidate the contents of the entire
|
|
|
|
framebuffer (ie, mark the current content as invalid, and erase it on
|
|
|
|
the next drawing pass).
|
|
|
|
*/
|
|
|
|
virtual void invalidate() = 0;
|
|
|
|
|
2008-12-12 15:51:07 +00:00
|
|
|
/**
|
|
|
|
This method is called to create a surface compatible with the one
|
|
|
|
currently in use, but having the given dimensions.
|
|
|
|
|
|
|
|
@param w The requested width of the new surface.
|
|
|
|
@param h The requested height of the new surface.
|
|
|
|
@param useBase Use the base surface instead of creating a new one
|
|
|
|
*/
|
|
|
|
virtual FBSurface* createSurface(int w, int h, bool useBase = false) const = 0;
|
|
|
|
|
Added 'WINDOWED_SUPPORT' compile-time argument, which can be used for
those systems which don't actually have a windowing environment. When
this is set, toggling from fullscreen will not be possible, and certain
window-related UI functions will not be accessible.
Completely revamped video subsystem. Windowed and fullscreen modes are
now dealt with separately. Windows can be zoomed using the 'zoom_ui'
and 'zoom_tia' arguments. Fullscreen modes are now set by resolution,
not zoom, so you can specify to always use a certain fullscreen
resolution, and the images will be scaled appropriately. This also
fixes the fullscreen issues on widescreen monitors; just select a
widescreen video mode, and the aspect ratio will always be correct.
Removed dirty-rect support for software rendering of the TIA image,
as it ended up being slower than just updating the entire image.
For those resolutions where it will start to slow down (1024x768 or
higher), one should be using OpenGL.
Fixed issue in Windows when returning from fullscreen mode made the
window constantly 'shrink' in size. It was related to auto-detecting
the desktop resolution, which is really the job of SDL. As such, all
further releases of Stella will require SDL 1.2.10, which includes
this auto-detection code internally.
Made ROM launcher resizable, configurable in sizes from 320x240
to 800x600. Updated the UIDialog to change these quantities from the
UI (Stella will need to be restarted for it to take effect).
Removed aspect ratio support, since it was causing problems, and the
new fullscreen mode work has made it obsolete. i *may* consider it
again in the future, if there's sufficient demand.
Added 'fullres' commandline argument, used to set the fullscreen
resolution.
Added 'launcherres' commandline argument, used to set the ROM
launcher resolution. This replaces 'launchersize' argument, which
has been removed.
Changed 'scale_ui' and 'scale_tia' to 'zoom_ui' and 'zoom_tia',
respectively. Their function remains the same.
Changed meaning of 'gl_fsmax' argument to specify what modes to use
fullscreen OpenGL scaling (previously, this was a boolean, and
didn't consider different modes).
git-svn-id: svn://svn.code.sf.net/p/stella/code/trunk@1323 8b62c5a3-ac7e-4cc8-8f21-d9a121418aba
2007-06-20 16:33:23 +00:00
|
|
|
/**
|
2009-01-19 16:52:32 +00:00
|
|
|
This method should be called anytime the TIA needs to be redrawn
|
2008-12-27 23:27:32 +00:00
|
|
|
to the screen (full indicating that a full redraw is required).
|
Added 'WINDOWED_SUPPORT' compile-time argument, which can be used for
those systems which don't actually have a windowing environment. When
this is set, toggling from fullscreen will not be possible, and certain
window-related UI functions will not be accessible.
Completely revamped video subsystem. Windowed and fullscreen modes are
now dealt with separately. Windows can be zoomed using the 'zoom_ui'
and 'zoom_tia' arguments. Fullscreen modes are now set by resolution,
not zoom, so you can specify to always use a certain fullscreen
resolution, and the images will be scaled appropriately. This also
fixes the fullscreen issues on widescreen monitors; just select a
widescreen video mode, and the aspect ratio will always be correct.
Removed dirty-rect support for software rendering of the TIA image,
as it ended up being slower than just updating the entire image.
For those resolutions where it will start to slow down (1024x768 or
higher), one should be using OpenGL.
Fixed issue in Windows when returning from fullscreen mode made the
window constantly 'shrink' in size. It was related to auto-detecting
the desktop resolution, which is really the job of SDL. As such, all
further releases of Stella will require SDL 1.2.10, which includes
this auto-detection code internally.
Made ROM launcher resizable, configurable in sizes from 320x240
to 800x600. Updated the UIDialog to change these quantities from the
UI (Stella will need to be restarted for it to take effect).
Removed aspect ratio support, since it was causing problems, and the
new fullscreen mode work has made it obsolete. i *may* consider it
again in the future, if there's sufficient demand.
Added 'fullres' commandline argument, used to set the fullscreen
resolution.
Added 'launcherres' commandline argument, used to set the ROM
launcher resolution. This replaces 'launchersize' argument, which
has been removed.
Changed 'scale_ui' and 'scale_tia' to 'zoom_ui' and 'zoom_tia',
respectively. Their function remains the same.
Changed meaning of 'gl_fsmax' argument to specify what modes to use
fullscreen OpenGL scaling (previously, this was a boolean, and
didn't consider different modes).
git-svn-id: svn://svn.code.sf.net/p/stella/code/trunk@1323 8b62c5a3-ac7e-4cc8-8f21-d9a121418aba
2007-06-20 16:33:23 +00:00
|
|
|
*/
|
2009-01-19 16:52:32 +00:00
|
|
|
virtual void drawTIA(bool full) = 0;
|
Added 'WINDOWED_SUPPORT' compile-time argument, which can be used for
those systems which don't actually have a windowing environment. When
this is set, toggling from fullscreen will not be possible, and certain
window-related UI functions will not be accessible.
Completely revamped video subsystem. Windowed and fullscreen modes are
now dealt with separately. Windows can be zoomed using the 'zoom_ui'
and 'zoom_tia' arguments. Fullscreen modes are now set by resolution,
not zoom, so you can specify to always use a certain fullscreen
resolution, and the images will be scaled appropriately. This also
fixes the fullscreen issues on widescreen monitors; just select a
widescreen video mode, and the aspect ratio will always be correct.
Removed dirty-rect support for software rendering of the TIA image,
as it ended up being slower than just updating the entire image.
For those resolutions where it will start to slow down (1024x768 or
higher), one should be using OpenGL.
Fixed issue in Windows when returning from fullscreen mode made the
window constantly 'shrink' in size. It was related to auto-detecting
the desktop resolution, which is really the job of SDL. As such, all
further releases of Stella will require SDL 1.2.10, which includes
this auto-detection code internally.
Made ROM launcher resizable, configurable in sizes from 320x240
to 800x600. Updated the UIDialog to change these quantities from the
UI (Stella will need to be restarted for it to take effect).
Removed aspect ratio support, since it was causing problems, and the
new fullscreen mode work has made it obsolete. i *may* consider it
again in the future, if there's sufficient demand.
Added 'fullres' commandline argument, used to set the fullscreen
resolution.
Added 'launcherres' commandline argument, used to set the ROM
launcher resolution. This replaces 'launchersize' argument, which
has been removed.
Changed 'scale_ui' and 'scale_tia' to 'zoom_ui' and 'zoom_tia',
respectively. Their function remains the same.
Changed meaning of 'gl_fsmax' argument to specify what modes to use
fullscreen OpenGL scaling (previously, this was a boolean, and
didn't consider different modes).
git-svn-id: svn://svn.code.sf.net/p/stella/code/trunk@1323 8b62c5a3-ac7e-4cc8-8f21-d9a121418aba
2007-06-20 16:33:23 +00:00
|
|
|
|
2008-08-04 11:56:12 +00:00
|
|
|
/**
|
|
|
|
This method is called after any drawing is done (per-frame).
|
|
|
|
*/
|
2008-12-27 23:27:32 +00:00
|
|
|
virtual void postFrameUpdate() = 0;
|
2008-08-04 11:56:12 +00:00
|
|
|
|
Added 'WINDOWED_SUPPORT' compile-time argument, which can be used for
those systems which don't actually have a windowing environment. When
this is set, toggling from fullscreen will not be possible, and certain
window-related UI functions will not be accessible.
Completely revamped video subsystem. Windowed and fullscreen modes are
now dealt with separately. Windows can be zoomed using the 'zoom_ui'
and 'zoom_tia' arguments. Fullscreen modes are now set by resolution,
not zoom, so you can specify to always use a certain fullscreen
resolution, and the images will be scaled appropriately. This also
fixes the fullscreen issues on widescreen monitors; just select a
widescreen video mode, and the aspect ratio will always be correct.
Removed dirty-rect support for software rendering of the TIA image,
as it ended up being slower than just updating the entire image.
For those resolutions where it will start to slow down (1024x768 or
higher), one should be using OpenGL.
Fixed issue in Windows when returning from fullscreen mode made the
window constantly 'shrink' in size. It was related to auto-detecting
the desktop resolution, which is really the job of SDL. As such, all
further releases of Stella will require SDL 1.2.10, which includes
this auto-detection code internally.
Made ROM launcher resizable, configurable in sizes from 320x240
to 800x600. Updated the UIDialog to change these quantities from the
UI (Stella will need to be restarted for it to take effect).
Removed aspect ratio support, since it was causing problems, and the
new fullscreen mode work has made it obsolete. i *may* consider it
again in the future, if there's sufficient demand.
Added 'fullres' commandline argument, used to set the fullscreen
resolution.
Added 'launcherres' commandline argument, used to set the ROM
launcher resolution. This replaces 'launchersize' argument, which
has been removed.
Changed 'scale_ui' and 'scale_tia' to 'zoom_ui' and 'zoom_tia',
respectively. Their function remains the same.
Changed meaning of 'gl_fsmax' argument to specify what modes to use
fullscreen OpenGL scaling (previously, this was a boolean, and
didn't consider different modes).
git-svn-id: svn://svn.code.sf.net/p/stella/code/trunk@1323 8b62c5a3-ac7e-4cc8-8f21-d9a121418aba
2007-06-20 16:33:23 +00:00
|
|
|
/**
|
|
|
|
This method is called to provide information about the FrameBuffer.
|
|
|
|
*/
|
2007-09-03 18:37:24 +00:00
|
|
|
virtual string about() const = 0;
|
Added 'WINDOWED_SUPPORT' compile-time argument, which can be used for
those systems which don't actually have a windowing environment. When
this is set, toggling from fullscreen will not be possible, and certain
window-related UI functions will not be accessible.
Completely revamped video subsystem. Windowed and fullscreen modes are
now dealt with separately. Windows can be zoomed using the 'zoom_ui'
and 'zoom_tia' arguments. Fullscreen modes are now set by resolution,
not zoom, so you can specify to always use a certain fullscreen
resolution, and the images will be scaled appropriately. This also
fixes the fullscreen issues on widescreen monitors; just select a
widescreen video mode, and the aspect ratio will always be correct.
Removed dirty-rect support for software rendering of the TIA image,
as it ended up being slower than just updating the entire image.
For those resolutions where it will start to slow down (1024x768 or
higher), one should be using OpenGL.
Fixed issue in Windows when returning from fullscreen mode made the
window constantly 'shrink' in size. It was related to auto-detecting
the desktop resolution, which is really the job of SDL. As such, all
further releases of Stella will require SDL 1.2.10, which includes
this auto-detection code internally.
Made ROM launcher resizable, configurable in sizes from 320x240
to 800x600. Updated the UIDialog to change these quantities from the
UI (Stella will need to be restarted for it to take effect).
Removed aspect ratio support, since it was causing problems, and the
new fullscreen mode work has made it obsolete. i *may* consider it
again in the future, if there's sufficient demand.
Added 'fullres' commandline argument, used to set the fullscreen
resolution.
Added 'launcherres' commandline argument, used to set the ROM
launcher resolution. This replaces 'launchersize' argument, which
has been removed.
Changed 'scale_ui' and 'scale_tia' to 'zoom_ui' and 'zoom_tia',
respectively. Their function remains the same.
Changed meaning of 'gl_fsmax' argument to specify what modes to use
fullscreen OpenGL scaling (previously, this was a boolean, and
didn't consider different modes).
git-svn-id: svn://svn.code.sf.net/p/stella/code/trunk@1323 8b62c5a3-ac7e-4cc8-8f21-d9a121418aba
2007-06-20 16:33:23 +00:00
|
|
|
|
2008-12-12 15:51:07 +00:00
|
|
|
/**
|
2008-12-20 23:32:46 +00:00
|
|
|
Issues a 'free' and 'reload' instruction to all surfaces that the
|
2008-12-12 15:51:07 +00:00
|
|
|
framebuffer knows about.
|
|
|
|
*/
|
2008-12-20 23:32:46 +00:00
|
|
|
void resetSurfaces();
|
2008-12-12 15:51:07 +00:00
|
|
|
|
2003-10-17 18:02:16 +00:00
|
|
|
protected:
|
2005-02-21 02:23:57 +00:00
|
|
|
// The parent system for the framebuffer
|
|
|
|
OSystem* myOSystem;
|
2003-10-26 19:40:39 +00:00
|
|
|
|
2008-06-13 13:14:52 +00:00
|
|
|
// The SDL video buffer
|
|
|
|
SDL_Surface* myScreen;
|
|
|
|
|
|
|
|
// SDL initialization flags
|
2009-06-05 14:05:23 +00:00
|
|
|
// This is set by the base FrameBuffer class, and read by the derived classes
|
|
|
|
// If a FrameBuffer is successfully created, the derived classes must modify
|
|
|
|
// it to point to the actual flags used by the SDL_Surface
|
2008-06-13 13:14:52 +00:00
|
|
|
uInt32 mySDLFlags;
|
|
|
|
|
2008-08-04 11:56:12 +00:00
|
|
|
// Indicates if the entire frame need to redrawn
|
|
|
|
bool myRedrawEntireFrame;
|
2008-06-13 13:14:52 +00:00
|
|
|
|
|
|
|
// Use phosphor effect (aka no flicker on 30Hz screens)
|
|
|
|
bool myUsePhosphor;
|
|
|
|
|
|
|
|
// Amount to blend when using phosphor effect
|
|
|
|
int myPhosphorBlend;
|
|
|
|
|
2006-03-24 19:59:52 +00:00
|
|
|
// TIA palettes for normal and phosphor modes
|
2009-01-03 22:57:12 +00:00
|
|
|
// 'myDefPalette' also contains the UI palette
|
2009-02-06 23:53:34 +00:00
|
|
|
// The '24' version of myDefPalette is used in 24-bit colour mode,
|
2009-02-07 21:50:05 +00:00
|
|
|
// eliminating having to deal with endian and shift issues
|
|
|
|
// Phosphor mode doesn't have a corresponding '24' mode, since it
|
|
|
|
// would require a 192KB lookup table
|
2009-01-03 22:57:12 +00:00
|
|
|
Uint32 myDefPalette[256+kNumColors];
|
2006-03-25 00:34:17 +00:00
|
|
|
Uint32 myAvgPalette[256][256];
|
2009-02-06 23:53:34 +00:00
|
|
|
Uint8 myDefPalette24[256+kNumColors][3];
|
2006-01-10 02:09:34 +00:00
|
|
|
|
Reworked 'fullres' argument to also accept the 'auto' option. In this case,
fullscreen resolutions will be automatically chosen based on the required
size for the window. The image will be centered and keep the same aspect
ratio, however, so operation will still work correctly on widescreen
monitors. 'Auto' will be the new default. Otherwise, if a specific
resolution is requested, Stella will try to accomodate it *only* if it fits
into the resolution; otherwise the smallest resolution that fits will be
used.
Removed 'zoom_ui' and 'zoom_tia'. The UI can now only be at 1x mode.
Aded 'tia_filter' commandline argument, which specifies to the filter
to use when rendering the tia image. For now, these accept 'zoom1x',
'zoom2x'..., up to 'zoom10x', and duplicate previous behaviour. Eventually,
Scalexx and HQxx filters may be added. Still TODO is add this to the UI.
First pass at making the standard build use a minimum of zoom2x for the TIA,
so the UI can be larger and use a better looking font. There's still work
to do in this area, especially for those ports with limited hardware that
support zoom1x only.
git-svn-id: svn://svn.code.sf.net/p/stella/code/trunk@1544 8b62c5a3-ac7e-4cc8-8f21-d9a121418aba
2008-07-22 14:54:39 +00:00
|
|
|
// Names of the TIA filters that can be used for this framebuffer
|
2008-07-25 12:41:41 +00:00
|
|
|
StringMap myTIAFilters;
|
Reworked 'fullres' argument to also accept the 'auto' option. In this case,
fullscreen resolutions will be automatically chosen based on the required
size for the window. The image will be centered and keep the same aspect
ratio, however, so operation will still work correctly on widescreen
monitors. 'Auto' will be the new default. Otherwise, if a specific
resolution is requested, Stella will try to accomodate it *only* if it fits
into the resolution; otherwise the smallest resolution that fits will be
used.
Removed 'zoom_ui' and 'zoom_tia'. The UI can now only be at 1x mode.
Aded 'tia_filter' commandline argument, which specifies to the filter
to use when rendering the tia image. For now, these accept 'zoom1x',
'zoom2x'..., up to 'zoom10x', and duplicate previous behaviour. Eventually,
Scalexx and HQxx filters may be added. Still TODO is add this to the UI.
First pass at making the standard build use a minimum of zoom2x for the TIA,
so the UI can be larger and use a better looking font. There's still work
to do in this area, especially for those ports with limited hardware that
support zoom1x only.
git-svn-id: svn://svn.code.sf.net/p/stella/code/trunk@1544 8b62c5a3-ac7e-4cc8-8f21-d9a121418aba
2008-07-22 14:54:39 +00:00
|
|
|
|
2009-05-25 17:51:52 +00:00
|
|
|
// Holds the zoom level being used
|
|
|
|
uInt32 myZoomLevel;
|
|
|
|
|
2003-10-26 19:40:39 +00:00
|
|
|
private:
|
2005-02-22 18:41:16 +00:00
|
|
|
/**
|
|
|
|
Set the icon for the main SDL window.
|
|
|
|
*/
|
|
|
|
void setWindowIcon();
|
|
|
|
|
2005-08-29 18:36:42 +00:00
|
|
|
/**
|
2008-05-20 13:42:50 +00:00
|
|
|
Draw pending messages.
|
2005-08-29 18:36:42 +00:00
|
|
|
*/
|
|
|
|
void drawMessage();
|
|
|
|
|
2006-01-10 02:09:34 +00:00
|
|
|
/**
|
|
|
|
Used to calculate an averaged color for the 'phosphor' effect.
|
|
|
|
|
|
|
|
@param c1 Color 1
|
|
|
|
@param c2 Color 2
|
|
|
|
|
|
|
|
@return Averaged value of the two colors
|
|
|
|
*/
|
|
|
|
uInt8 getPhosphor(uInt8 c1, uInt8 c2);
|
|
|
|
|
Added preliminary framework for using advanced scalers. Right now,
functionality is exactly the same as before; Alt-Equals goes to the
next valid scaler, and Alt-Minus goes to the previous one.
What were previously zoomed modes are now treated as scalers, named
'Zoom1x', 'Zoom2x', etc. Various scalexx and hqxx modes will also be made
available.
For now, and probably forever, these advanced scaling modes will only
be available for OpenGL, since if you don't have a card that can handle
GL well, the scalers will probably be too much anyway. Also, the advanced
scaling will not be available in UI mode, only OpenGL emulation mode.
The UI (Launcher, Debugger) and emulation modes are now scaled separately,
specified with the new settings 'scale_ui' and 'scale_tia'. The 'zoom'
setting has been removed.
git-svn-id: svn://svn.code.sf.net/p/stella/code/trunk@1133 8b62c5a3-ac7e-4cc8-8f21-d9a121418aba
2006-10-14 20:08:29 +00:00
|
|
|
/**
|
Added 'WINDOWED_SUPPORT' compile-time argument, which can be used for
those systems which don't actually have a windowing environment. When
this is set, toggling from fullscreen will not be possible, and certain
window-related UI functions will not be accessible.
Completely revamped video subsystem. Windowed and fullscreen modes are
now dealt with separately. Windows can be zoomed using the 'zoom_ui'
and 'zoom_tia' arguments. Fullscreen modes are now set by resolution,
not zoom, so you can specify to always use a certain fullscreen
resolution, and the images will be scaled appropriately. This also
fixes the fullscreen issues on widescreen monitors; just select a
widescreen video mode, and the aspect ratio will always be correct.
Removed dirty-rect support for software rendering of the TIA image,
as it ended up being slower than just updating the entire image.
For those resolutions where it will start to slow down (1024x768 or
higher), one should be using OpenGL.
Fixed issue in Windows when returning from fullscreen mode made the
window constantly 'shrink' in size. It was related to auto-detecting
the desktop resolution, which is really the job of SDL. As such, all
further releases of Stella will require SDL 1.2.10, which includes
this auto-detection code internally.
Made ROM launcher resizable, configurable in sizes from 320x240
to 800x600. Updated the UIDialog to change these quantities from the
UI (Stella will need to be restarted for it to take effect).
Removed aspect ratio support, since it was causing problems, and the
new fullscreen mode work has made it obsolete. i *may* consider it
again in the future, if there's sufficient demand.
Added 'fullres' commandline argument, used to set the fullscreen
resolution.
Added 'launcherres' commandline argument, used to set the ROM
launcher resolution. This replaces 'launchersize' argument, which
has been removed.
Changed 'scale_ui' and 'scale_tia' to 'zoom_ui' and 'zoom_tia',
respectively. Their function remains the same.
Changed meaning of 'gl_fsmax' argument to specify what modes to use
fullscreen OpenGL scaling (previously, this was a boolean, and
didn't consider different modes).
git-svn-id: svn://svn.code.sf.net/p/stella/code/trunk@1323 8b62c5a3-ac7e-4cc8-8f21-d9a121418aba
2007-06-20 16:33:23 +00:00
|
|
|
Calculate the maximum level by which the base window can be zoomed and
|
|
|
|
still fit in the given screen dimensions.
|
Added preliminary framework for using advanced scalers. Right now,
functionality is exactly the same as before; Alt-Equals goes to the
next valid scaler, and Alt-Minus goes to the previous one.
What were previously zoomed modes are now treated as scalers, named
'Zoom1x', 'Zoom2x', etc. Various scalexx and hqxx modes will also be made
available.
For now, and probably forever, these advanced scaling modes will only
be available for OpenGL, since if you don't have a card that can handle
GL well, the scalers will probably be too much anyway. Also, the advanced
scaling will not be available in UI mode, only OpenGL emulation mode.
The UI (Launcher, Debugger) and emulation modes are now scaled separately,
specified with the new settings 'scale_ui' and 'scale_tia'. The 'zoom'
setting has been removed.
git-svn-id: svn://svn.code.sf.net/p/stella/code/trunk@1133 8b62c5a3-ac7e-4cc8-8f21-d9a121418aba
2006-10-14 20:08:29 +00:00
|
|
|
*/
|
2008-06-19 12:01:31 +00:00
|
|
|
uInt32 maxWindowSizeForScreen(uInt32 baseWidth, uInt32 baseHeight,
|
|
|
|
uInt32 screenWidth, uInt32 screenHeight);
|
Added preliminary framework for using advanced scalers. Right now,
functionality is exactly the same as before; Alt-Equals goes to the
next valid scaler, and Alt-Minus goes to the previous one.
What were previously zoomed modes are now treated as scalers, named
'Zoom1x', 'Zoom2x', etc. Various scalexx and hqxx modes will also be made
available.
For now, and probably forever, these advanced scaling modes will only
be available for OpenGL, since if you don't have a card that can handle
GL well, the scalers will probably be too much anyway. Also, the advanced
scaling will not be available in UI mode, only OpenGL emulation mode.
The UI (Launcher, Debugger) and emulation modes are now scaled separately,
specified with the new settings 'scale_ui' and 'scale_tia'. The 'zoom'
setting has been removed.
git-svn-id: svn://svn.code.sf.net/p/stella/code/trunk@1133 8b62c5a3-ac7e-4cc8-8f21-d9a121418aba
2006-10-14 20:08:29 +00:00
|
|
|
|
|
|
|
/**
|
Added 'WINDOWED_SUPPORT' compile-time argument, which can be used for
those systems which don't actually have a windowing environment. When
this is set, toggling from fullscreen will not be possible, and certain
window-related UI functions will not be accessible.
Completely revamped video subsystem. Windowed and fullscreen modes are
now dealt with separately. Windows can be zoomed using the 'zoom_ui'
and 'zoom_tia' arguments. Fullscreen modes are now set by resolution,
not zoom, so you can specify to always use a certain fullscreen
resolution, and the images will be scaled appropriately. This also
fixes the fullscreen issues on widescreen monitors; just select a
widescreen video mode, and the aspect ratio will always be correct.
Removed dirty-rect support for software rendering of the TIA image,
as it ended up being slower than just updating the entire image.
For those resolutions where it will start to slow down (1024x768 or
higher), one should be using OpenGL.
Fixed issue in Windows when returning from fullscreen mode made the
window constantly 'shrink' in size. It was related to auto-detecting
the desktop resolution, which is really the job of SDL. As such, all
further releases of Stella will require SDL 1.2.10, which includes
this auto-detection code internally.
Made ROM launcher resizable, configurable in sizes from 320x240
to 800x600. Updated the UIDialog to change these quantities from the
UI (Stella will need to be restarted for it to take effect).
Removed aspect ratio support, since it was causing problems, and the
new fullscreen mode work has made it obsolete. i *may* consider it
again in the future, if there's sufficient demand.
Added 'fullres' commandline argument, used to set the fullscreen
resolution.
Added 'launcherres' commandline argument, used to set the ROM
launcher resolution. This replaces 'launchersize' argument, which
has been removed.
Changed 'scale_ui' and 'scale_tia' to 'zoom_ui' and 'zoom_tia',
respectively. Their function remains the same.
Changed meaning of 'gl_fsmax' argument to specify what modes to use
fullscreen OpenGL scaling (previously, this was a boolean, and
didn't consider different modes).
git-svn-id: svn://svn.code.sf.net/p/stella/code/trunk@1323 8b62c5a3-ac7e-4cc8-8f21-d9a121418aba
2007-06-20 16:33:23 +00:00
|
|
|
Set all possible video modes (both windowed and fullscreen) available for
|
2008-06-19 12:01:31 +00:00
|
|
|
this framebuffer based on given image dimensions and maximum window size.
|
Added preliminary framework for using advanced scalers. Right now,
functionality is exactly the same as before; Alt-Equals goes to the
next valid scaler, and Alt-Minus goes to the previous one.
What were previously zoomed modes are now treated as scalers, named
'Zoom1x', 'Zoom2x', etc. Various scalexx and hqxx modes will also be made
available.
For now, and probably forever, these advanced scaling modes will only
be available for OpenGL, since if you don't have a card that can handle
GL well, the scalers will probably be too much anyway. Also, the advanced
scaling will not be available in UI mode, only OpenGL emulation mode.
The UI (Launcher, Debugger) and emulation modes are now scaled separately,
specified with the new settings 'scale_ui' and 'scale_tia'. The 'zoom'
setting has been removed.
git-svn-id: svn://svn.code.sf.net/p/stella/code/trunk@1133 8b62c5a3-ac7e-4cc8-8f21-d9a121418aba
2006-10-14 20:08:29 +00:00
|
|
|
*/
|
2008-06-19 12:01:31 +00:00
|
|
|
void setAvailableVidModes(uInt32 basewidth, uInt32 baseheight);
|
Added preliminary framework for using advanced scalers. Right now,
functionality is exactly the same as before; Alt-Equals goes to the
next valid scaler, and Alt-Minus goes to the previous one.
What were previously zoomed modes are now treated as scalers, named
'Zoom1x', 'Zoom2x', etc. Various scalexx and hqxx modes will also be made
available.
For now, and probably forever, these advanced scaling modes will only
be available for OpenGL, since if you don't have a card that can handle
GL well, the scalers will probably be too much anyway. Also, the advanced
scaling will not be available in UI mode, only OpenGL emulation mode.
The UI (Launcher, Debugger) and emulation modes are now scaled separately,
specified with the new settings 'scale_ui' and 'scale_tia'. The 'zoom'
setting has been removed.
git-svn-id: svn://svn.code.sf.net/p/stella/code/trunk@1133 8b62c5a3-ac7e-4cc8-8f21-d9a121418aba
2006-10-14 20:08:29 +00:00
|
|
|
|
Reworked 'fullres' argument to also accept the 'auto' option. In this case,
fullscreen resolutions will be automatically chosen based on the required
size for the window. The image will be centered and keep the same aspect
ratio, however, so operation will still work correctly on widescreen
monitors. 'Auto' will be the new default. Otherwise, if a specific
resolution is requested, Stella will try to accomodate it *only* if it fits
into the resolution; otherwise the smallest resolution that fits will be
used.
Removed 'zoom_ui' and 'zoom_tia'. The UI can now only be at 1x mode.
Aded 'tia_filter' commandline argument, which specifies to the filter
to use when rendering the tia image. For now, these accept 'zoom1x',
'zoom2x'..., up to 'zoom10x', and duplicate previous behaviour. Eventually,
Scalexx and HQxx filters may be added. Still TODO is add this to the UI.
First pass at making the standard build use a minimum of zoom2x for the TIA,
so the UI can be larger and use a better looking font. There's still work
to do in this area, especially for those ports with limited hardware that
support zoom1x only.
git-svn-id: svn://svn.code.sf.net/p/stella/code/trunk@1544 8b62c5a3-ac7e-4cc8-8f21-d9a121418aba
2008-07-22 14:54:39 +00:00
|
|
|
/**
|
|
|
|
Adds the given video mode to both windowed and fullscreen lists.
|
|
|
|
In the case of fullscreen, we make sure a valid resolution exists.
|
|
|
|
*/
|
|
|
|
void addVidMode(VideoMode& mode);
|
|
|
|
|
Added preliminary framework for using advanced scalers. Right now,
functionality is exactly the same as before; Alt-Equals goes to the
next valid scaler, and Alt-Minus goes to the previous one.
What were previously zoomed modes are now treated as scalers, named
'Zoom1x', 'Zoom2x', etc. Various scalexx and hqxx modes will also be made
available.
For now, and probably forever, these advanced scaling modes will only
be available for OpenGL, since if you don't have a card that can handle
GL well, the scalers will probably be too much anyway. Also, the advanced
scaling will not be available in UI mode, only OpenGL emulation mode.
The UI (Launcher, Debugger) and emulation modes are now scaled separately,
specified with the new settings 'scale_ui' and 'scale_tia'. The 'zoom'
setting has been removed.
git-svn-id: svn://svn.code.sf.net/p/stella/code/trunk@1133 8b62c5a3-ac7e-4cc8-8f21-d9a121418aba
2006-10-14 20:08:29 +00:00
|
|
|
/**
|
Added 'WINDOWED_SUPPORT' compile-time argument, which can be used for
those systems which don't actually have a windowing environment. When
this is set, toggling from fullscreen will not be possible, and certain
window-related UI functions will not be accessible.
Completely revamped video subsystem. Windowed and fullscreen modes are
now dealt with separately. Windows can be zoomed using the 'zoom_ui'
and 'zoom_tia' arguments. Fullscreen modes are now set by resolution,
not zoom, so you can specify to always use a certain fullscreen
resolution, and the images will be scaled appropriately. This also
fixes the fullscreen issues on widescreen monitors; just select a
widescreen video mode, and the aspect ratio will always be correct.
Removed dirty-rect support for software rendering of the TIA image,
as it ended up being slower than just updating the entire image.
For those resolutions where it will start to slow down (1024x768 or
higher), one should be using OpenGL.
Fixed issue in Windows when returning from fullscreen mode made the
window constantly 'shrink' in size. It was related to auto-detecting
the desktop resolution, which is really the job of SDL. As such, all
further releases of Stella will require SDL 1.2.10, which includes
this auto-detection code internally.
Made ROM launcher resizable, configurable in sizes from 320x240
to 800x600. Updated the UIDialog to change these quantities from the
UI (Stella will need to be restarted for it to take effect).
Removed aspect ratio support, since it was causing problems, and the
new fullscreen mode work has made it obsolete. i *may* consider it
again in the future, if there's sufficient demand.
Added 'fullres' commandline argument, used to set the fullscreen
resolution.
Added 'launcherres' commandline argument, used to set the ROM
launcher resolution. This replaces 'launchersize' argument, which
has been removed.
Changed 'scale_ui' and 'scale_tia' to 'zoom_ui' and 'zoom_tia',
respectively. Their function remains the same.
Changed meaning of 'gl_fsmax' argument to specify what modes to use
fullscreen OpenGL scaling (previously, this was a boolean, and
didn't consider different modes).
git-svn-id: svn://svn.code.sf.net/p/stella/code/trunk@1323 8b62c5a3-ac7e-4cc8-8f21-d9a121418aba
2007-06-20 16:33:23 +00:00
|
|
|
Returns an appropriate video mode based on the current eventhandler
|
|
|
|
state, taking into account the maximum size of the window.
|
Added preliminary framework for using advanced scalers. Right now,
functionality is exactly the same as before; Alt-Equals goes to the
next valid scaler, and Alt-Minus goes to the previous one.
What were previously zoomed modes are now treated as scalers, named
'Zoom1x', 'Zoom2x', etc. Various scalexx and hqxx modes will also be made
available.
For now, and probably forever, these advanced scaling modes will only
be available for OpenGL, since if you don't have a card that can handle
GL well, the scalers will probably be too much anyway. Also, the advanced
scaling will not be available in UI mode, only OpenGL emulation mode.
The UI (Launcher, Debugger) and emulation modes are now scaled separately,
specified with the new settings 'scale_ui' and 'scale_tia'. The 'zoom'
setting has been removed.
git-svn-id: svn://svn.code.sf.net/p/stella/code/trunk@1133 8b62c5a3-ac7e-4cc8-8f21-d9a121418aba
2006-10-14 20:08:29 +00:00
|
|
|
|
Added 'WINDOWED_SUPPORT' compile-time argument, which can be used for
those systems which don't actually have a windowing environment. When
this is set, toggling from fullscreen will not be possible, and certain
window-related UI functions will not be accessible.
Completely revamped video subsystem. Windowed and fullscreen modes are
now dealt with separately. Windows can be zoomed using the 'zoom_ui'
and 'zoom_tia' arguments. Fullscreen modes are now set by resolution,
not zoom, so you can specify to always use a certain fullscreen
resolution, and the images will be scaled appropriately. This also
fixes the fullscreen issues on widescreen monitors; just select a
widescreen video mode, and the aspect ratio will always be correct.
Removed dirty-rect support for software rendering of the TIA image,
as it ended up being slower than just updating the entire image.
For those resolutions where it will start to slow down (1024x768 or
higher), one should be using OpenGL.
Fixed issue in Windows when returning from fullscreen mode made the
window constantly 'shrink' in size. It was related to auto-detecting
the desktop resolution, which is really the job of SDL. As such, all
further releases of Stella will require SDL 1.2.10, which includes
this auto-detection code internally.
Made ROM launcher resizable, configurable in sizes from 320x240
to 800x600. Updated the UIDialog to change these quantities from the
UI (Stella will need to be restarted for it to take effect).
Removed aspect ratio support, since it was causing problems, and the
new fullscreen mode work has made it obsolete. i *may* consider it
again in the future, if there's sufficient demand.
Added 'fullres' commandline argument, used to set the fullscreen
resolution.
Added 'launcherres' commandline argument, used to set the ROM
launcher resolution. This replaces 'launchersize' argument, which
has been removed.
Changed 'scale_ui' and 'scale_tia' to 'zoom_ui' and 'zoom_tia',
respectively. Their function remains the same.
Changed meaning of 'gl_fsmax' argument to specify what modes to use
fullscreen OpenGL scaling (previously, this was a boolean, and
didn't consider different modes).
git-svn-id: svn://svn.code.sf.net/p/stella/code/trunk@1323 8b62c5a3-ac7e-4cc8-8f21-d9a121418aba
2007-06-20 16:33:23 +00:00
|
|
|
@return A valid VideoMode for this framebuffer
|
Added preliminary framework for using advanced scalers. Right now,
functionality is exactly the same as before; Alt-Equals goes to the
next valid scaler, and Alt-Minus goes to the previous one.
What were previously zoomed modes are now treated as scalers, named
'Zoom1x', 'Zoom2x', etc. Various scalexx and hqxx modes will also be made
available.
For now, and probably forever, these advanced scaling modes will only
be available for OpenGL, since if you don't have a card that can handle
GL well, the scalers will probably be too much anyway. Also, the advanced
scaling will not be available in UI mode, only OpenGL emulation mode.
The UI (Launcher, Debugger) and emulation modes are now scaled separately,
specified with the new settings 'scale_ui' and 'scale_tia'. The 'zoom'
setting has been removed.
git-svn-id: svn://svn.code.sf.net/p/stella/code/trunk@1133 8b62c5a3-ac7e-4cc8-8f21-d9a121418aba
2006-10-14 20:08:29 +00:00
|
|
|
*/
|
Added 'WINDOWED_SUPPORT' compile-time argument, which can be used for
those systems which don't actually have a windowing environment. When
this is set, toggling from fullscreen will not be possible, and certain
window-related UI functions will not be accessible.
Completely revamped video subsystem. Windowed and fullscreen modes are
now dealt with separately. Windows can be zoomed using the 'zoom_ui'
and 'zoom_tia' arguments. Fullscreen modes are now set by resolution,
not zoom, so you can specify to always use a certain fullscreen
resolution, and the images will be scaled appropriately. This also
fixes the fullscreen issues on widescreen monitors; just select a
widescreen video mode, and the aspect ratio will always be correct.
Removed dirty-rect support for software rendering of the TIA image,
as it ended up being slower than just updating the entire image.
For those resolutions where it will start to slow down (1024x768 or
higher), one should be using OpenGL.
Fixed issue in Windows when returning from fullscreen mode made the
window constantly 'shrink' in size. It was related to auto-detecting
the desktop resolution, which is really the job of SDL. As such, all
further releases of Stella will require SDL 1.2.10, which includes
this auto-detection code internally.
Made ROM launcher resizable, configurable in sizes from 320x240
to 800x600. Updated the UIDialog to change these quantities from the
UI (Stella will need to be restarted for it to take effect).
Removed aspect ratio support, since it was causing problems, and the
new fullscreen mode work has made it obsolete. i *may* consider it
again in the future, if there's sufficient demand.
Added 'fullres' commandline argument, used to set the fullscreen
resolution.
Added 'launcherres' commandline argument, used to set the ROM
launcher resolution. This replaces 'launchersize' argument, which
has been removed.
Changed 'scale_ui' and 'scale_tia' to 'zoom_ui' and 'zoom_tia',
respectively. Their function remains the same.
Changed meaning of 'gl_fsmax' argument to specify what modes to use
fullscreen OpenGL scaling (previously, this was a boolean, and
didn't consider different modes).
git-svn-id: svn://svn.code.sf.net/p/stella/code/trunk@1323 8b62c5a3-ac7e-4cc8-8f21-d9a121418aba
2007-06-20 16:33:23 +00:00
|
|
|
VideoMode getSavedVidMode();
|
Added preliminary framework for using advanced scalers. Right now,
functionality is exactly the same as before; Alt-Equals goes to the
next valid scaler, and Alt-Minus goes to the previous one.
What were previously zoomed modes are now treated as scalers, named
'Zoom1x', 'Zoom2x', etc. Various scalexx and hqxx modes will also be made
available.
For now, and probably forever, these advanced scaling modes will only
be available for OpenGL, since if you don't have a card that can handle
GL well, the scalers will probably be too much anyway. Also, the advanced
scaling will not be available in UI mode, only OpenGL emulation mode.
The UI (Launcher, Debugger) and emulation modes are now scaled separately,
specified with the new settings 'scale_ui' and 'scale_tia'. The 'zoom'
setting has been removed.
git-svn-id: svn://svn.code.sf.net/p/stella/code/trunk@1133 8b62c5a3-ac7e-4cc8-8f21-d9a121418aba
2006-10-14 20:08:29 +00:00
|
|
|
|
2008-07-04 14:27:17 +00:00
|
|
|
private:
|
|
|
|
/**
|
|
|
|
This class implements an iterator around an array of VideoMode objects.
|
|
|
|
*/
|
|
|
|
class VideoModeList
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
VideoModeList();
|
|
|
|
~VideoModeList();
|
|
|
|
|
|
|
|
void add(VideoMode mode);
|
|
|
|
void clear();
|
|
|
|
|
|
|
|
bool isEmpty() const;
|
|
|
|
uInt32 size() const;
|
|
|
|
|
Reworked 'fullres' argument to also accept the 'auto' option. In this case,
fullscreen resolutions will be automatically chosen based on the required
size for the window. The image will be centered and keep the same aspect
ratio, however, so operation will still work correctly on widescreen
monitors. 'Auto' will be the new default. Otherwise, if a specific
resolution is requested, Stella will try to accomodate it *only* if it fits
into the resolution; otherwise the smallest resolution that fits will be
used.
Removed 'zoom_ui' and 'zoom_tia'. The UI can now only be at 1x mode.
Aded 'tia_filter' commandline argument, which specifies to the filter
to use when rendering the tia image. For now, these accept 'zoom1x',
'zoom2x'..., up to 'zoom10x', and duplicate previous behaviour. Eventually,
Scalexx and HQxx filters may be added. Still TODO is add this to the UI.
First pass at making the standard build use a minimum of zoom2x for the TIA,
so the UI can be larger and use a better looking font. There's still work
to do in this area, especially for those ports with limited hardware that
support zoom1x only.
git-svn-id: svn://svn.code.sf.net/p/stella/code/trunk@1544 8b62c5a3-ac7e-4cc8-8f21-d9a121418aba
2008-07-22 14:54:39 +00:00
|
|
|
void previous();
|
2009-06-05 14:05:23 +00:00
|
|
|
const FrameBuffer::VideoMode current(const Settings& settings,
|
|
|
|
bool isFullscreen) const;
|
Reworked 'fullres' argument to also accept the 'auto' option. In this case,
fullscreen resolutions will be automatically chosen based on the required
size for the window. The image will be centered and keep the same aspect
ratio, however, so operation will still work correctly on widescreen
monitors. 'Auto' will be the new default. Otherwise, if a specific
resolution is requested, Stella will try to accomodate it *only* if it fits
into the resolution; otherwise the smallest resolution that fits will be
used.
Removed 'zoom_ui' and 'zoom_tia'. The UI can now only be at 1x mode.
Aded 'tia_filter' commandline argument, which specifies to the filter
to use when rendering the tia image. For now, these accept 'zoom1x',
'zoom2x'..., up to 'zoom10x', and duplicate previous behaviour. Eventually,
Scalexx and HQxx filters may be added. Still TODO is add this to the UI.
First pass at making the standard build use a minimum of zoom2x for the TIA,
so the UI can be larger and use a better looking font. There's still work
to do in this area, especially for those ports with limited hardware that
support zoom1x only.
git-svn-id: svn://svn.code.sf.net/p/stella/code/trunk@1544 8b62c5a3-ac7e-4cc8-8f21-d9a121418aba
2008-07-22 14:54:39 +00:00
|
|
|
void next();
|
2008-07-04 14:27:17 +00:00
|
|
|
|
|
|
|
void setByGfxMode(GfxID id);
|
|
|
|
void setByGfxMode(const string& name);
|
|
|
|
void print();
|
|
|
|
|
|
|
|
private:
|
|
|
|
void set(const GraphicsMode& gfxmode);
|
|
|
|
|
|
|
|
private:
|
|
|
|
Common::Array<VideoMode> myModeList;
|
|
|
|
int myIdx;
|
|
|
|
};
|
|
|
|
|
2005-03-28 00:04:54 +00:00
|
|
|
private:
|
2006-12-11 00:15:34 +00:00
|
|
|
// Indicates the number of times the framebuffer was initialized
|
|
|
|
uInt32 myInitializedCount;
|
|
|
|
|
2007-01-30 17:13:10 +00:00
|
|
|
// Used to set intervals between messages while in pause mode
|
|
|
|
uInt32 myPausedCount;
|
|
|
|
|
2008-06-19 12:01:31 +00:00
|
|
|
// Dimensions of the actual image, after zooming, and taking into account
|
|
|
|
// any image 'centering'
|
|
|
|
GUI::Rect myImageRect;
|
|
|
|
|
|
|
|
// Dimensions of the SDL window (not always the same as the image)
|
|
|
|
GUI::Rect myScreenRect;
|
|
|
|
|
|
|
|
// Used for onscreen messages and frame statistics
|
|
|
|
// (scanline count and framerate)
|
2006-03-19 18:17:48 +00:00
|
|
|
struct Message {
|
|
|
|
string text;
|
|
|
|
int counter;
|
|
|
|
int x, y, w, h;
|
2009-01-10 18:42:49 +00:00
|
|
|
MessagePosition position;
|
2009-01-03 22:57:12 +00:00
|
|
|
uInt32 color;
|
2008-06-19 12:01:31 +00:00
|
|
|
FBSurface* surface;
|
2008-12-12 15:51:07 +00:00
|
|
|
int surfaceID;
|
2008-06-19 12:01:31 +00:00
|
|
|
bool enabled;
|
2006-03-19 18:17:48 +00:00
|
|
|
};
|
2008-06-19 12:01:31 +00:00
|
|
|
Message myMsg;
|
|
|
|
Message myStatsMsg;
|
2008-05-20 13:42:50 +00:00
|
|
|
|
Added 'WINDOWED_SUPPORT' compile-time argument, which can be used for
those systems which don't actually have a windowing environment. When
this is set, toggling from fullscreen will not be possible, and certain
window-related UI functions will not be accessible.
Completely revamped video subsystem. Windowed and fullscreen modes are
now dealt with separately. Windows can be zoomed using the 'zoom_ui'
and 'zoom_tia' arguments. Fullscreen modes are now set by resolution,
not zoom, so you can specify to always use a certain fullscreen
resolution, and the images will be scaled appropriately. This also
fixes the fullscreen issues on widescreen monitors; just select a
widescreen video mode, and the aspect ratio will always be correct.
Removed dirty-rect support for software rendering of the TIA image,
as it ended up being slower than just updating the entire image.
For those resolutions where it will start to slow down (1024x768 or
higher), one should be using OpenGL.
Fixed issue in Windows when returning from fullscreen mode made the
window constantly 'shrink' in size. It was related to auto-detecting
the desktop resolution, which is really the job of SDL. As such, all
further releases of Stella will require SDL 1.2.10, which includes
this auto-detection code internally.
Made ROM launcher resizable, configurable in sizes from 320x240
to 800x600. Updated the UIDialog to change these quantities from the
UI (Stella will need to be restarted for it to take effect).
Removed aspect ratio support, since it was causing problems, and the
new fullscreen mode work has made it obsolete. i *may* consider it
again in the future, if there's sufficient demand.
Added 'fullres' commandline argument, used to set the fullscreen
resolution.
Added 'launcherres' commandline argument, used to set the ROM
launcher resolution. This replaces 'launchersize' argument, which
has been removed.
Changed 'scale_ui' and 'scale_tia' to 'zoom_ui' and 'zoom_tia',
respectively. Their function remains the same.
Changed meaning of 'gl_fsmax' argument to specify what modes to use
fullscreen OpenGL scaling (previously, this was a boolean, and
didn't consider different modes).
git-svn-id: svn://svn.code.sf.net/p/stella/code/trunk@1323 8b62c5a3-ac7e-4cc8-8f21-d9a121418aba
2007-06-20 16:33:23 +00:00
|
|
|
// The list of all available video modes for this framebuffer
|
|
|
|
VideoModeList myWindowedModeList;
|
|
|
|
VideoModeList myFullscreenModeList;
|
|
|
|
VideoModeList* myCurrentModeList;
|
2008-07-04 14:27:17 +00:00
|
|
|
|
2008-12-12 15:51:07 +00:00
|
|
|
// Holds a reference to all the surfaces that have been created
|
|
|
|
map<int,FBSurface*> mySurfaceList;
|
|
|
|
|
2008-07-04 14:27:17 +00:00
|
|
|
// Holds static strings for the remap menu (emulation and menu events)
|
|
|
|
static GraphicsMode ourGraphicsModes[GFX_NumModes];
|
2005-03-28 00:04:54 +00:00
|
|
|
};
|
|
|
|
|
2008-06-13 13:14:52 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
This class is basically a thin wrapper around an SDL_Surface structure.
|
|
|
|
We do it this way so the SDL stuff won't be dragged into the depths of
|
|
|
|
the codebase. All drawing is done into FBSurfaces, which are then
|
|
|
|
drawn into the FrameBuffer. Each FrameBuffer-derived class is
|
|
|
|
responsible for extending an FBSurface object suitable to the
|
|
|
|
FrameBuffer type.
|
|
|
|
|
|
|
|
@author Stephen Anthony
|
2009-05-13 13:55:40 +00:00
|
|
|
@version $Id$
|
2008-06-13 13:14:52 +00:00
|
|
|
*/
|
|
|
|
// Text alignment modes for drawString()
|
|
|
|
enum TextAlignment {
|
|
|
|
kTextAlignLeft,
|
|
|
|
kTextAlignCenter,
|
|
|
|
kTextAlignRight
|
|
|
|
};
|
|
|
|
// Line types for drawing rectangular frames
|
|
|
|
enum FrameStyle {
|
|
|
|
kSolidLine,
|
|
|
|
kDashLine
|
|
|
|
};
|
|
|
|
|
|
|
|
class FBSurface
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
/**
|
|
|
|
Creates a new FBSurface object
|
|
|
|
*/
|
|
|
|
FBSurface() { }
|
|
|
|
|
|
|
|
/**
|
|
|
|
Destructor
|
|
|
|
*/
|
|
|
|
virtual ~FBSurface() { }
|
|
|
|
|
|
|
|
/**
|
|
|
|
This method should be called to draw a horizontal line.
|
|
|
|
|
|
|
|
@param x The first x coordinate
|
|
|
|
@param y The y coordinate
|
|
|
|
@param x2 The second x coordinate
|
|
|
|
@param color The color of the line
|
|
|
|
*/
|
2009-01-03 22:57:12 +00:00
|
|
|
virtual void hLine(uInt32 x, uInt32 y, uInt32 x2, uInt32 color) = 0;
|
2008-06-13 13:14:52 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
This method should be called to draw a vertical line.
|
|
|
|
|
|
|
|
@param x The x coordinate
|
|
|
|
@param y The first y coordinate
|
|
|
|
@param y2 The second y coordinate
|
|
|
|
@param color The color of the line
|
|
|
|
*/
|
2009-01-03 22:57:12 +00:00
|
|
|
virtual void vLine(uInt32 x, uInt32 y, uInt32 y2, uInt32 color) = 0;
|
2008-06-13 13:14:52 +00:00
|
|
|
|
|
|
|
/**
|
2009-01-03 22:57:12 +00:00
|
|
|
This method should be called to draw a filled rectangle.
|
2008-06-13 13:14:52 +00:00
|
|
|
|
|
|
|
@param x The x coordinate
|
|
|
|
@param y The y coordinate
|
|
|
|
@param w The width of the area
|
|
|
|
@param h The height of the area
|
2009-01-03 15:44:13 +00:00
|
|
|
@param color
|
2008-06-13 13:14:52 +00:00
|
|
|
*/
|
|
|
|
virtual void fillRect(uInt32 x, uInt32 y, uInt32 w, uInt32 h,
|
2009-01-03 22:57:12 +00:00
|
|
|
uInt32 color) = 0;
|
2008-06-13 13:14:52 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
This method should be called to draw the specified character.
|
|
|
|
|
|
|
|
@param font The font to use to draw the character
|
|
|
|
@param c The character to draw
|
|
|
|
@param x The x coordinate
|
|
|
|
@param y The y coordinate
|
|
|
|
@param color The color of the character
|
|
|
|
*/
|
|
|
|
virtual void drawChar(const GUI::Font* font, uInt8 c, uInt32 x, uInt32 y,
|
2009-01-03 22:57:12 +00:00
|
|
|
uInt32 color) = 0;
|
2008-06-13 13:14:52 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
This method should be called to draw the bitmap image.
|
|
|
|
|
|
|
|
@param bitmap The data to draw
|
|
|
|
@param x The x coordinate
|
|
|
|
@param y The y coordinate
|
|
|
|
@param color The color of the character
|
|
|
|
@param h The height of the data image
|
|
|
|
*/
|
2009-01-03 22:57:12 +00:00
|
|
|
virtual void drawBitmap(uInt32* bitmap, uInt32 x, uInt32 y, uInt32 color,
|
2008-12-29 20:42:15 +00:00
|
|
|
uInt32 h = 8) = 0;
|
|
|
|
|
|
|
|
/**
|
2009-01-03 22:57:12 +00:00
|
|
|
This method should be called to convert and copy a given row of pixel
|
|
|
|
data into a FrameBuffer surface. The pixels must already be in the
|
|
|
|
format used by the surface.
|
2008-12-29 20:42:15 +00:00
|
|
|
|
|
|
|
@param data The data in uInt8 R/G/B format
|
|
|
|
@param row The row of the surface the data should be placed in
|
|
|
|
@param rowbytes The number of bytes in row of 'data'
|
|
|
|
*/
|
2009-01-03 22:57:12 +00:00
|
|
|
virtual void drawPixels(uInt32* data, uInt32 x, uInt32 y, uInt32 numpixels) = 0;
|
2008-12-29 20:42:15 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
This method should be called copy the contents of the given
|
|
|
|
surface into the FrameBuffer surface.
|
|
|
|
|
|
|
|
@param surface The data to draw
|
|
|
|
@param x The x coordinate
|
|
|
|
@param y The y coordinate
|
|
|
|
*/
|
|
|
|
virtual void drawSurface(const FBSurface* surface, uInt32 x, uInt32 y) = 0;
|
2008-06-13 13:14:52 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
This method should be called to add a dirty rectangle
|
|
|
|
(ie, an area of the screen that has changed)
|
|
|
|
|
|
|
|
@param x The x coordinate
|
|
|
|
@param y The y coordinate
|
|
|
|
@param w The width of the area
|
|
|
|
@param h The height of the area
|
|
|
|
*/
|
|
|
|
virtual void addDirtyRect(uInt32 x, uInt32 y, uInt32 w, uInt32 h) = 0;
|
|
|
|
|
|
|
|
/**
|
2008-06-19 12:01:31 +00:00
|
|
|
This method answers the current position of the surface.
|
2008-06-13 13:14:52 +00:00
|
|
|
*/
|
2008-06-19 12:01:31 +00:00
|
|
|
virtual void getPos(uInt32& x, uInt32& y) const = 0;
|
2008-06-13 13:14:52 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
This method should be called to set the position of the surface.
|
|
|
|
*/
|
|
|
|
virtual void setPos(uInt32 x, uInt32 y) = 0;
|
|
|
|
|
2008-08-01 12:16:00 +00:00
|
|
|
/**
|
|
|
|
This method answers the current dimensions of the surface.
|
|
|
|
*/
|
|
|
|
virtual uInt32 getWidth() const = 0;
|
|
|
|
virtual uInt32 getHeight() const = 0;
|
|
|
|
|
2008-06-13 13:14:52 +00:00
|
|
|
/**
|
2008-06-19 12:01:31 +00:00
|
|
|
This method sets the width of the drawable area of the surface.
|
2008-06-13 13:14:52 +00:00
|
|
|
*/
|
2008-06-19 12:01:31 +00:00
|
|
|
virtual void setWidth(uInt32 w) = 0;
|
|
|
|
|
|
|
|
/**
|
|
|
|
This method sets the width of the drawable area of the surface.
|
|
|
|
*/
|
|
|
|
virtual void setHeight(uInt32 h) = 0;
|
2008-06-13 13:14:52 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
This method should be called to translate the given coordinates
|
|
|
|
to the surface coordinates.
|
|
|
|
|
|
|
|
@param x X coordinate to translate
|
|
|
|
@param y Y coordinate to translate
|
|
|
|
*/
|
|
|
|
virtual void translateCoords(Int32& x, Int32& y) const = 0;
|
|
|
|
|
|
|
|
/**
|
|
|
|
This method should be called to draw the surface to the screen.
|
|
|
|
*/
|
|
|
|
virtual void update() = 0;
|
|
|
|
|
2008-12-20 23:32:46 +00:00
|
|
|
/**
|
|
|
|
This method should be called to free any resources being used by
|
|
|
|
the surface.
|
|
|
|
*/
|
|
|
|
virtual void free() = 0;
|
|
|
|
|
2008-12-12 15:51:07 +00:00
|
|
|
/**
|
|
|
|
This method should be called to reload the surface data/state.
|
2008-12-20 23:32:46 +00:00
|
|
|
It will normally be called after free().
|
2008-12-12 15:51:07 +00:00
|
|
|
*/
|
|
|
|
virtual void reload() = 0;
|
|
|
|
|
2008-06-13 13:14:52 +00:00
|
|
|
/**
|
|
|
|
This method should be called to draw a rectangular box with sides
|
|
|
|
at the specified coordinates.
|
|
|
|
|
|
|
|
@param x The x coordinate
|
|
|
|
@param y The y coordinate
|
|
|
|
@param w The width of the box
|
|
|
|
@param h The height of the box
|
|
|
|
@param colorA Lighter color for outside line.
|
|
|
|
@param colorB Darker color for inside line.
|
|
|
|
*/
|
|
|
|
void box(uInt32 x, uInt32 y, uInt32 w, uInt32 h,
|
2009-01-03 22:57:12 +00:00
|
|
|
uInt32 colorA, uInt32 colorB);
|
2008-06-13 13:14:52 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
This method should be called to draw a framed rectangle.
|
|
|
|
I'm not exactly sure what it is, so I can't explain it :)
|
|
|
|
|
|
|
|
@param x The x coordinate
|
|
|
|
@param y The y coordinate
|
|
|
|
@param w The width of the area
|
|
|
|
@param h The height of the area
|
|
|
|
@param color The color of the surrounding frame
|
|
|
|
*/
|
|
|
|
void frameRect(uInt32 x, uInt32 y, uInt32 w, uInt32 h,
|
2009-01-03 22:57:12 +00:00
|
|
|
uInt32 color, FrameStyle style = kSolidLine);
|
2008-06-13 13:14:52 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
This method should be called to draw the specified string.
|
|
|
|
|
|
|
|
@param font The font to draw the string with
|
|
|
|
@param str The string to draw
|
|
|
|
@param x The x coordinate
|
|
|
|
@param y The y coordinate
|
|
|
|
@param w The width of the string area
|
|
|
|
@param h The height of the string area
|
|
|
|
@param color The color of the text
|
|
|
|
@param align The alignment of the text in the string width area
|
|
|
|
@param deltax
|
|
|
|
@param useEllipsis Whether to use '...' when the string is too long
|
|
|
|
*/
|
|
|
|
void drawString(const GUI::Font* font, const string& str, int x, int y, int w,
|
2009-01-03 22:57:12 +00:00
|
|
|
uInt32 color, TextAlignment align = kTextAlignLeft,
|
2008-06-13 13:14:52 +00:00
|
|
|
int deltax = 0, bool useEllipsis = true);
|
|
|
|
};
|
|
|
|
|
2005-03-28 00:04:54 +00:00
|
|
|
#endif
|