mirror of
https://github.com/OpenRCT2/OpenRCT2
synced 2025-12-23 07:43:01 +01:00
Avoid copy and allocation for rendering the viewport (#13911)
This commit is contained in:
@@ -46,6 +46,7 @@ static std::list<rct_viewport> _viewports;
|
|||||||
rct_viewport* g_music_tracking_viewport;
|
rct_viewport* g_music_tracking_viewport;
|
||||||
|
|
||||||
static std::unique_ptr<JobPool> _paintJobs;
|
static std::unique_ptr<JobPool> _paintJobs;
|
||||||
|
static std::vector<paint_session*> _paintColumns;
|
||||||
|
|
||||||
ScreenCoordsXY gSavedView;
|
ScreenCoordsXY gSavedView;
|
||||||
ZoomLevel gSavedViewZoom;
|
ZoomLevel gSavedViewZoom;
|
||||||
@@ -942,7 +943,8 @@ void viewport_paint(
|
|||||||
y = y / viewport->zoom;
|
y = y / viewport->zoom;
|
||||||
y += viewport->pos.y;
|
y += viewport->pos.y;
|
||||||
|
|
||||||
rct_drawpixelinfo dpi1 = *dpi;
|
rct_drawpixelinfo dpi1;
|
||||||
|
dpi1.DrawingEngine = dpi->DrawingEngine;
|
||||||
dpi1.bits = dpi->bits + (x - dpi->x) + ((y - dpi->y) * (dpi->width + dpi->pitch));
|
dpi1.bits = dpi->bits + (x - dpi->x) + ((y - dpi->y) * (dpi->width + dpi->pitch));
|
||||||
dpi1.x = left;
|
dpi1.x = left;
|
||||||
dpi1.y = top;
|
dpi1.y = top;
|
||||||
@@ -958,7 +960,7 @@ void viewport_paint(
|
|||||||
const int16_t rightBorder = dpi1.x + dpi1.width;
|
const int16_t rightBorder = dpi1.x + dpi1.width;
|
||||||
const int16_t alignedX = floor2(dpi1.x, 32);
|
const int16_t alignedX = floor2(dpi1.x, 32);
|
||||||
|
|
||||||
std::vector<paint_session*> columns;
|
_paintColumns.clear();
|
||||||
|
|
||||||
bool useMultithreading = gConfigGeneral.multithreading;
|
bool useMultithreading = gConfigGeneral.multithreading;
|
||||||
if (useMultithreading && _paintJobs == nullptr)
|
if (useMultithreading && _paintJobs == nullptr)
|
||||||
@@ -983,7 +985,7 @@ void viewport_paint(
|
|||||||
for (x = alignedX; x < rightBorder; x += 32, index++)
|
for (x = alignedX; x < rightBorder; x += 32, index++)
|
||||||
{
|
{
|
||||||
paint_session* session = PaintSessionAlloc(&dpi1, viewFlags);
|
paint_session* session = PaintSessionAlloc(&dpi1, viewFlags);
|
||||||
columns.push_back(session);
|
_paintColumns.push_back(session);
|
||||||
|
|
||||||
rct_drawpixelinfo& dpi2 = session->DPI;
|
rct_drawpixelinfo& dpi2 = session->DPI;
|
||||||
if (x >= dpi2.x)
|
if (x >= dpi2.x)
|
||||||
@@ -1020,7 +1022,7 @@ void viewport_paint(
|
|||||||
_paintJobs->Join();
|
_paintJobs->Join();
|
||||||
}
|
}
|
||||||
|
|
||||||
for (auto column : columns)
|
for (auto column : _paintColumns)
|
||||||
{
|
{
|
||||||
viewport_paint_column(column);
|
viewport_paint_column(column);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user