#include <base_render_osystem.h>
Public Types | |
typedef Common::List< RenderTicket * >::iterator | RenderQueueIterator |
Public Member Functions | |
BaseRenderOSystem (BaseGame *inGame) | |
Common::String | getName () const override |
bool | initRenderer (int width, int height, bool windowed) override |
bool | flip () override |
bool | indicatorFlip () override |
bool | forcedFlip () override |
bool | fill (byte r, byte g, byte b, Common::Rect *rect=nullptr) override |
Graphics::PixelFormat | getPixelFormat () const override |
void | fade (uint16 alpha) override |
void | fadeToColor (byte r, byte g, byte b, byte a) override |
bool | drawLine (int x1, int y1, int x2, int y2, uint32 color) override |
BaseImage * | takeScreenshot () override |
void | onWindowChange () override |
void | setWindowed (bool windowed) override |
void | invalidateTicket (RenderTicket *renderTicket) |
void | invalidateTicketsFromSurface (BaseSurfaceOSystem *surf) |
void | drawFromTicket (RenderTicket *renderTicket) |
void | drawFromQueuedTicket (const RenderQueueIterator &ticket) |
bool | setViewport (int left, int top, int right, int bottom) override |
bool | setViewport (Rect32 *rect) override |
void | modTargetRect (Common::Rect *rect) |
void | pointFromScreen (Point32 *point) |
void | pointToScreen (Point32 *point) |
void | dumpData (const char *filename) override |
float | getScaleRatioX () const override |
float | getScaleRatioY () const override |
bool | startSpriteBatch () override |
bool | endSpriteBatch () override |
void | endSaveLoad () override |
void | drawSurface (BaseSurfaceOSystem *owner, const Graphics::Surface *surf, Common::Rect *srcRect, Common::Rect *dstRect, Graphics::TransformStruct &transform) |
BaseSurface * | createSurface () override |
![]() | |
virtual bool | setScreenViewport () |
virtual bool | drawRect (int x1, int y1, int x2, int y2, uint32 color, int width=1) |
BaseRenderer (BaseGame *inGame=nullptr) | |
virtual bool | setProjection () |
virtual bool | windowedBlt () |
virtual void | initLoop () |
virtual bool | setup2D (bool force=false) |
virtual bool | setupLines () |
virtual bool | displayDebugInfo () |
virtual bool | drawShaderQuad () |
bool | clipCursor () |
bool | unclipCursor () |
BaseObject * | getObjectAt (int x, int y) |
void | deleteRectList () |
bool | pointInViewport (Point32 *P) |
bool | isReady () const |
bool | isWindowed () const |
int32 | getBPP () const |
void | addRectToList (BaseActiveRect *rect) |
void | initIndicator () |
void | setIndicatorVal (int value) |
void | setIndicator (int width, int height, int x, int y, uint32 color) |
void | persistSaveLoadImages (BasePersistenceManager *persistMgr) |
void | initSaveLoad (bool isSaving, bool quickSave=false) |
void | setLoadingScreen (const char *filename, int x, int y) |
void | setSaveImage (const char *filename, int x, int y) |
bool | displayIndicator () |
int32 | getWidth () const |
int32 | getHeight () const |
![]() | |
bool | setEditorProp (const Common::String &propName, const Common::String &propValue) |
Common::String | getEditorProp (const Common::String &propName, const Common::String &initVal=Common::String()) |
BaseClass (TDynamicConstructor, TDynamicConstructor) | |
bool | parseEditorProperty (char *buffer, bool complete=true) |
virtual bool | saveAsText (BaseDynamicBuffer *buffer, int indent=0) |
BaseClass (BaseGame *GameOwner) | |
virtual const char * | getClassName () |
virtual bool | persist (BasePersistenceManager *persistMgr) |
Additional Inherited Members | |
![]() | |
int | _realWidth |
int | _realHeight |
int | _drawOffsetX |
int | _drawOffsetY |
bool | _active |
bool | _ready |
uint32 | _window |
uint32 | _forceAlphaColor |
![]() | |
bool | _persistable |
BaseGame * | _gameRef |
![]() | |
int32 | _height |
int32 | _width |
bool | _windowed |
int32 | _bPP |
Common::String | _loadImageName |
Common::String | _saveImageName |
int32 | _saveImageX |
int32 | _saveImageY |
int32 | _loadImageX |
int32 | _loadImageY |
BaseSurface * | _saveLoadImage |
bool | _hasDrawnSaveLoadImage |
int32 | _indicatorWidthDrawn |
uint32 | _indicatorColor |
int32 | _indicatorX |
int32 | _indicatorY |
int32 | _indicatorWidth |
int32 | _indicatorHeight |
bool | _loadInProgress |
bool | _indicatorDisplay |
int32 | _indicatorProgress |
uint32 | _clipperWindow |
Rect32 | _windowRect |
Rect32 | _viewportRect |
Rect32 | _screenRect |
Rect32 | _monitorRect |
![]() | |
Common::HashMap< Common::String, Common::String > | _editorProps |
Common::HashMap< Common::String, Common::String >::iterator | _editorPropsIter |
A 2D-renderer implementation for WME. This renderer makes use of a "ticket"-system, where all draw-calls are stored as tickets until flip() is called, and compared against the tickets from last frame, to determine which calls were the same as last round (i.e. in the exact same order, with the exact same arguments), and thus figure out which parts of the screen need to be redrawn.
Important concepts to handle here, is the ordered number of any ticket which is called the "drawNum", every frame this starts from scratch, and then the incoming tickets created from the draw-calls are checked to see whether they came before, on, or after the drawNum they had last frame. Everything else being equal, this information is then used to check whether the draw order changed, which will then create a need for redrawing, as we draw with an alpha-channel here.
There is also a draw path that draws without tickets, for debugging purposes, as well as to accommodate situations with large enough amounts of draw calls, that there will be too much overhead involved with comparing the generated tickets.
|
overridevirtual |
Get the name of the current renderer
Implements Wintermute::BaseRenderer.
|
overridevirtual |
Flip the backbuffer onto the screen-buffer The screen will NOT be updated before calling this function.
Implements Wintermute::BaseRenderer.
|
overridevirtual |
Special flip for the indicator drawn during save/load essentially, just copies the region defined by the _indicator-variables.
Implements Wintermute::BaseRenderer.
|
overridevirtual |
Fill a portion of the screen with a specified color
r | the red component to fill with. |
g | the green component to fill with. |
b | the blue component to fill with. |
Implements Wintermute::BaseRenderer.
|
overridevirtual |
Fade the screen to black
alpha | amount to fade by (alpha value of black) |
Implements Wintermute::BaseRenderer.
|
overridevirtual |
Fade a portion of the screen to a specific color
r | the red component to fade too. |
g | the green component to fade too. |
b | the blue component to fade too. |
a | the alpha component to fade too. |
rect | the portion of the screen to fade (if nullptr, the entire screen will be faded). |
Implements Wintermute::BaseRenderer.
|
overridevirtual |
Take a screenshot of the current screenstate
Implements Wintermute::BaseRenderer.
void Wintermute::BaseRenderOSystem::drawFromTicket | ( | RenderTicket * | renderTicket | ) |
Insert a new ticket into the queue, adding a dirty rect
renderTicket | the ticket to be added. |
void Wintermute::BaseRenderOSystem::drawFromQueuedTicket | ( | const RenderQueueIterator & | ticket | ) |
Re-insert an existing ticket into the queue, adding a dirty rect out-of-order from last draw from the ticket.
ticket | iterator pointing to the ticket to be added. |
|
overridevirtual |
Create a Surface fit for use with the renderer. As diverse implementations of BaseRenderer might have different solutions for storing surfaces this allows for a common interface for creating surface-handles. (Mostly useful to ease future implementation of hw-accelerated rendering, or readding 3D-support at some point).
Implements Wintermute::BaseRenderer.