mirror of https://github.com/OpenRCT2/OpenRCT2.git
Make screenshot return path to file
This commit is contained in:
parent
accac88e62
commit
7655ba7746
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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 "";
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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 "";
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue