From dbd50d08c6705966ad9facec676d374176d7c8c8 Mon Sep 17 00:00:00 2001 From: Hielke Morsink Date: Wed, 29 Sep 2021 20:05:54 +0200 Subject: [PATCH] Split double meaning of "max zoom" in screenshot code One being the max value, the other being the max amount of zoom levels. --- src/openrct2/interface/Screenshot.cpp | 35 +++++++++++++++------------ 1 file changed, 19 insertions(+), 16 deletions(-) diff --git a/src/openrct2/interface/Screenshot.cpp b/src/openrct2/interface/Screenshot.cpp index 826c104ff8..83b3051900 100644 --- a/src/openrct2/interface/Screenshot.cpp +++ b/src/openrct2/interface/Screenshot.cpp @@ -447,31 +447,32 @@ static void benchgfx_render_screenshots(const char* inputPath, std::unique_ptr dpis; - std::array viewports; + constexpr auto NUM_ZOOM_LEVELS = static_cast(ZoomLevel::max()); + std::array dpis; + std::array viewports; - for (int32_t zoom = 0; zoom < MAX_ZOOM_LEVEL; zoom++) + for (ZoomLevel zoom{ 0 }; zoom < ZoomLevel::max(); zoom++) { + int32_t zoomIndex{ static_cast(zoom) }; for (int32_t rotation = 0; rotation < MAX_ROTATIONS; rotation++) { - auto& viewport = viewports[zoom * MAX_ZOOM_LEVEL + rotation]; - auto& dpi = dpis[zoom * MAX_ZOOM_LEVEL + rotation]; + auto& viewport = viewports[zoomIndex * NUM_ZOOM_LEVELS + rotation]; + auto& dpi = dpis[zoomIndex * NUM_ZOOM_LEVELS + rotation]; viewport = GetGiantViewport(gMapSize, rotation, zoom); dpi = CreateDPI(viewport); } } - const uint32_t totalRenderCount = iterationCount * MAX_ROTATIONS * MAX_ZOOM_LEVEL; + const uint32_t totalRenderCount = iterationCount * MAX_ROTATIONS * NUM_ZOOM_LEVELS; try { double totalTime = 0.0; - std::array zoomAverages; + std::array zoomAverages; // Render at every zoom. - for (int32_t zoom = 0; zoom < MAX_ZOOM_LEVEL; zoom++) + for (int32_t zoom = 0; zoom < NUM_ZOOM_LEVELS; zoom++) { double zoomLevelTime = 0.0; @@ -481,8 +482,8 @@ static void benchgfx_render_screenshots(const char* inputPath, std::unique_ptr(zoom) }; + const auto zoomAverage = zoomAverages[zoomIndex]; + std::printf("Zoom[%d] average: %.06fs, %.f FPS\n", zoomIndex, zoomAverage, 1.0 / zoomAverage); } std::printf("Total average: %.06fs, %.f FPS\n", average, 1.0 / average); std::printf("Time: %.05fs\n", totalTime); @@ -647,7 +649,8 @@ int32_t cmdline_for_screenshot(const char** argv, int32_t argc, ScreenshotOption rct_viewport viewport{}; if (giantScreenshot) { - auto zoom = std::atoi(argv[3]); + auto customZoom = static_cast(std::atoi(argv[3])); + auto zoom = ZoomLevel{ customZoom }; auto rotation = std::atoi(argv[4]) & 3; viewport = GetGiantViewport(gMapSize, rotation, zoom); gCurrentRotation = rotation; @@ -705,7 +708,7 @@ int32_t cmdline_for_screenshot(const char** argv, int32_t argc, ScreenshotOption viewport.viewPos = { coords2d.x - ((viewport.view_width << customZoom) / 2), coords2d.y - ((viewport.view_height << customZoom) / 2) }; - viewport.zoom = customZoom; + viewport.zoom = ZoomLevel{ static_cast(customZoom) }; gCurrentRotation = customRotation; } else