mirror of
https://github.com/OpenRCT2/OpenRCT2
synced 2026-01-04 13:42:55 +01:00
Refactor rct2_draw to a new Painter class
Right now this is created for each drawing engine, but should eventually be a dependency into them.
This commit is contained in:
@@ -53,7 +53,8 @@ private:
|
||||
|
||||
public:
|
||||
explicit HardwareDisplayDrawingEngine(IUiContext * uiContext)
|
||||
: _uiContext(uiContext)
|
||||
: X8DrawingEngine(uiContext),
|
||||
_uiContext(uiContext)
|
||||
{
|
||||
_window = (SDL_Window *)_uiContext->GetWindow();
|
||||
}
|
||||
|
||||
@@ -44,7 +44,8 @@ private:
|
||||
|
||||
public:
|
||||
explicit SoftwareDrawingEngine(IUiContext * uiContext)
|
||||
: _uiContext(uiContext)
|
||||
: X8DrawingEngine(uiContext),
|
||||
_uiContext(uiContext)
|
||||
{
|
||||
_window = (SDL_Window *)_uiContext->GetWindow();
|
||||
}
|
||||
|
||||
@@ -29,6 +29,7 @@
|
||||
#include <openrct2/drawing/IDrawingEngine.h>
|
||||
#include <openrct2/drawing/Rain.h>
|
||||
#include <openrct2/interface/Screenshot.h>
|
||||
#include <openrct2/paint/Painter.h>
|
||||
#include <openrct2/ui/UiContext.h>
|
||||
|
||||
extern "C"
|
||||
@@ -52,6 +53,7 @@ extern "C"
|
||||
|
||||
using namespace OpenRCT2;
|
||||
using namespace OpenRCT2::Drawing;
|
||||
using namespace OpenRCT2::Paint;
|
||||
using namespace OpenRCT2::Ui;
|
||||
|
||||
struct OpenGLVersion
|
||||
@@ -228,6 +230,7 @@ private:
|
||||
IUiContext * const _uiContext = nullptr;
|
||||
SDL_Window * _window = nullptr;
|
||||
SDL_GLContext _context = nullptr;
|
||||
Painter _painter;
|
||||
|
||||
uint32 _width = 0;
|
||||
uint32 _height = 0;
|
||||
@@ -248,7 +251,8 @@ public:
|
||||
vec4f GLPalette[256];
|
||||
|
||||
OpenGLDrawingEngine(IUiContext * uiContext)
|
||||
: _uiContext(uiContext)
|
||||
: _uiContext(uiContext),
|
||||
_painter(uiContext)
|
||||
{
|
||||
_window = (SDL_Window *)_uiContext->GetWindow();
|
||||
_drawingContext = new OpenGLDrawingContext(this);
|
||||
@@ -349,7 +353,7 @@ public:
|
||||
_drawingContext->FlushCommandBuffers();
|
||||
_swapFramebuffer->SwapCopy();
|
||||
|
||||
rct2_draw(&_bitsDPI);
|
||||
_painter.Paint(&_bitsDPI);
|
||||
}
|
||||
|
||||
_drawingContext->FlushCommandBuffers();
|
||||
|
||||
@@ -21,6 +21,7 @@
|
||||
#include "../core/Math.hpp"
|
||||
#include "../core/Memory.hpp"
|
||||
#include "../interface/Screenshot.h"
|
||||
#include "../paint/Painter.h"
|
||||
#include "IDrawingContext.h"
|
||||
#include "IDrawingEngine.h"
|
||||
#include "Rain.h"
|
||||
@@ -40,6 +41,7 @@ extern "C"
|
||||
|
||||
using namespace OpenRCT2;
|
||||
using namespace OpenRCT2::Drawing;
|
||||
using namespace OpenRCT2::Paint;
|
||||
using namespace OpenRCT2::Ui;
|
||||
|
||||
X8RainDrawer::X8RainDrawer()
|
||||
@@ -136,9 +138,10 @@ void X8RainDrawer::Restore()
|
||||
#pragma GCC diagnostic push
|
||||
#pragma GCC diagnostic ignored "-Wsuggest-final-methods"
|
||||
|
||||
X8DrawingEngine::X8DrawingEngine()
|
||||
X8DrawingEngine::X8DrawingEngine(Ui::IUiContext * uiContext)
|
||||
{
|
||||
_drawingContext = new X8DrawingContext(this);
|
||||
_painter = new Painter(uiContext);
|
||||
#ifdef __ENABLE_LIGHTFX__
|
||||
_lastLightFXenabled = (gConfigGeneral.enable_light_fx != 0);
|
||||
#endif
|
||||
@@ -146,6 +149,7 @@ X8DrawingEngine::X8DrawingEngine()
|
||||
|
||||
X8DrawingEngine::~X8DrawingEngine()
|
||||
{
|
||||
delete _painter;
|
||||
delete _drawingContext;
|
||||
delete [] _dirtyGrid.Blocks;
|
||||
delete [] _bits;
|
||||
@@ -234,7 +238,7 @@ void X8DrawingEngine::Draw()
|
||||
|
||||
DrawRain(&_bitsDPI, &_rainDrawer);
|
||||
|
||||
rct2_draw(&_bitsDPI);
|
||||
_painter->Paint(&_bitsDPI);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -20,118 +20,134 @@
|
||||
#include "IDrawingContext.h"
|
||||
#include "IDrawingEngine.h"
|
||||
|
||||
namespace OpenRCT2 { namespace Drawing
|
||||
namespace OpenRCT2
|
||||
{
|
||||
class X8DrawingContext;
|
||||
|
||||
struct DirtyGrid
|
||||
namespace Paint
|
||||
{
|
||||
uint32 BlockShiftX;
|
||||
uint32 BlockShiftY;
|
||||
uint32 BlockWidth;
|
||||
uint32 BlockHeight;
|
||||
uint32 BlockColumns;
|
||||
uint32 BlockRows;
|
||||
uint8 * Blocks;
|
||||
};
|
||||
class Painter;
|
||||
}
|
||||
|
||||
class X8RainDrawer final : public IRainDrawer
|
||||
namespace Ui
|
||||
{
|
||||
private:
|
||||
struct RainPixel
|
||||
interface IUiContext;
|
||||
}
|
||||
|
||||
namespace Drawing
|
||||
{
|
||||
class X8DrawingContext;
|
||||
|
||||
struct DirtyGrid
|
||||
{
|
||||
uint32 Position;
|
||||
uint8 Colour;
|
||||
uint32 BlockShiftX;
|
||||
uint32 BlockShiftY;
|
||||
uint32 BlockWidth;
|
||||
uint32 BlockHeight;
|
||||
uint32 BlockColumns;
|
||||
uint32 BlockRows;
|
||||
uint8 * Blocks;
|
||||
};
|
||||
|
||||
static constexpr uint32 MaxRainPixels = 0xFFFE;
|
||||
class X8RainDrawer final : public IRainDrawer
|
||||
{
|
||||
private:
|
||||
struct RainPixel
|
||||
{
|
||||
uint32 Position;
|
||||
uint8 Colour;
|
||||
};
|
||||
|
||||
size_t _rainPixelsCapacity = MaxRainPixels;
|
||||
uint32 _rainPixelsCount = 0;
|
||||
RainPixel * _rainPixels = nullptr;
|
||||
rct_drawpixelinfo * _screenDPI = nullptr;
|
||||
static constexpr uint32 MaxRainPixels = 0xFFFE;
|
||||
|
||||
public:
|
||||
X8RainDrawer();
|
||||
~X8RainDrawer();
|
||||
void SetDPI(rct_drawpixelinfo * dpi);
|
||||
void Draw(sint32 x, sint32 y, sint32 width, sint32 height, sint32 xStart, sint32 yStart) override;
|
||||
void Restore();
|
||||
};
|
||||
size_t _rainPixelsCapacity = MaxRainPixels;
|
||||
uint32 _rainPixelsCount = 0;
|
||||
RainPixel * _rainPixels = nullptr;
|
||||
rct_drawpixelinfo * _screenDPI = nullptr;
|
||||
|
||||
#pragma GCC diagnostic push
|
||||
#pragma GCC diagnostic ignored "-Wsuggest-final-types"
|
||||
class X8DrawingEngine : public IDrawingEngine
|
||||
{
|
||||
protected:
|
||||
uint32 _width = 0;
|
||||
uint32 _height = 0;
|
||||
uint32 _pitch = 0;
|
||||
size_t _bitsSize = 0;
|
||||
uint8 * _bits = nullptr;
|
||||
public:
|
||||
X8RainDrawer();
|
||||
~X8RainDrawer();
|
||||
void SetDPI(rct_drawpixelinfo * dpi);
|
||||
void Draw(sint32 x, sint32 y, sint32 width, sint32 height, sint32 xStart, sint32 yStart) override;
|
||||
void Restore();
|
||||
};
|
||||
|
||||
DirtyGrid _dirtyGrid = { 0 };
|
||||
#pragma GCC diagnostic push
|
||||
#pragma GCC diagnostic ignored "-Wsuggest-final-types"
|
||||
class X8DrawingEngine : public IDrawingEngine
|
||||
{
|
||||
private:
|
||||
Paint::Painter * _painter = nullptr;
|
||||
|
||||
rct_drawpixelinfo _bitsDPI = { 0 };
|
||||
protected:
|
||||
uint32 _width = 0;
|
||||
uint32 _height = 0;
|
||||
uint32 _pitch = 0;
|
||||
size_t _bitsSize = 0;
|
||||
uint8 * _bits = nullptr;
|
||||
|
||||
#ifdef __ENABLE_LIGHTFX__
|
||||
bool _lastLightFXenabled = false;
|
||||
#endif
|
||||
DirtyGrid _dirtyGrid = { 0 };
|
||||
|
||||
X8RainDrawer _rainDrawer;
|
||||
X8DrawingContext * _drawingContext;
|
||||
rct_drawpixelinfo _bitsDPI = { 0 };
|
||||
|
||||
public:
|
||||
explicit X8DrawingEngine();
|
||||
~X8DrawingEngine() override;
|
||||
#ifdef __ENABLE_LIGHTFX__
|
||||
bool _lastLightFXenabled = false;
|
||||
#endif
|
||||
|
||||
void Initialise() override;
|
||||
void Resize(uint32 width, uint32 height) override;
|
||||
void SetPalette(const rct_palette_entry * palette) override;
|
||||
void SetUncappedFrameRate(bool uncapped) override;
|
||||
void Invalidate(sint32 left, sint32 top, sint32 right, sint32 bottom) override;
|
||||
void Draw() override;
|
||||
void CopyRect(sint32 x, sint32 y, sint32 width, sint32 height, sint32 dx, sint32 dy) override;
|
||||
sint32 Screenshot() override;
|
||||
IDrawingContext * GetDrawingContext(rct_drawpixelinfo * dpi) override;
|
||||
rct_drawpixelinfo * GetDrawingPixelInfo() override;
|
||||
DRAWING_ENGINE_FLAGS GetFlags() override;
|
||||
void InvalidateImage(uint32 image) override;
|
||||
X8RainDrawer _rainDrawer;
|
||||
X8DrawingContext * _drawingContext;
|
||||
|
||||
rct_drawpixelinfo * GetDPI();
|
||||
public:
|
||||
explicit X8DrawingEngine(Ui::IUiContext * uiContext);
|
||||
~X8DrawingEngine() override;
|
||||
|
||||
protected:
|
||||
void ConfigureBits(uint32 width, uint32 height, uint32 pitch);
|
||||
void Initialise() override;
|
||||
void Resize(uint32 width, uint32 height) override;
|
||||
void SetPalette(const rct_palette_entry * palette) override;
|
||||
void SetUncappedFrameRate(bool uncapped) override;
|
||||
void Invalidate(sint32 left, sint32 top, sint32 right, sint32 bottom) override;
|
||||
void Draw() override;
|
||||
void CopyRect(sint32 x, sint32 y, sint32 width, sint32 height, sint32 dx, sint32 dy) override;
|
||||
sint32 Screenshot() override;
|
||||
IDrawingContext * GetDrawingContext(rct_drawpixelinfo * dpi) override;
|
||||
rct_drawpixelinfo * GetDrawingPixelInfo() override;
|
||||
DRAWING_ENGINE_FLAGS GetFlags() override;
|
||||
void InvalidateImage(uint32 image) override;
|
||||
|
||||
private:
|
||||
void ConfigureDirtyGrid();
|
||||
static void ResetWindowVisbilities();
|
||||
void DrawAllDirtyBlocks();
|
||||
void DrawDirtyBlocks(uint32 x, uint32 y, uint32 columns, uint32 rows);
|
||||
};
|
||||
#pragma GCC diagnostic pop
|
||||
rct_drawpixelinfo * GetDPI();
|
||||
|
||||
class X8DrawingContext final : public IDrawingContext
|
||||
{
|
||||
private:
|
||||
X8DrawingEngine * _engine = nullptr;
|
||||
rct_drawpixelinfo * _dpi = nullptr;
|
||||
protected:
|
||||
void ConfigureBits(uint32 width, uint32 height, uint32 pitch);
|
||||
|
||||
public:
|
||||
explicit X8DrawingContext(X8DrawingEngine * engine);
|
||||
~X8DrawingContext() override;
|
||||
private:
|
||||
void ConfigureDirtyGrid();
|
||||
static void ResetWindowVisbilities();
|
||||
void DrawAllDirtyBlocks();
|
||||
void DrawDirtyBlocks(uint32 x, uint32 y, uint32 columns, uint32 rows);
|
||||
};
|
||||
#pragma GCC diagnostic pop
|
||||
|
||||
IDrawingEngine * GetEngine() override;
|
||||
class X8DrawingContext final : public IDrawingContext
|
||||
{
|
||||
private:
|
||||
X8DrawingEngine * _engine = nullptr;
|
||||
rct_drawpixelinfo * _dpi = nullptr;
|
||||
|
||||
void Clear(uint8 paletteIndex) override;
|
||||
void FillRect(uint32 colour, sint32 x, sint32 y, sint32 w, sint32 h) override;
|
||||
void FilterRect(FILTER_PALETTE_ID palette, sint32 left, sint32 top, sint32 right, sint32 bottom) override;
|
||||
void DrawLine(uint32 colour, sint32 x1, sint32 y1, sint32 x2, sint32 y2) override;
|
||||
void DrawSprite(uint32 image, sint32 x, sint32 y, uint32 tertiaryColour) override;
|
||||
void DrawSpriteRawMasked(sint32 x, sint32 y, uint32 maskImage, uint32 colourImage) override;
|
||||
void DrawSpriteSolid(uint32 image, sint32 x, sint32 y, uint8 colour) override;
|
||||
void DrawGlyph(uint32 image, sint32 x, sint32 y, uint8 * palette) override;
|
||||
public:
|
||||
explicit X8DrawingContext(X8DrawingEngine * engine);
|
||||
~X8DrawingContext() override;
|
||||
|
||||
void SetDPI(rct_drawpixelinfo * dpi);
|
||||
};
|
||||
} }
|
||||
IDrawingEngine * GetEngine() override;
|
||||
|
||||
void Clear(uint8 paletteIndex) override;
|
||||
void FillRect(uint32 colour, sint32 x, sint32 y, sint32 w, sint32 h) override;
|
||||
void FilterRect(FILTER_PALETTE_ID palette, sint32 left, sint32 top, sint32 right, sint32 bottom) override;
|
||||
void DrawLine(uint32 colour, sint32 x1, sint32 y1, sint32 x2, sint32 y2) override;
|
||||
void DrawSprite(uint32 image, sint32 x, sint32 y, uint32 tertiaryColour) override;
|
||||
void DrawSpriteRawMasked(sint32 x, sint32 y, uint32 maskImage, uint32 colourImage) override;
|
||||
void DrawSpriteSolid(uint32 image, sint32 x, sint32 y, uint8 colour) override;
|
||||
void DrawGlyph(uint32 image, sint32 x, sint32 y, uint8 * palette) override;
|
||||
|
||||
void SetDPI(rct_drawpixelinfo * dpi);
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -363,8 +363,6 @@ void shorten_path(utf8 *buffer, size_t bufferSize, const utf8 *path, sint32 avai
|
||||
void scrolling_text_initialise_bitmaps();
|
||||
sint32 scrolling_text_setup(rct_string_id stringId, uint16 scroll, uint16 scrollingMode);
|
||||
|
||||
void rct2_draw(rct_drawpixelinfo *dpi);
|
||||
|
||||
#include "NewDrawing.h"
|
||||
|
||||
#endif
|
||||
|
||||
103
src/openrct2/paint/Painter.cpp
Normal file
103
src/openrct2/paint/Painter.cpp
Normal file
@@ -0,0 +1,103 @@
|
||||
#pragma region Copyright (c) 2014-2017 OpenRCT2 Developers
|
||||
/*****************************************************************************
|
||||
* OpenRCT2, an open source clone of Roller Coaster Tycoon 2.
|
||||
*
|
||||
* OpenRCT2 is the work of many authors, a full list can be found in contributors.md
|
||||
* For more information, visit https://github.com/OpenRCT2/OpenRCT2
|
||||
*
|
||||
* OpenRCT2 is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* A full copy of the GNU General Public License can be found in licence.txt
|
||||
*****************************************************************************/
|
||||
#pragma endregion
|
||||
|
||||
#include "../config/Config.h"
|
||||
#include "../title/TitleScreen.h"
|
||||
#include "../ui/UiContext.h"
|
||||
#include "Painter.h"
|
||||
|
||||
extern "C"
|
||||
{
|
||||
#include "../drawing/drawing.h"
|
||||
#include "../game.h"
|
||||
#include "../interface/chat.h"
|
||||
#include "../interface/console.h"
|
||||
#include "../intro.h"
|
||||
#include "../localisation/localisation.h"
|
||||
}
|
||||
|
||||
using namespace OpenRCT2;
|
||||
using namespace OpenRCT2::Paint;
|
||||
using namespace OpenRCT2::Ui;
|
||||
|
||||
Painter::Painter(IUiContext * uiContext)
|
||||
: _uiContext(uiContext)
|
||||
{
|
||||
}
|
||||
|
||||
void Painter::Paint(rct_drawpixelinfo * dpi)
|
||||
{
|
||||
if (gIntroState != INTRO_STATE_NONE)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
update_palette_effects();
|
||||
|
||||
chat_draw(dpi);
|
||||
console_draw(dpi);
|
||||
|
||||
if ((gScreenFlags & SCREEN_FLAGS_TITLE_DEMO) && !gTitleHideVersionInfo)
|
||||
{
|
||||
DrawOpenRCT2(dpi, 0, _uiContext->GetHeight() - 20);
|
||||
}
|
||||
|
||||
if (gConfigGeneral.show_fps)
|
||||
{
|
||||
PaintFPS(dpi);
|
||||
}
|
||||
|
||||
gCurrentDrawCount++;
|
||||
}
|
||||
|
||||
void Painter::PaintFPS(rct_drawpixelinfo * dpi)
|
||||
{
|
||||
sint32 x = _uiContext->GetWidth() / 2;
|
||||
sint32 y = 2;
|
||||
|
||||
// Measure FPS
|
||||
MeasureFPS();
|
||||
|
||||
// Format string
|
||||
utf8 buffer[64] = { 0 };
|
||||
utf8 * ch = buffer;
|
||||
ch = utf8_write_codepoint(ch, FORMAT_MEDIUMFONT);
|
||||
ch = utf8_write_codepoint(ch, FORMAT_OUTLINE);
|
||||
ch = utf8_write_codepoint(ch, FORMAT_WHITE);
|
||||
|
||||
snprintf(ch, 64 - (ch - buffer), "%d", _currentFPS);
|
||||
|
||||
// Draw Text
|
||||
sint32 stringWidth = gfx_get_string_width(buffer);
|
||||
x = x - (stringWidth / 2);
|
||||
gfx_draw_string(dpi, buffer, 0, x, y);
|
||||
|
||||
// Make area dirty so the text doesn't get drawn over the last
|
||||
gfx_set_dirty_blocks(x - 16, y - 4, gLastDrawStringX + 16, 16);
|
||||
}
|
||||
|
||||
void Painter::MeasureFPS()
|
||||
{
|
||||
_frames++;
|
||||
|
||||
auto currentTime = time(nullptr);
|
||||
if (currentTime != _lastSecond)
|
||||
{
|
||||
_currentFPS = _frames;
|
||||
_frames = 0;
|
||||
}
|
||||
_lastSecond = currentTime;
|
||||
}
|
||||
49
src/openrct2/paint/Painter.h
Normal file
49
src/openrct2/paint/Painter.h
Normal file
@@ -0,0 +1,49 @@
|
||||
#pragma region Copyright (c) 2014-2017 OpenRCT2 Developers
|
||||
/*****************************************************************************
|
||||
* OpenRCT2, an open source clone of Roller Coaster Tycoon 2.
|
||||
*
|
||||
* OpenRCT2 is the work of many authors, a full list can be found in contributors.md
|
||||
* For more information, visit https://github.com/OpenRCT2/OpenRCT2
|
||||
*
|
||||
* OpenRCT2 is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* A full copy of the GNU General Public License can be found in licence.txt
|
||||
*****************************************************************************/
|
||||
#pragma endregion
|
||||
|
||||
#include <time.h>
|
||||
#include "../common.h"
|
||||
|
||||
struct rct_drawpixelinfo;
|
||||
|
||||
namespace OpenRCT2
|
||||
{
|
||||
namespace Ui
|
||||
{
|
||||
interface IUiContext;
|
||||
}
|
||||
|
||||
namespace Paint
|
||||
{
|
||||
class Painter final
|
||||
{
|
||||
private:
|
||||
Ui::IUiContext * const _uiContext;
|
||||
|
||||
time_t _lastSecond = 0;
|
||||
sint32 _currentFPS = 0;
|
||||
sint32 _frames = 0;
|
||||
|
||||
public:
|
||||
Painter(Ui::IUiContext * uiContext);
|
||||
void Paint(rct_drawpixelinfo * dpi);
|
||||
|
||||
private:
|
||||
void PaintFPS(rct_drawpixelinfo * dpi);
|
||||
void MeasureFPS();
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -127,8 +127,6 @@ typedef struct tm tm_t;
|
||||
|
||||
void print_launch_information();
|
||||
|
||||
static void rct2_draw_fps(rct_drawpixelinfo *dpi);
|
||||
|
||||
void rct2_quit()
|
||||
{
|
||||
gSavePromptMode = PM_QUIT;
|
||||
@@ -192,77 +190,6 @@ void substitute_path(char *dest, size_t size, const char *path, const char *file
|
||||
safe_strcpy(dest, filename, size - written);
|
||||
}
|
||||
|
||||
void rct2_draw(rct_drawpixelinfo *dpi)
|
||||
{
|
||||
if (gIntroState != INTRO_STATE_NONE) {
|
||||
return;
|
||||
}
|
||||
|
||||
// redraw_rain();
|
||||
// window_update_all();
|
||||
// gfx_invalidate_pickedup_peep();
|
||||
// gfx_draw_pickedup_peep();
|
||||
// update_rain_animation();
|
||||
update_palette_effects();
|
||||
|
||||
chat_draw(dpi);
|
||||
console_draw(dpi);
|
||||
|
||||
if ((gScreenFlags & SCREEN_FLAGS_TITLE_DEMO) && !gTitleHideVersionInfo) {
|
||||
DrawOpenRCT2(dpi, 0, context_get_height() - 20);
|
||||
}
|
||||
|
||||
if (gConfigGeneral.show_fps) {
|
||||
rct2_draw_fps(dpi);
|
||||
}
|
||||
|
||||
gCurrentDrawCount++;
|
||||
}
|
||||
|
||||
static time_t _lastSecond;
|
||||
static sint32 _currentFPS;
|
||||
static sint32 _frames;
|
||||
|
||||
static void rct2_measure_fps()
|
||||
{
|
||||
_frames++;
|
||||
|
||||
time_t currentTime = time(NULL);
|
||||
|
||||
if (currentTime != _lastSecond) {
|
||||
_currentFPS = _frames;
|
||||
_frames = 0;
|
||||
}
|
||||
|
||||
_lastSecond = currentTime;
|
||||
}
|
||||
|
||||
static void rct2_draw_fps(rct_drawpixelinfo *dpi)
|
||||
{
|
||||
sint32 x = context_get_width() / 2;
|
||||
sint32 y = 2;
|
||||
|
||||
// Measure FPS
|
||||
rct2_measure_fps();
|
||||
|
||||
// Format string
|
||||
utf8 buffer[64];
|
||||
utf8 *ch = buffer;
|
||||
ch = utf8_write_codepoint(ch, FORMAT_MEDIUMFONT);
|
||||
ch = utf8_write_codepoint(ch, FORMAT_OUTLINE);
|
||||
ch = utf8_write_codepoint(ch, FORMAT_WHITE);
|
||||
|
||||
snprintf(ch, 64 - (ch - buffer), "%d", _currentFPS);
|
||||
|
||||
// Draw Text
|
||||
sint32 stringWidth = gfx_get_string_width(buffer);
|
||||
x = x - (stringWidth / 2);
|
||||
gfx_draw_string(dpi, buffer, 0, x, y);
|
||||
|
||||
// Make area dirty so the text doesn't get drawn over the last
|
||||
gfx_set_dirty_blocks(x - 16, y - 4, gLastDrawStringX + 16, 16);
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* rct2: 0x00674E6C
|
||||
|
||||
@@ -16,12 +16,12 @@
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "../drawing/drawing.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
{
|
||||
#endif
|
||||
#include "../drawing/drawing.h"
|
||||
|
||||
extern bool gTitleHideVersionInfo;
|
||||
extern uint16 gTitleCurrentSequence;
|
||||
|
||||
|
||||
@@ -64,7 +64,7 @@ namespace OpenRCT2 { namespace Ui
|
||||
// Drawing
|
||||
Drawing::IDrawingEngine * CreateDrawingEngine(Drawing::DRAWING_ENGINE_TYPE type) override
|
||||
{
|
||||
return new X8DrawingEngine();
|
||||
return new X8DrawingEngine(this);
|
||||
}
|
||||
|
||||
// Text input
|
||||
|
||||
Reference in New Issue
Block a user