diff --git a/src/openrct2-cli/Cli.cpp b/src/openrct2-cli/Cli.cpp index c9deea36e2..5e2a37ff0b 100644 --- a/src/openrct2-cli/Cli.cpp +++ b/src/openrct2-cli/Cli.cpp @@ -21,7 +21,6 @@ int main(int argc, const char** argv) { int32_t rc = EXIT_SUCCESS; int runGame = CommandLineRun(argv, argc); - Platform::CoreInit(); if (runGame == EXITCODE_CONTINUE) { gOpenRCT2Headless = true; diff --git a/src/openrct2-ui/Ui.cpp b/src/openrct2-ui/Ui.cpp index eeda41160d..3364bb29e8 100644 --- a/src/openrct2-ui/Ui.cpp +++ b/src/openrct2-ui/Ui.cpp @@ -44,7 +44,6 @@ int main(int argc, const char** argv) std::unique_ptr context; int32_t rc = EXIT_SUCCESS; int runGame = CommandLineRun(argv, argc); - Platform::CoreInit(); RegisterBitmapReader(); if (runGame == EXITCODE_CONTINUE) { diff --git a/src/openrct2/command_line/BenchSpriteSort.cpp b/src/openrct2/command_line/BenchSpriteSort.cpp index 3b360a6c5d..e24c76c812 100644 --- a/src/openrct2/command_line/BenchSpriteSort.cpp +++ b/src/openrct2/command_line/BenchSpriteSort.cpp @@ -70,7 +70,6 @@ static void fixup_pointers(std::vector& s) static std::vector extract_paint_session(std::string_view parkFileName) { - Platform::CoreInit(); gOpenRCT2Headless = true; auto context = OpenRCT2::CreateContext(); std::vector sessions; diff --git a/src/openrct2/command_line/BenchUpdate.cpp b/src/openrct2/command_line/BenchUpdate.cpp index ec1b628197..d87777a8da 100644 --- a/src/openrct2/command_line/BenchUpdate.cpp +++ b/src/openrct2/command_line/BenchUpdate.cpp @@ -118,7 +118,6 @@ static int CommandLineForBenchSpriteSort(int argc, const char* const* argv) if (::benchmark::ReportUnrecognizedArguments(argc, &argv_for_benchmark[0])) return -1; - Platform::CoreInit(); gOpenRCT2Headless = true; ::benchmark::RunSpecifiedBenchmarks(); diff --git a/src/openrct2/command_line/SimulateCommands.cpp b/src/openrct2/command_line/SimulateCommands.cpp index 1dfc7526dc..22fdca0712 100644 --- a/src/openrct2/command_line/SimulateCommands.cpp +++ b/src/openrct2/command_line/SimulateCommands.cpp @@ -39,8 +39,6 @@ static exitcode_t HandleSimulate(CommandLineArgEnumerator* argEnumerator) return EXITCODE_FAIL; } - Platform::CoreInit(); - const char* inputPath = argv[0]; uint32_t ticks = atol(argv[1]); diff --git a/src/openrct2/drawing/Drawing.cpp b/src/openrct2/drawing/Drawing.cpp index dbdbe752a8..5b46494e2c 100644 --- a/src/openrct2/drawing/Drawing.cpp +++ b/src/openrct2/drawing/Drawing.cpp @@ -709,30 +709,34 @@ ImageCatalogue ImageId::GetCatalogue() const return ImageCatalogue::UNKNOWN; } -void (*MaskFn)( - int32_t width, int32_t height, const uint8_t* RESTRICT maskSrc, const uint8_t* RESTRICT colourSrc, uint8_t* RESTRICT dst, - int32_t maskWrap, int32_t colourWrap, int32_t dstWrap) - = nullptr; - -void MaskInit() +static auto GetMaskFunction() { if (AVX2Available()) { LOG_VERBOSE("registering AVX2 mask function"); - MaskFn = MaskAvx2; + return MaskAvx2; } else if (SSE41Available()) { LOG_VERBOSE("registering SSE4.1 mask function"); - MaskFn = MaskSse4_1; + return MaskSse4_1; } else { LOG_VERBOSE("registering scalar mask function"); - MaskFn = MaskScalar; + return MaskScalar; } } +static const auto MaskFunc = GetMaskFunction(); + +void MaskFn( + int32_t width, int32_t height, const uint8_t* RESTRICT maskSrc, const uint8_t* RESTRICT colourSrc, uint8_t* RESTRICT dst, + int32_t maskWrap, int32_t colourWrap, int32_t dstWrap) +{ + MaskFunc(width, height, maskSrc, colourSrc, dst, maskWrap, colourWrap, dstWrap); +} + void GfxFilterPixel(DrawPixelInfo& dpi, const ScreenCoordsXY& coords, FilterPaletteID palette) { GfxFilterRect(dpi, { coords, coords }, palette); diff --git a/src/openrct2/drawing/Drawing.h b/src/openrct2/drawing/Drawing.h index 690b6c3e30..35da0cfd23 100644 --- a/src/openrct2/drawing/Drawing.h +++ b/src/openrct2/drawing/Drawing.h @@ -597,9 +597,8 @@ void MaskSse4_1( void MaskAvx2( int32_t width, int32_t height, const uint8_t* RESTRICT maskSrc, const uint8_t* RESTRICT colourSrc, uint8_t* RESTRICT dst, int32_t maskWrap, int32_t colourWrap, int32_t dstWrap); -void MaskInit(); -extern void (*MaskFn)( +void MaskFn( int32_t width, int32_t height, const uint8_t* RESTRICT maskSrc, const uint8_t* RESTRICT colourSrc, uint8_t* RESTRICT dst, int32_t maskWrap, int32_t colourWrap, int32_t dstWrap); diff --git a/src/openrct2/interface/Screenshot.cpp b/src/openrct2/interface/Screenshot.cpp index 5533aad5f6..24ec108206 100644 --- a/src/openrct2/interface/Screenshot.cpp +++ b/src/openrct2/interface/Screenshot.cpp @@ -490,7 +490,6 @@ int32_t CommandLineForGfxbench(const char** argv, int32_t argc) return -1; } - Platform::CoreInit(); int32_t iterationCount = 5; if (argc == 2) { @@ -587,7 +586,6 @@ int32_t CommandLineForScreenshot(const char** argv, int32_t argc, ScreenshotOpti DrawPixelInfo dpi; try { - Platform::CoreInit(); bool customLocation = false; bool centreMapX = false; bool centreMapY = false; diff --git a/src/openrct2/libopenrct2.vcxproj b/src/openrct2/libopenrct2.vcxproj index f502c74a9b..950019c42e 100644 --- a/src/openrct2/libopenrct2.vcxproj +++ b/src/openrct2/libopenrct2.vcxproj @@ -351,7 +351,7 @@ - + @@ -875,10 +875,10 @@ + - @@ -1054,9 +1054,10 @@ NotUsing - + + TurnOffAllWarnings - + \ No newline at end of file diff --git a/src/openrct2/platform/Platform.Android.cpp b/src/openrct2/platform/Platform.Android.cpp index 8ca55ac3c4..068432d18d 100644 --- a/src/openrct2/platform/Platform.Android.cpp +++ b/src/openrct2/platform/Platform.Android.cpp @@ -27,7 +27,7 @@ AndroidClassLoader::~AndroidClassLoader() jobject AndroidClassLoader::_classLoader; jmethodID AndroidClassLoader::_findClassMethod; -static std::shared_ptr acl; +static std::shared_ptr acl = std::make_shared(); namespace Platform { @@ -173,11 +173,6 @@ namespace Platform return displayScale; } - void AndroidInitClassLoader() - { - acl = std::make_shared(); - } - jclass AndroidFindClass(JNIEnv* env, std::string_view name) { return static_cast(env->CallObjectMethod( diff --git a/src/openrct2/platform/Shared.cpp b/src/openrct2/platform/Platform.Common.cpp similarity index 88% rename from src/openrct2/platform/Shared.cpp rename to src/openrct2/platform/Platform.Common.cpp index 661f9aebf3..bbb492db7d 100644 --- a/src/openrct2/platform/Shared.cpp +++ b/src/openrct2/platform/Platform.Common.cpp @@ -24,7 +24,9 @@ #include #include +#include #include +#include #include #ifdef _WIN32 @@ -35,23 +37,6 @@ static constexpr std::array _prohibitedCharacters = { '/' }; namespace Platform { - void CoreInit() - { - static bool initialised = false; - if (!initialised) - { - initialised = true; - -#ifdef __ANDROID__ - Platform::AndroidInitClassLoader(); -#endif // __ANDROID__ - - InitTicks(); - BitCountInit(); - MaskInit(); - } - } - CurrencyType GetCurrencyValue(const char* currCode) { if (currCode == nullptr || strlen(currCode) < 3) @@ -136,4 +121,18 @@ namespace Platform return 1; } #endif + + void Sleep(uint32_t ms) + { + std::this_thread::sleep_for(std::chrono::milliseconds(ms)); + } + + static const auto _processStartTime = std::chrono::high_resolution_clock::now(); + + uint32_t GetTicks() + { + const auto processTime = std::chrono::high_resolution_clock::now() - _processStartTime; + return static_cast(std::chrono::duration_cast(processTime).count()); + } + } // namespace Platform diff --git a/src/openrct2/platform/Platform.Posix.cpp b/src/openrct2/platform/Platform.Posix.cpp index 76606501d3..381d96100f 100644 --- a/src/openrct2/platform/Platform.Posix.cpp +++ b/src/openrct2/platform/Platform.Posix.cpp @@ -379,25 +379,6 @@ namespace Platform return u8"app_285330" PATH_SEPARATOR u8"depot_285331"; } - void Sleep(uint32_t ms) - { - usleep(ms * 1000); - } - - void InitTicks() - { - } - - uint32_t GetTicks() - { - struct timespec ts; - if (clock_gettime(CLOCK_MONOTONIC, &ts) != 0) - { - LOG_FATAL("clock_gettime failed"); - exit(-1); - } - return static_cast(ts.tv_sec * 1000 + ts.tv_nsec / 1000000); - } } // namespace Platform #endif diff --git a/src/openrct2/platform/Platform.Win32.cpp b/src/openrct2/platform/Platform.Win32.cpp index 85178dc975..402848f9e9 100644 --- a/src/openrct2/platform/Platform.Win32.cpp +++ b/src/openrct2/platform/Platform.Win32.cpp @@ -41,10 +41,6 @@ # pragma comment( \ linker, \ "\"/manifestdependency:type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"") - -static uint32_t _frequency = 0; -static LARGE_INTEGER _entryTimestamp; - // The name of the mutex used to prevent multiple instances of the game from running static constexpr wchar_t SINGLE_INSTANCE_MUTEX_NAME[] = L"RollerCoaster Tycoon 2_GSKMUTEX"; @@ -901,29 +897,6 @@ namespace Platform return false; } - uint32_t GetTicks() - { - LARGE_INTEGER pfc; - QueryPerformanceCounter(&pfc); - - LARGE_INTEGER runningDelta; - runningDelta.QuadPart = pfc.QuadPart - _entryTimestamp.QuadPart; - - return static_cast(runningDelta.QuadPart / _frequency); - } - - void Sleep(uint32_t ms) - { - ::Sleep(ms); - } - - void InitTicks() - { - LARGE_INTEGER freq; - QueryPerformanceFrequency(&freq); - _frequency = static_cast(freq.QuadPart / 1000); - QueryPerformanceCounter(&_entryTimestamp); - } } // namespace Platform #endif diff --git a/src/openrct2/platform/Platform.h b/src/openrct2/platform/Platform.h index 1384fa3661..ce97861555 100644 --- a/src/openrct2/platform/Platform.h +++ b/src/openrct2/platform/Platform.h @@ -45,8 +45,6 @@ struct RealWorldTime; namespace Platform { - // Called very early in the program before parsing commandline arguments. - void CoreInit(); std::string GetEnvironmentVariable(std::string_view name); std::string GetFolderPath(SPECIAL_FOLDER folder); std::string GetInstallPath(); @@ -103,7 +101,6 @@ namespace Platform bool SetupUriProtocol(); #endif #ifdef __ANDROID__ - void AndroidInitClassLoader(); jclass AndroidFindClass(JNIEnv* env, std::string_view name); #endif @@ -125,7 +122,6 @@ namespace Platform uint32_t GetTicks(); void Sleep(uint32_t ms); - void InitTicks(); } // namespace Platform #ifdef __ANDROID__ diff --git a/src/openrct2/util/Util.cpp b/src/openrct2/util/Util.cpp index b8a0806d15..7979d9a75f 100644 --- a/src/openrct2/util/Util.cpp +++ b/src/openrct2/util/Util.cpp @@ -204,12 +204,7 @@ static int32_t BitCountLut(uint32_t source) + BitsSetTable256[source >> 24]; } -static int32_t (*BitCountFn)(uint32_t); - -void BitCountInit() -{ - BitCountFn = BitCountPopcntAvailable() ? BitCountPopcnt : BitCountLut; -} +static const auto BitCountFn = BitCountPopcntAvailable() ? BitCountPopcnt : BitCountLut; int32_t BitCount(uint32_t source) { diff --git a/src/openrct2/util/Util.h b/src/openrct2/util/Util.h index 5ec8b7e6fb..ef3809a0b2 100644 --- a/src/openrct2/util/Util.h +++ b/src/openrct2/util/Util.h @@ -28,7 +28,6 @@ bool AVX2Available(); int32_t UtilBitScanForward(int32_t source); int32_t UtilBitScanForward(int64_t source); -void BitCountInit(); int32_t BitCount(uint32_t source); int32_t StrLogicalCmp(char const* a, char const* b); char* SafeStrCpy(char* destination, const char* source, size_t num); diff --git a/test/tests/MultiLaunch.cpp b/test/tests/MultiLaunch.cpp index fc1146bca3..ed0af996eb 100644 --- a/test/tests/MultiLaunch.cpp +++ b/test/tests/MultiLaunch.cpp @@ -34,7 +34,6 @@ TEST(MultiLaunchTest, all) gOpenRCT2Headless = true; gOpenRCT2NoGraphics = true; - Platform::CoreInit(); for (int i = 0; i < 3; i++) { auto context = CreateContext(); diff --git a/test/tests/Pathfinding.cpp b/test/tests/Pathfinding.cpp index 32aa2c93f5..71fbe3038e 100644 --- a/test/tests/Pathfinding.cpp +++ b/test/tests/Pathfinding.cpp @@ -29,8 +29,6 @@ class PathfindingTestBase : public testing::Test public: static void SetUpTestCase() { - Platform::CoreInit(); - gOpenRCT2Headless = true; gOpenRCT2NoGraphics = true; _context = CreateContext(); diff --git a/test/tests/PlayTests.cpp b/test/tests/PlayTests.cpp index 43c147d540..238e89b839 100644 --- a/test/tests/PlayTests.cpp +++ b/test/tests/PlayTests.cpp @@ -41,7 +41,6 @@ static std::unique_ptr localStartGame(const std::string& parkPath) { gOpenRCT2Headless = true; gOpenRCT2NoGraphics = true; - Platform::CoreInit(); auto context = CreateContext(); if (!context->Initialise()) diff --git a/test/tests/ReplayTests.cpp b/test/tests/ReplayTests.cpp index 7aee8464de..4d450480b4 100644 --- a/test/tests/ReplayTests.cpp +++ b/test/tests/ReplayTests.cpp @@ -73,7 +73,6 @@ TEST_P(ReplayTests, RunReplay) { gOpenRCT2Headless = true; gOpenRCT2NoGraphics = true; - Platform::CoreInit(); auto testData = GetParam(); auto replayFile = testData.filePath; diff --git a/test/tests/RideRatings.cpp b/test/tests/RideRatings.cpp index ba75d89d20..9ec03030a2 100644 --- a/test/tests/RideRatings.cpp +++ b/test/tests/RideRatings.cpp @@ -65,7 +65,6 @@ protected: gOpenRCT2Headless = true; gOpenRCT2NoGraphics = true; - Platform::CoreInit(); auto context = CreateContext(); bool initialised = context->Initialise(); ASSERT_TRUE(initialised); diff --git a/test/tests/S6ImportExportTests.cpp b/test/tests/S6ImportExportTests.cpp index 58436b15fd..5cd4541094 100644 --- a/test/tests/S6ImportExportTests.cpp +++ b/test/tests/S6ImportExportTests.cpp @@ -187,8 +187,6 @@ TEST(S6ImportExportBasic, all) gOpenRCT2Headless = true; gOpenRCT2NoGraphics = true; - Platform::CoreInit(); - MemoryStream importBuffer; MemoryStream exportBuffer; MemoryStream snapshotStream; @@ -233,8 +231,6 @@ TEST(S6ImportExportAdvanceTicks, all) gOpenRCT2Headless = true; gOpenRCT2NoGraphics = true; - Platform::CoreInit(); - MemoryStream importBuffer; MemoryStream exportBuffer; MemoryStream snapshotStream;