diff --git a/src/drawing/IDrawingEngine.h b/src/drawing/IDrawingEngine.h index 3dad79b63b..6868cdb1ef 100644 --- a/src/drawing/IDrawingEngine.h +++ b/src/drawing/IDrawingEngine.h @@ -31,8 +31,9 @@ interface IDrawingEngine virtual void Resize(uint32 width, uint32 height) abstract; virtual void SetPalette(SDL_Color * colours) abstract; - virtual void Invalidate(sint32 left, sint32 top, sint32 right, sint32 bottom) abstract; - virtual void Draw() abstract; + virtual void Invalidate(sint32 left, sint32 top, sint32 right, sint32 bottom) abstract; + virtual void Draw() abstract; + virtual sint32 Screenshot() abstract; virtual IDrawingContext * GetDrawingContext(rct_drawpixelinfo * dpi) abstract; }; diff --git a/src/drawing/NewDrawing.cpp b/src/drawing/NewDrawing.cpp index 6ba816ae7b..ae76739dd3 100644 --- a/src/drawing/NewDrawing.cpp +++ b/src/drawing/NewDrawing.cpp @@ -122,4 +122,13 @@ extern "C" dc->DrawSpriteRawMasked(x, y, maskImage, colourImage); } } + + int screenshot_dump() + { + if (_drawingEngine != nullptr) + { + return _drawingEngine->Screenshot(); + } + return false; + } } diff --git a/src/drawing/engines/OpenGLDrawingEngine.cpp b/src/drawing/engines/OpenGLDrawingEngine.cpp index 7dc297141e..a7aa562356 100644 --- a/src/drawing/engines/OpenGLDrawingEngine.cpp +++ b/src/drawing/engines/OpenGLDrawingEngine.cpp @@ -189,6 +189,12 @@ public: } Display(); } + + sint32 Screenshot() override + { + // Not implemented + return -1; + } IDrawingContext * GetDrawingContext(rct_drawpixelinfo * dpi) override { diff --git a/src/drawing/engines/SoftwareDrawingEngine.cpp b/src/drawing/engines/SoftwareDrawingEngine.cpp index d59b43517e..6f6a679328 100644 --- a/src/drawing/engines/SoftwareDrawingEngine.cpp +++ b/src/drawing/engines/SoftwareDrawingEngine.cpp @@ -23,6 +23,7 @@ extern "C" { #include "../../config.h" + #include "../../interface/screenshot.h" #include "../../interface/window.h" #include "../../intro.h" #include "../drawing.h" @@ -315,6 +316,11 @@ public: Display(); } + sint32 Screenshot() override + { + return screenshot_dump_png(&_bitsDPI); + } + IDrawingContext * GetDrawingContext(rct_drawpixelinfo * dpi) override { _drawingContext->SetDPI(dpi); diff --git a/src/interface/screenshot.c b/src/interface/screenshot.c index 432ba91caa..7ba9a5bc02 100644 --- a/src/interface/screenshot.c +++ b/src/interface/screenshot.c @@ -29,8 +29,6 @@ #include "screenshot.h" #include "viewport.h" -static int screenshot_dump_png(); - /** * * rct2: 0x006E3AEC @@ -98,12 +96,7 @@ static int screenshot_get_next_path(char *path) return -1; } -int screenshot_dump() -{ - return screenshot_dump_png(); -} - -int screenshot_dump_png() +int screenshot_dump_png(rct_drawpixelinfo *dpi) { // Get a free screenshot path int index; @@ -112,8 +105,6 @@ int screenshot_dump_png() return -1; } - rct_drawpixelinfo *dpi = &gScreenDPI; - rct_palette renderedPalette; screenshot_get_rendered_palette(&renderedPalette); diff --git a/src/interface/screenshot.h b/src/interface/screenshot.h index 2bcbae7861..5b14a788d8 100644 --- a/src/interface/screenshot.h +++ b/src/interface/screenshot.h @@ -17,8 +17,11 @@ #ifndef _SCREENSHOT_H_ #define _SCREENSHOT_H_ +#include "../drawing/drawing.h" + void screenshot_check(); int screenshot_dump(); +int screenshot_dump_png(rct_drawpixelinfo *dpi); void screenshot_giant(); int cmdline_for_screenshot(const char **argv, int argc); diff --git a/src/rct2.c b/src/rct2.c index b4268ca440..b61f92046b 100644 --- a/src/rct2.c +++ b/src/rct2.c @@ -186,8 +186,6 @@ int rct2_init() if (!gOpenRCT2Headless) { title_load(); - - gfx_clear(&gScreenDPI, 10); } log_verbose("initialising game finished");