Make screenshot return path to file

This commit is contained in:
Michał Janiszewski 2019-01-31 23:15:05 +01:00
parent accac88e62
commit 7655ba7746
7 changed files with 25 additions and 26 deletions

View File

@ -286,12 +286,12 @@ public:
// Not implemented
}
int32_t Screenshot() override
std::string Screenshot() override
{
const OpenGLFramebuffer& framebuffer = _drawingContext->GetFinalFramebuffer();
framebuffer.Bind();
framebuffer.GetPixels(_bitsDPI);
int32_t result = screenshot_dump_png(&_bitsDPI);
std::string result = screenshot_dump_png(&_bitsDPI);
return result;
}

View File

@ -12,6 +12,7 @@
#include "../common.h"
#include <memory>
#include <string>
enum DRAWING_ENGINE
{
@ -64,7 +65,7 @@ namespace OpenRCT2::Drawing
virtual void UpdateWindows() abstract;
virtual void PaintRain() abstract;
virtual void CopyRect(int32_t x, int32_t y, int32_t width, int32_t height, int32_t dx, int32_t dy) abstract;
virtual int32_t Screenshot() abstract;
virtual std::string Screenshot() abstract;
virtual IDrawingContext* GetDrawingContext(rct_drawpixelinfo * dpi) abstract;
virtual rct_drawpixelinfo* GetDrawingPixelInfo() abstract;

View File

@ -249,12 +249,12 @@ void FASTCALL gfx_draw_sprite_solid(rct_drawpixelinfo* dpi, int32_t image, int32
}
}
int32_t screenshot_dump()
std::string screenshot_dump()
{
auto drawingEngine = GetDrawingEngine();
if (drawingEngine != nullptr)
{
return drawingEngine->Screenshot();
}
return false;
return "";
}

View File

@ -276,7 +276,7 @@ void X8DrawingEngine::CopyRect(int32_t x, int32_t y, int32_t width, int32_t heig
}
}
int32_t X8DrawingEngine::Screenshot()
std::string X8DrawingEngine::Screenshot()
{
return screenshot_dump_png(&_bitsDPI);
}

View File

@ -98,7 +98,7 @@ namespace OpenRCT2
void UpdateWindows() override;
void PaintRain() override;
void CopyRect(int32_t x, int32_t y, int32_t width, int32_t height, int32_t dx, int32_t dy) override;
int32_t Screenshot() override;
std::string Screenshot() override;
IDrawingContext* GetDrawingContext(rct_drawpixelinfo* dpi) override;
rct_drawpixelinfo* GetDrawingPixelInfo() override;
DRAWING_ENGINE_FLAGS GetFlags() override;

View File

@ -63,17 +63,15 @@ static bool WriteDpiToFile(const std::string_view& path, const rct_drawpixelinfo
*/
void screenshot_check()
{
int32_t screenshotIndex;
if (gScreenshotCountdown != 0)
{
gScreenshotCountdown--;
if (gScreenshotCountdown == 0)
{
// update_rain_animation();
screenshotIndex = screenshot_dump();
std::string screenshotPath = screenshot_dump();
if (screenshotIndex != -1)
if (!screenshotPath.empty())
{
audio_play_sound(SOUND_WINDOW_OPEN, 100, context_get_width() / 2);
}
@ -172,14 +170,13 @@ static int32_t screenshot_get_next_path(char* path, size_t size)
return -1;
}
int32_t screenshot_dump_png(rct_drawpixelinfo* dpi)
std::string screenshot_dump_png(rct_drawpixelinfo* dpi)
{
// Get a free screenshot path
int32_t index;
char path[MAX_PATH] = "";
if ((index = screenshot_get_next_path(path, MAX_PATH)) == -1)
if (screenshot_get_next_path(path, MAX_PATH) == -1)
{
return -1;
return "";
}
rct_palette renderedPalette;
@ -187,22 +184,21 @@ int32_t screenshot_dump_png(rct_drawpixelinfo* dpi)
if (WriteDpiToFile(path, dpi, renderedPalette))
{
return index;
return std::string(path);
}
else
{
return -1;
return "";
}
}
int32_t screenshot_dump_png_32bpp(int32_t width, int32_t height, const void* pixels)
std::string screenshot_dump_png_32bpp(int32_t width, int32_t height, const void* pixels)
{
// Get a free screenshot path
int32_t index;
char path[MAX_PATH] = "";
if ((index = screenshot_get_next_path(path, MAX_PATH)) == -1)
if (screenshot_get_next_path(path, MAX_PATH) == -1)
{
return -1;
return "";
}
const auto pixels8 = (const uint8_t*)pixels;
@ -217,12 +213,12 @@ int32_t screenshot_dump_png_32bpp(int32_t width, int32_t height, const void* pix
image.Stride = width * 4;
image.Pixels = std::vector<uint8_t>(pixels8, pixels8 + pixelsLen);
Imaging::WriteToFile(path, image, IMAGE_FORMAT::PNG_32);
return index;
return std::string(path);
}
catch (const std::exception& e)
{
log_error("Unable to save screenshot: %s", e.what());
return -1;
return "";
}
}

View File

@ -11,6 +11,8 @@
#include "../common.h"
#include <string>
struct rct_drawpixelinfo;
extern uint8_t gScreenshotCountdown;
@ -29,9 +31,9 @@ struct ScreenshotOptions
};
void screenshot_check();
int32_t screenshot_dump();
int32_t screenshot_dump_png(rct_drawpixelinfo* dpi);
int32_t screenshot_dump_png_32bpp(int32_t width, int32_t height, const void* pixels);
std::string screenshot_dump();
std::string screenshot_dump_png(rct_drawpixelinfo* dpi);
std::string screenshot_dump_png_32bpp(int32_t width, int32_t height, const void* pixels);
void screenshot_giant();
int32_t cmdline_for_screenshot(const char** argv, int32_t argc, ScreenshotOptions* options);