diff --git a/src/android/app/src/main/cpp/AndroidAudio.cpp b/src/android/app/src/main/cpp/AndroidAudio.cpp index f409fc82..5c7040de 100644 --- a/src/android/app/src/main/cpp/AndroidAudio.cpp +++ b/src/android/app/src/main/cpp/AndroidAudio.cpp @@ -5,52 +5,52 @@ #if HAS_CUBEB #include "audio/CubebAPI.h" -#endif // HAS_CUBEB +#endif // HAS_CUBEB namespace AndroidAudio { -void createAudioDevice(IAudioAPI::AudioAPI audioApi, sint32 channels, sint32 volume, bool isTV) -{ - static constexpr int AX_FRAMES_PER_GROUP = 4; - std::unique_lock lock(g_audioMutex); - auto& audioDevice = isTV ? g_tvAudio : g_padAudio; - switch (channels) - { - case 0: - channels = 1; - break; - case 2: - channels = 6; - break; - default: // stereo - channels = 2; - break; - } - switch (audioApi) - { + void createAudioDevice(IAudioAPI::AudioAPI audioApi, sint32 channels, sint32 volume, bool isTV) + { + static constexpr int AX_FRAMES_PER_GROUP = 4; + std::unique_lock lock(g_audioMutex); + auto& audioDevice = isTV ? g_tvAudio : g_padAudio; + switch (channels) + { + case 0: + channels = 1; + break; + case 2: + channels = 6; + break; + default: // stereo + channels = 2; + break; + } + switch (audioApi) + { #if HAS_CUBEB - case IAudioAPI::AudioAPI::Cubeb: - { - audioDevice.reset(); - std::shared_ptr deviceDescriptionPtr = std::make_shared(nullptr, std::string(), std::wstring()); - audioDevice = IAudioAPI::CreateDevice(IAudioAPI::AudioAPI::Cubeb, deviceDescriptionPtr, 48000, channels, snd_core::AX_SAMPLES_PER_3MS_48KHZ * AX_FRAMES_PER_GROUP, 16); - audioDevice->SetVolume(volume); - break; - } -#endif // HAS_CUBEB - default: - cemuLog_log(LogType::Force, fmt::format("Invalid audio api: {}", audioApi)); - break; - } -} + case IAudioAPI::AudioAPI::Cubeb: + { + audioDevice.reset(); + std::shared_ptr deviceDescriptionPtr = std::make_shared(nullptr, std::string(), std::wstring()); + audioDevice = IAudioAPI::CreateDevice(IAudioAPI::AudioAPI::Cubeb, deviceDescriptionPtr, 48000, channels, snd_core::AX_SAMPLES_PER_3MS_48KHZ * AX_FRAMES_PER_GROUP, 16); + audioDevice->SetVolume(volume); + break; + } +#endif // HAS_CUBEB + default: + cemuLog_log(LogType::Force, "Invalid audio api: {}", audioApi); + break; + } + } -void setAudioVolume(sint32 volume, bool isTV) -{ - std::shared_lock lock(g_audioMutex); - auto& audioDevice = isTV ? g_tvAudio : g_padAudio; - if (audioDevice) - audioDevice->SetVolume(volume); -} + void setAudioVolume(sint32 volume, bool isTV) + { + std::shared_lock lock(g_audioMutex); + auto& audioDevice = isTV ? g_tvAudio : g_padAudio; + if (audioDevice) + audioDevice->SetVolume(volume); + } -}; // namespace AndroidAudio +}; // namespace AndroidAudio diff --git a/src/android/app/src/main/cpp/AndroidAudio.h b/src/android/app/src/main/cpp/AndroidAudio.h index ce03ab85..ef89e9ed 100644 --- a/src/android/app/src/main/cpp/AndroidAudio.h +++ b/src/android/app/src/main/cpp/AndroidAudio.h @@ -4,6 +4,6 @@ namespace AndroidAudio { -void createAudioDevice(IAudioAPI::AudioAPI audioApi, sint32 channels, sint32 volume, bool isTV = true); -void setAudioVolume(sint32 volume, bool isTV = true); -}; // namespace AndroidAudio + void createAudioDevice(IAudioAPI::AudioAPI audioApi, sint32 channels, sint32 volume, bool isTV = true); + void setAudioVolume(sint32 volume, bool isTV = true); +}; // namespace AndroidAudio diff --git a/src/android/app/src/main/cpp/AndroidEmulatedController.h b/src/android/app/src/main/cpp/AndroidEmulatedController.h index 7ca22713..7956a296 100644 --- a/src/android/app/src/main/cpp/AndroidEmulatedController.h +++ b/src/android/app/src/main/cpp/AndroidEmulatedController.h @@ -6,21 +6,21 @@ #include "input/emulated/ProController.h" #include "input/emulated/WiimoteController.h" -class AndroidEmulatedController -{ - private: +class AndroidEmulatedController { + private: size_t m_index; static std::array, InputManager::kMaxController> s_emulatedControllers; EmulatedControllerPtr m_emulatedController; - AndroidEmulatedController(size_t index) : m_index(index) + AndroidEmulatedController(size_t index) + : m_index(index) { m_emulatedController = InputManager::instance().get_controller(m_index); } - public: - static AndroidEmulatedController &getAndroidEmulatedController(size_t index) + public: + static AndroidEmulatedController& getAndroidEmulatedController(size_t index) { - auto &controller = s_emulatedControllers.at(index); + auto& controller = s_emulatedControllers.at(index); if (!controller) controller = std::unique_ptr(new AndroidEmulatedController(index)); return *controller; @@ -36,9 +36,8 @@ class AndroidEmulatedController { if (m_emulatedController && controller) { - const auto &controllers = m_emulatedController->get_controllers(); - auto controllerIt = std::find_if(controllers.begin(), controllers.end(), [&](const ControllerPtr &c) - { return c->api() == controller->api() && c->uuid() == controller->uuid(); }); + const auto& controllers = m_emulatedController->get_controllers(); + auto controllerIt = std::find_if(controllers.begin(), controllers.end(), [&](const ControllerPtr& c) { return c->api() == controller->api() && c->uuid() == controller->uuid(); }); if (controllerIt == controllers.end()) m_emulatedController->add_controller(controller); else diff --git a/src/android/app/src/main/cpp/AndroidFilesystemCallbacks.h b/src/android/app/src/main/cpp/AndroidFilesystemCallbacks.h index 67dc10fe..9c053ef0 100644 --- a/src/android/app/src/main/cpp/AndroidFilesystemCallbacks.h +++ b/src/android/app/src/main/cpp/AndroidFilesystemCallbacks.h @@ -3,15 +3,14 @@ #include "JNIUtils.h" #include "Common/unix/FilesystemAndroid.h" -class AndroidFilesystemCallbacks : public FilesystemAndroid::FilesystemCallbacks -{ +class AndroidFilesystemCallbacks : public FilesystemAndroid::FilesystemCallbacks { jmethodID m_openContentUriMid; jmethodID m_listFilesMid; jmethodID m_isDirectoryMid; jmethodID m_isFileMid; jmethodID m_existsMid; JNIUtils::Scopedjclass m_fileUtilClass; - std::function m_function = nullptr; + std::function m_function = nullptr; std::mutex m_functionMutex; std::condition_variable m_functionCV; std::thread m_thread; @@ -19,13 +18,12 @@ class AndroidFilesystemCallbacks : public FilesystemAndroid::FilesystemCallbacks std::condition_variable m_threadCV; std::atomic_bool m_continue = true; - bool callBooleanFunction(const std::filesystem::path &uri, jmethodID methodId) + bool callBooleanFunction(const std::filesystem::path& uri, jmethodID methodId) { std::lock_guard lock(m_functionMutex); bool functionFinished = false; bool result = false; - m_function = [&, this](JNIEnv *env) - { + m_function = [&, this](JNIEnv* env) { jstring uriString = env->NewStringUTF(uri.c_str()); result = env->CallStaticBooleanMethod(*m_fileUtilClass, methodId, uriString); env->DeleteLocalRef(uriString); @@ -34,8 +32,7 @@ class AndroidFilesystemCallbacks : public FilesystemAndroid::FilesystemCallbacks m_threadCV.notify_one(); { std::unique_lock threadLock(m_threadMutex); - m_functionCV.wait(threadLock, [&]() -> bool - { return functionFinished; }); + m_functionCV.wait(threadLock, [&]() -> bool { return functionFinished; }); } return result; } @@ -46,8 +43,7 @@ class AndroidFilesystemCallbacks : public FilesystemAndroid::FilesystemCallbacks while (m_continue) { std::unique_lock threadLock(m_threadMutex); - m_threadCV.wait(threadLock, [&] - { return m_function || !m_continue; }); + m_threadCV.wait(threadLock, [&] { return m_function || !m_continue; }); if (!m_continue) return; m_function(*env); @@ -56,7 +52,7 @@ class AndroidFilesystemCallbacks : public FilesystemAndroid::FilesystemCallbacks } } - public: + public: AndroidFilesystemCallbacks() { JNIUtils::ScopedJNIENV env; @@ -76,13 +72,12 @@ class AndroidFilesystemCallbacks : public FilesystemAndroid::FilesystemCallbacks m_thread.join(); } - int openContentUri(const std::filesystem::path &uri) override + int openContentUri(const std::filesystem::path& uri) override { std::lock_guard lock(m_functionMutex); bool functionFinished = false; int fd = -1; - m_function = [&, this](JNIEnv *env) - { + m_function = [&, this](JNIEnv* env) { jstring uriString = env->NewStringUTF(uri.c_str()); fd = env->CallStaticIntMethod(*m_fileUtilClass, m_openContentUriMid, uriString); env->DeleteLocalRef(uriString); @@ -91,19 +86,17 @@ class AndroidFilesystemCallbacks : public FilesystemAndroid::FilesystemCallbacks m_threadCV.notify_one(); { std::unique_lock threadLock(m_threadMutex); - m_functionCV.wait(threadLock, [&]() - { return functionFinished; }); + m_functionCV.wait(threadLock, [&]() { return functionFinished; }); } return fd; } - std::vector listFiles(const std::filesystem::path &uri) override + std::vector listFiles(const std::filesystem::path& uri) override { std::lock_guard lock(m_functionMutex); bool functionFinished = false; std::vector paths; - m_function = [&, this](JNIEnv *env) - { + m_function = [&, this](JNIEnv* env) { jstring uriString = env->NewStringUTF(uri.c_str()); jobjectArray pathsObjArray = static_cast(env->CallStaticObjectMethod(*m_fileUtilClass, m_listFilesMid, uriString)); env->DeleteLocalRef(uriString); @@ -121,23 +114,22 @@ class AndroidFilesystemCallbacks : public FilesystemAndroid::FilesystemCallbacks m_threadCV.notify_one(); { std::unique_lock threadLock(m_threadMutex); - m_functionCV.wait(threadLock, [&]() - { return functionFinished; }); + m_functionCV.wait(threadLock, [&]() { return functionFinished; }); } return paths; } - bool isDirectory(const std::filesystem::path &uri) override + bool isDirectory(const std::filesystem::path& uri) override { return callBooleanFunction(uri, m_isDirectoryMid); } - bool isFile(const std::filesystem::path &uri) override + bool isFile(const std::filesystem::path& uri) override { return callBooleanFunction(uri, m_isFileMid); } - bool exists(const std::filesystem::path &uri) override + bool exists(const std::filesystem::path& uri) override { return callBooleanFunction(uri, m_existsMid); } diff --git a/src/android/app/src/main/cpp/AndroidGameIconLoadedCallback.h b/src/android/app/src/main/cpp/AndroidGameIconLoadedCallback.h index 873089a8..bad0a748 100644 --- a/src/android/app/src/main/cpp/AndroidGameIconLoadedCallback.h +++ b/src/android/app/src/main/cpp/AndroidGameIconLoadedCallback.h @@ -3,14 +3,13 @@ #include "GameIconLoader.h" #include "JNIUtils.h" -class AndroidGameIconLoadedCallback : public GameIconLoadedCallback -{ +class AndroidGameIconLoadedCallback : public GameIconLoadedCallback { jmethodID m_onGameIconLoadedMID; JNIUtils::Scopedjobject m_gameTitleLoadedCallbackObj; - public: + public: AndroidGameIconLoadedCallback(jmethodID onGameIconLoadedMID, - jobject gameTitleLoadedCallbackObj) + jobject gameTitleLoadedCallbackObj) : m_onGameIconLoadedMID(onGameIconLoadedMID), m_gameTitleLoadedCallbackObj(gameTitleLoadedCallbackObj) {} diff --git a/src/android/app/src/main/cpp/AndroidGameTitleLoadedCallback.h b/src/android/app/src/main/cpp/AndroidGameTitleLoadedCallback.h index 7d3dd02b..f6570eea 100644 --- a/src/android/app/src/main/cpp/AndroidGameTitleLoadedCallback.h +++ b/src/android/app/src/main/cpp/AndroidGameTitleLoadedCallback.h @@ -2,21 +2,20 @@ #include "GameTitleLoader.h" -class AndroidGameTitleLoadedCallback : public GameTitleLoadedCallback -{ +class AndroidGameTitleLoadedCallback : public GameTitleLoadedCallback { jmethodID m_onGameTitleLoadedMID; JNIUtils::Scopedjobject m_gameTitleLoadedCallbackObj; - public: + public: AndroidGameTitleLoadedCallback(jmethodID onGameTitleLoadedMID, jobject gameTitleLoadedCallbackObj) : m_onGameTitleLoadedMID(onGameTitleLoadedMID), m_gameTitleLoadedCallbackObj(gameTitleLoadedCallbackObj) {} - void onTitleLoaded(const Game &game) override + void onTitleLoaded(const Game& game) override { JNIUtils::ScopedJNIENV env; jstring name = env->NewStringUTF(game.name.c_str()); - jlong titleId = *reinterpret_cast(&game.titleId); + jlong titleId = *reinterpret_cast(&game.titleId); env->CallVoidMethod(*m_gameTitleLoadedCallbackObj, m_onGameTitleLoadedMID, titleId, name); env->DeleteLocalRef(name); } diff --git a/src/android/app/src/main/cpp/CafeSystemUtils.cpp b/src/android/app/src/main/cpp/CafeSystemUtils.cpp index 0a340f0b..cbf7fcbe 100644 --- a/src/android/app/src/main/cpp/CafeSystemUtils.cpp +++ b/src/android/app/src/main/cpp/CafeSystemUtils.cpp @@ -5,48 +5,48 @@ namespace CafeSystemUtils { -void startGame(TitleId titleId) -{ - TitleInfo launchTitle; - - if (!CafeTitleList::GetFirstByTitleId(titleId, launchTitle)) - return; - - if (launchTitle.IsValid()) + void startGame(TitleId titleId) { - // the title might not be in the TitleList, so we add it as a temporary entry - CafeTitleList::AddTitleFromPath(launchTitle.GetPath()); - // title is valid, launch from TitleId - TitleId baseTitleId; - if (!CafeTitleList::FindBaseTitleId(launchTitle.GetAppTitleId(), baseTitleId)) + TitleInfo launchTitle; + + if (!CafeTitleList::GetFirstByTitleId(titleId, launchTitle)) + return; + + if (launchTitle.IsValid()) { - } - CafeSystem::STATUS_CODE statusCode = CafeSystem::PrepareForegroundTitle(baseTitleId); - if (statusCode == CafeSystem::STATUS_CODE::INVALID_RPX) - { - } - else if (statusCode == CafeSystem::STATUS_CODE::UNABLE_TO_MOUNT) - { - } - else if (statusCode != CafeSystem::STATUS_CODE::SUCCESS) - { - } - } - else // if (launchTitle.GetFormat() == TitleInfo::TitleDataFormat::INVALID_STRUCTURE ) - { - // title is invalid, if its an RPX/ELF we can launch it directly - // otherwise its an error - CafeTitleFileType fileType = DetermineCafeSystemFileType(launchTitle.GetPath()); - if (fileType == CafeTitleFileType::RPX || fileType == CafeTitleFileType::ELF) - { - CafeSystem::STATUS_CODE statusCode = CafeSystem::PrepareForegroundTitleFromStandaloneRPX( - launchTitle.GetPath()); - if (statusCode != CafeSystem::STATUS_CODE::SUCCESS) + // the title might not be in the TitleList, so we add it as a temporary entry + CafeTitleList::AddTitleFromPath(launchTitle.GetPath()); + // title is valid, launch from TitleId + TitleId baseTitleId; + if (!CafeTitleList::FindBaseTitleId(launchTitle.GetAppTitleId(), baseTitleId)) + { + } + CafeSystem::STATUS_CODE statusCode = CafeSystem::PrepareForegroundTitle(baseTitleId); + if (statusCode == CafeSystem::STATUS_CODE::INVALID_RPX) + { + } + else if (statusCode == CafeSystem::STATUS_CODE::UNABLE_TO_MOUNT) + { + } + else if (statusCode != CafeSystem::STATUS_CODE::SUCCESS) { - return; } } + else // if (launchTitle.GetFormat() == TitleInfo::TitleDataFormat::INVALID_STRUCTURE ) + { + // title is invalid, if its an RPX/ELF we can launch it directly + // otherwise its an error + CafeTitleFileType fileType = DetermineCafeSystemFileType(launchTitle.GetPath()); + if (fileType == CafeTitleFileType::RPX || fileType == CafeTitleFileType::ELF) + { + CafeSystem::STATUS_CODE statusCode = CafeSystem::PrepareForegroundTitleFromStandaloneRPX( + launchTitle.GetPath()); + if (statusCode != CafeSystem::STATUS_CODE::SUCCESS) + { + return; + } + } + } + CafeSystem::LaunchForegroundTitle(); } - CafeSystem::LaunchForegroundTitle(); -} -}; // namespace CafeSystemUtils \ No newline at end of file +}; // namespace CafeSystemUtils \ No newline at end of file diff --git a/src/android/app/src/main/cpp/CafeSystemUtils.h b/src/android/app/src/main/cpp/CafeSystemUtils.h index edf5dff7..99d8d3e0 100644 --- a/src/android/app/src/main/cpp/CafeSystemUtils.h +++ b/src/android/app/src/main/cpp/CafeSystemUtils.h @@ -4,5 +4,5 @@ namespace CafeSystemUtils { -void startGame(TitleId titleId); + void startGame(TitleId titleId); }; \ No newline at end of file diff --git a/src/android/app/src/main/cpp/EmulationState.h b/src/android/app/src/main/cpp/EmulationState.h index 2c0865c6..18335b79 100644 --- a/src/android/app/src/main/cpp/EmulationState.h +++ b/src/android/app/src/main/cpp/EmulationState.h @@ -260,11 +260,42 @@ class EmulationState { void setEnabledStateForGraphicPack(int64_t id, bool state) { - m_graphicPacks.at(id)->SetEnabled(state); + auto graphicPack = m_graphicPacks.at(id); + graphicPack->SetEnabled(state); + saveGraphicPackStateToConfig(graphicPack); } GraphicPackPtr getGraphicPack(int64_t id) const { return m_graphicPacks.at(id); } + void setGraphicPackActivePreset(int64_t id, const std::string& presetCategory, const std::string& preset) const + { + auto graphicPack = m_graphicPacks.at(id); + graphicPack->SetActivePreset(presetCategory, preset); + saveGraphicPackStateToConfig(graphicPack); + } + void saveGraphicPackStateToConfig(GraphicPackPtr graphicPack) const + { + auto& data = g_config.data(); + auto filename = _utf8ToPath(graphicPack->GetNormalizedPathString()); + if (data.graphic_pack_entries.contains(filename)) + data.graphic_pack_entries.erase(filename); + if (graphicPack->IsEnabled()) + { + data.graphic_pack_entries.try_emplace(filename); + auto& it = data.graphic_pack_entries[filename]; + // otherwise store all selected presets + for (const auto& preset : graphicPack->GetActivePresets()) + it.try_emplace(preset->category, preset->name); + } + else if (graphicPack->IsDefaultEnabled()) + { + // save that its disabled + data.graphic_pack_entries.try_emplace(filename); + auto& it = data.graphic_pack_entries[filename]; + it.try_emplace("_disabled", "false"); + } + g_config.Save(); + } }; \ No newline at end of file diff --git a/src/android/app/src/main/cpp/GameIconLoader.cpp b/src/android/app/src/main/cpp/GameIconLoader.cpp index 22e51d6d..5915ad03 100644 --- a/src/android/app/src/main/cpp/GameIconLoader.cpp +++ b/src/android/app/src/main/cpp/GameIconLoader.cpp @@ -15,7 +15,7 @@ GameIconLoader::~GameIconLoader() m_loaderThread.join(); } -const Image &GameIconLoader::getGameIcon(TitleId titleId) +const Image& GameIconLoader::getGameIcon(TitleId titleId) { return m_iconCache.at(titleId); } @@ -36,8 +36,7 @@ void GameIconLoader::loadGameIcons() TitleId titleId = 0; { std::unique_lock lock(m_threadMutex); - m_condVar.wait(lock, [this] - { return !m_iconsToLoad.empty() || !m_continueLoading; }); + m_condVar.wait(lock, [this] { return !m_iconsToLoad.empty() || !m_continueLoading; }); if (!m_continueLoading) return; titleId = m_iconsToLoad.front(); @@ -49,7 +48,7 @@ void GameIconLoader::loadGameIcons() if (auto iconIt = m_iconCache.find(titleId); iconIt != m_iconCache.end()) { - auto &icon = iconIt->second; + auto& icon = iconIt->second; if (m_onIconLoaded) m_onIconLoaded->onIconLoaded(titleId, icon.intColors(), icon.m_width, icon.m_height); continue; @@ -77,7 +76,7 @@ void GameIconLoader::loadGameIcons() } } -void GameIconLoader::setOnIconLoaded(const std::shared_ptr &onIconLoaded) +void GameIconLoader::setOnIconLoaded(const std::shared_ptr& onIconLoaded) { { std::lock_guard lock(m_threadMutex); diff --git a/src/android/app/src/main/cpp/GameIconLoader.h b/src/android/app/src/main/cpp/GameIconLoader.h index 53968dcb..bf59ad20 100644 --- a/src/android/app/src/main/cpp/GameIconLoader.h +++ b/src/android/app/src/main/cpp/GameIconLoader.h @@ -3,14 +3,12 @@ #include "Cafe/TitleList/TitleId.h" #include "Image.h" -class GameIconLoadedCallback -{ - public: - virtual void onIconLoaded(TitleId titleId, int *colors, int width, int height) = 0; +class GameIconLoadedCallback { + public: + virtual void onIconLoaded(TitleId titleId, int* colors, int width, int height) = 0; }; -class GameIconLoader -{ +class GameIconLoader { std::condition_variable m_condVar; std::atomic_bool m_continueLoading = true; std::thread m_loaderThread; @@ -19,17 +17,17 @@ class GameIconLoader std::map m_iconCache; std::shared_ptr m_onIconLoaded = nullptr; - public: + public: GameIconLoader(); ~GameIconLoader(); - const Image &getGameIcon(TitleId titleId); + const Image& getGameIcon(TitleId titleId); - void setOnIconLoaded(const std::shared_ptr &onIconLoaded); + void setOnIconLoaded(const std::shared_ptr& onIconLoaded); void requestIcon(TitleId titleId); - private: + private: void loadGameIcons(); }; diff --git a/src/android/app/src/main/cpp/GameTitleLoader.cpp b/src/android/app/src/main/cpp/GameTitleLoader.cpp index 6c63e613..1ec61eae 100644 --- a/src/android/app/src/main/cpp/GameTitleLoader.cpp +++ b/src/android/app/src/main/cpp/GameTitleLoader.cpp @@ -14,7 +14,7 @@ void GameTitleLoader::queueTitle(TitleId titleId) m_condVar.notify_one(); } -void GameTitleLoader::setOnTitleLoaded(const std::shared_ptr &gameTitleLoadedCallback) +void GameTitleLoader::setOnTitleLoaded(const std::shared_ptr& gameTitleLoadedCallback) { { std::lock_guard lock(m_threadMutex); @@ -57,7 +57,7 @@ void GameTitleLoader::titleRefresh(TitleId titleId) isNewEntry = true; m_gameInfos[baseTitleId] = Game(); } - Game &game = m_gameInfos[baseTitleId]; + Game& game = m_gameInfos[baseTitleId]; game.titleId = baseTitleId; game.name = GetNameByTitleId(baseTitleId); game.version = gameInfo.GetVersion(); @@ -87,9 +87,8 @@ void GameTitleLoader::loadGameTitles() TitleId titleId = 0; { std::unique_lock lock(m_threadMutex); - m_condVar.wait(lock, [this] - { return (!m_titlesToLoad.empty()) || - !m_continueLoading; }); + m_condVar.wait(lock, [this] { return (!m_titlesToLoad.empty()) || + !m_continueLoading; }); if (!m_continueLoading) return; titleId = m_titlesToLoad.front(); @@ -117,14 +116,13 @@ std::string GameTitleLoader::GetNameByTitleId(uint64 titleId) void GameTitleLoader::registerCallback() { m_callbackIdTitleList = CafeTitleList::RegisterCallback( - [](CafeTitleListCallbackEvent *evt, void *ctx) - { - static_cast(ctx)->HandleTitleListCallback(evt); + [](CafeTitleListCallbackEvent* evt, void* ctx) { + static_cast(ctx)->HandleTitleListCallback(evt); }, this); } -void GameTitleLoader::HandleTitleListCallback(CafeTitleListCallbackEvent *evt) +void GameTitleLoader::HandleTitleListCallback(CafeTitleListCallbackEvent* evt) { if (evt->eventType == CafeTitleListCallbackEvent::TYPE::TITLE_DISCOVERED || evt->eventType == CafeTitleListCallbackEvent::TYPE::TITLE_REMOVED) { @@ -132,7 +130,7 @@ void GameTitleLoader::HandleTitleListCallback(CafeTitleListCallbackEvent *evt) } } -void GameTitleLoader::addGamePath(const fs::path &path) +void GameTitleLoader::addGamePath(const fs::path& path) { CafeTitleList::ClearScanPaths(); CafeTitleList::AddScanPath(path); diff --git a/src/android/app/src/main/cpp/GameTitleLoader.h b/src/android/app/src/main/cpp/GameTitleLoader.h index eca694fc..b4ef2ec2 100644 --- a/src/android/app/src/main/cpp/GameTitleLoader.h +++ b/src/android/app/src/main/cpp/GameTitleLoader.h @@ -14,14 +14,12 @@ struct Game CafeConsoleRegion region; }; -class GameTitleLoadedCallback -{ - public: - virtual void onTitleLoaded(const Game &game) = 0; +class GameTitleLoadedCallback { + public: + virtual void onTitleLoaded(const Game& game) = 0; }; -class GameTitleLoader -{ +class GameTitleLoader { std::mutex m_threadMutex; std::condition_variable m_condVar; std::thread m_loaderThread; @@ -32,12 +30,12 @@ class GameTitleLoader std::map m_name_cache; std::shared_ptr m_gameTitleLoadedCallback = nullptr; - public: + public: GameTitleLoader(); void queueTitle(TitleId titleId); - void setOnTitleLoaded(const std::shared_ptr &gameTitleLoadedCallback); + void setOnTitleLoaded(const std::shared_ptr& gameTitleLoadedCallback); void reloadGameTitles(); @@ -45,14 +43,14 @@ class GameTitleLoader void titleRefresh(TitleId titleId); - void addGamePath(const fs::path &path); + void addGamePath(const fs::path& path); - private: + private: void loadGameTitles(); std::string GetNameByTitleId(uint64 titleId); void registerCallback(); - void HandleTitleListCallback(CafeTitleListCallbackEvent *evt); + void HandleTitleListCallback(CafeTitleListCallbackEvent* evt); }; diff --git a/src/android/app/src/main/cpp/Image.cpp b/src/android/app/src/main/cpp/Image.cpp index 391e7b85..4d7a7348 100644 --- a/src/android/app/src/main/cpp/Image.cpp +++ b/src/android/app/src/main/cpp/Image.cpp @@ -5,7 +5,7 @@ #include "stb_image.h" -Image::Image(Image &&image) +Image::Image(Image&& image) { this->m_image = image.m_image; this->m_width = image.m_width; @@ -14,7 +14,7 @@ Image::Image(Image &&image) image.m_image = nullptr; } -Image::Image(const std::vector &imageBytes) +Image::Image(const std::vector& imageBytes) { m_image = stbi_load_from_memory(imageBytes.data(), imageBytes.size(), &m_width, &m_height, &m_channels, STBI_rgb_alpha); if (m_image) @@ -33,9 +33,15 @@ Image::Image(const std::vector &imageBytes) } } -bool Image::isOk() const { return m_image != nullptr; } +bool Image::isOk() const +{ + return m_image != nullptr; +} -int *Image::intColors() const { return reinterpret_cast(m_image); } +int* Image::intColors() const +{ + return reinterpret_cast(m_image); +} Image::~Image() { diff --git a/src/android/app/src/main/cpp/Image.h b/src/android/app/src/main/cpp/Image.h index 37ea78d0..7bdd1b51 100644 --- a/src/android/app/src/main/cpp/Image.h +++ b/src/android/app/src/main/cpp/Image.h @@ -2,18 +2,18 @@ struct Image { - uint8_t *m_image = nullptr; + uint8_t* m_image = nullptr; int m_width = 0; int m_height = 0; int m_channels = 0; - Image(Image &&image); + Image(Image&& image); - Image(const std::vector &imageBytes); + Image(const std::vector& imageBytes); bool isOk() const; - int *intColors() const; + int* intColors() const; ~Image(); }; diff --git a/src/android/app/src/main/cpp/JNIUtils.cpp b/src/android/app/src/main/cpp/JNIUtils.cpp index 073b6493..e93c2e5f 100644 --- a/src/android/app/src/main/cpp/JNIUtils.cpp +++ b/src/android/app/src/main/cpp/JNIUtils.cpp @@ -2,68 +2,68 @@ namespace JNIUtils { -JavaVM *g_jvm = nullptr; + JavaVM* g_jvm = nullptr; }; -std::string JNIUtils::JStringToString(JNIEnv *env, jstring jstr) +std::string JNIUtils::JStringToString(JNIEnv* env, jstring jstr) { - const char *c_str = env->GetStringUTFChars(jstr, nullptr); - std::string str(c_str); - env->ReleaseStringUTFChars(jstr, c_str); - return str; + const char* c_str = env->GetStringUTFChars(jstr, nullptr); + std::string str(c_str); + env->ReleaseStringUTFChars(jstr, c_str); + return str; } -jobject JNIUtils::createJavaStringArrayList(JNIEnv *env, const std::vector &strings) +jobject JNIUtils::createJavaStringArrayList(JNIEnv* env, const std::vector& strings) { - jclass clsArrayList = env->FindClass("java/util/ArrayList"); - jmethodID arrayListConstructor = env->GetMethodID(clsArrayList, "", "()V"); - jobject arrayListObject = env->NewObject(clsArrayList, arrayListConstructor); - jmethodID addMethod = env->GetMethodID(clsArrayList, "add", "(Ljava/lang/Object;)Z"); - env->DeleteLocalRef(clsArrayList); + jclass clsArrayList = env->FindClass("java/util/ArrayList"); + jmethodID arrayListConstructor = env->GetMethodID(clsArrayList, "", "()V"); + jobject arrayListObject = env->NewObject(clsArrayList, arrayListConstructor); + jmethodID addMethod = env->GetMethodID(clsArrayList, "add", "(Ljava/lang/Object;)Z"); + env->DeleteLocalRef(clsArrayList); - for (const auto &string : strings) - { - jstring element = env->NewStringUTF(string.c_str()); - env->CallBooleanMethod(arrayListObject, addMethod, element); - env->DeleteLocalRef(element); - } - return arrayListObject; + for (const auto& string : strings) + { + jstring element = env->NewStringUTF(string.c_str()); + env->CallBooleanMethod(arrayListObject, addMethod, element); + env->DeleteLocalRef(element); + } + return arrayListObject; } -JNIUtils::Scopedjobject JNIUtils::getEnumValue(JNIEnv *env, const std::string &enumClassName, const std::string &enumName) +JNIUtils::Scopedjobject JNIUtils::getEnumValue(JNIEnv* env, const std::string& enumClassName, const std::string& enumName) { - jclass enumClass = env->FindClass(enumClassName.c_str()); - jfieldID fieldID = env->GetStaticFieldID(enumClass, enumName.c_str(), ("L" + enumClassName + ";").c_str()); - jobject enumValue = env->GetStaticObjectField(enumClass, fieldID); - env->DeleteLocalRef(enumClass); - Scopedjobject enumObj = Scopedjobject(enumValue); - env->DeleteLocalRef(enumValue); - return enumObj; + jclass enumClass = env->FindClass(enumClassName.c_str()); + jfieldID fieldID = env->GetStaticFieldID(enumClass, enumName.c_str(), ("L" + enumClassName + ";").c_str()); + jobject enumValue = env->GetStaticObjectField(enumClass, fieldID); + env->DeleteLocalRef(enumClass); + Scopedjobject enumObj = Scopedjobject(enumValue); + env->DeleteLocalRef(enumValue); + return enumObj; } -jobject JNIUtils::createArrayList(JNIEnv *env, const std::vector &objects) +jobject JNIUtils::createArrayList(JNIEnv* env, const std::vector& objects) { - static Scopedjclass listClass = Scopedjclass("java/util/ArrayList"); - static jmethodID listConstructor = env->GetMethodID(*listClass, "", "()V"); - static jmethodID listAdd = env->GetMethodID(*listClass, "add", "(Ljava/lang/Object;)Z"); + static Scopedjclass listClass = Scopedjclass("java/util/ArrayList"); + static jmethodID listConstructor = env->GetMethodID(*listClass, "", "()V"); + static jmethodID listAdd = env->GetMethodID(*listClass, "add", "(Ljava/lang/Object;)Z"); - jobject arrayList = env->NewObject(*listClass, listConstructor); - for (auto &&obj : objects) - env->CallBooleanMethod(arrayList, listAdd, obj); - return arrayList; + jobject arrayList = env->NewObject(*listClass, listConstructor); + for (auto&& obj : objects) + env->CallBooleanMethod(arrayList, listAdd, obj); + return arrayList; } -jobject JNIUtils::createJavaStringArrayList(JNIEnv *env, const std::vector &strings) +jobject JNIUtils::createJavaStringArrayList(JNIEnv* env, const std::vector& strings) { - jclass arrayListClass = env->FindClass("java/util/ArrayList"); - jmethodID arrayListConstructor = env->GetMethodID(arrayListClass, "", "()V"); - jobject arrayListObject = env->NewObject(arrayListClass, arrayListConstructor); - jmethodID addMethod = env->GetMethodID(arrayListClass, "add", "(Ljava/lang/Object;)Z"); - for (const auto &string : strings) - { - jstring element = env->NewString((jchar *)string.c_str(), string.length()); - env->CallBooleanMethod(arrayListObject, addMethod, element); - env->DeleteLocalRef(element); - } - return arrayListObject; + jclass arrayListClass = env->FindClass("java/util/ArrayList"); + jmethodID arrayListConstructor = env->GetMethodID(arrayListClass, "", "()V"); + jobject arrayListObject = env->NewObject(arrayListClass, arrayListConstructor); + jmethodID addMethod = env->GetMethodID(arrayListClass, "add", "(Ljava/lang/Object;)Z"); + for (const auto& string : strings) + { + jstring element = env->NewString((jchar*)string.c_str(), string.length()); + env->CallBooleanMethod(arrayListObject, addMethod, element); + env->DeleteLocalRef(element); + } + return arrayListObject; } diff --git a/src/android/app/src/main/cpp/JNIUtils.h b/src/android/app/src/main/cpp/JNIUtils.h index 197ff571..038e19a0 100644 --- a/src/android/app/src/main/cpp/JNIUtils.h +++ b/src/android/app/src/main/cpp/JNIUtils.h @@ -5,139 +5,154 @@ namespace JNIUtils { -extern JavaVM *g_jvm; + extern JavaVM* g_jvm; -std::string JStringToString(JNIEnv *env, jstring jstr); + std::string JStringToString(JNIEnv* env, jstring jstr); -jobject createJavaStringArrayList(JNIEnv *env, const std::vector &stringList); + jobject createJavaStringArrayList(JNIEnv* env, const std::vector& stringList); -jobject createJavaStringArrayList(JNIEnv *env, const std::vector &stringList); + jobject createJavaStringArrayList(JNIEnv* env, const std::vector& stringList); -class ScopedJNIENV -{ - public: - ScopedJNIENV() - { - jint result = g_jvm->GetEnv((void **)&m_env, JNI_VERSION_1_6); - if (result == JNI_EDETACHED) - { - JavaVMAttachArgs args; - args.version = JNI_VERSION_1_6; - args.name = nullptr; - args.group = nullptr; - result = g_jvm->AttachCurrentThread(&m_env, &args); - if (result == JNI_OK) - m_threadWasAttached = true; - } - } + class ScopedJNIENV { + public: + ScopedJNIENV() + { + jint result = g_jvm->GetEnv((void**)&m_env, JNI_VERSION_1_6); + if (result == JNI_EDETACHED) + { + JavaVMAttachArgs args; + args.version = JNI_VERSION_1_6; + args.name = nullptr; + args.group = nullptr; + result = g_jvm->AttachCurrentThread(&m_env, &args); + if (result == JNI_OK) + m_threadWasAttached = true; + } + } - JNIEnv *&operator*() { return m_env; } + JNIEnv*& operator*() + { + return m_env; + } - JNIEnv *operator->() { return m_env; } + JNIEnv* operator->() + { + return m_env; + } - ~ScopedJNIENV() - { - if (m_threadWasAttached) - g_jvm->DetachCurrentThread(); - } + ~ScopedJNIENV() + { + if (m_threadWasAttached) + g_jvm->DetachCurrentThread(); + } - private: - JNIEnv *m_env = nullptr; - bool m_threadWasAttached = false; -}; + private: + JNIEnv* m_env = nullptr; + bool m_threadWasAttached = false; + }; -class Scopedjobject -{ - public: - Scopedjobject() = default; + class Scopedjobject { + public: + Scopedjobject() = default; - Scopedjobject(Scopedjobject &&other) - { - this->m_jobject = other.m_jobject; - other.m_jobject = nullptr; - } - void deleteRef() - { - if (m_jobject) - { - ScopedJNIENV()->DeleteGlobalRef(m_jobject); - m_jobject = nullptr; - } - } - Scopedjobject &operator=(Scopedjobject &&other) - { - if (this != &other) - { - deleteRef(); - m_jobject = other.m_jobject; - other.m_jobject = nullptr; - } - return *this; - } - jobject &operator*() { return m_jobject; } + Scopedjobject(Scopedjobject&& other) + { + this->m_jobject = other.m_jobject; + other.m_jobject = nullptr; + } + void deleteRef() + { + if (m_jobject) + { + ScopedJNIENV()->DeleteGlobalRef(m_jobject); + m_jobject = nullptr; + } + } + Scopedjobject& operator=(Scopedjobject&& other) + { + if (this != &other) + { + deleteRef(); + m_jobject = other.m_jobject; + other.m_jobject = nullptr; + } + return *this; + } + jobject& operator*() + { + return m_jobject; + } - Scopedjobject(jobject obj) - { - if (obj) - m_jobject = ScopedJNIENV()->NewGlobalRef(obj); - } + Scopedjobject(jobject obj) + { + if (obj) + m_jobject = ScopedJNIENV()->NewGlobalRef(obj); + } - ~Scopedjobject() - { - deleteRef(); - } + ~Scopedjobject() + { + deleteRef(); + } - bool isValid() const { return m_jobject; } + bool isValid() const + { + return m_jobject; + } - private: - jobject m_jobject = nullptr; -}; + private: + jobject m_jobject = nullptr; + }; -class Scopedjclass -{ - public: - Scopedjclass() = default; + class Scopedjclass { + public: + Scopedjclass() = default; - Scopedjclass(Scopedjclass &&other) - { - this->m_jclass = other.m_jclass; - other.m_jclass = nullptr; - } + Scopedjclass(Scopedjclass&& other) + { + this->m_jclass = other.m_jclass; + other.m_jclass = nullptr; + } - Scopedjclass &operator=(Scopedjclass &&other) - { - if (this != &other) - { - if (m_jclass) - ScopedJNIENV()->DeleteGlobalRef(m_jclass); - m_jclass = other.m_jclass; - other.m_jclass = nullptr; - } - return *this; - } + Scopedjclass& operator=(Scopedjclass&& other) + { + if (this != &other) + { + if (m_jclass) + ScopedJNIENV()->DeleteGlobalRef(m_jclass); + m_jclass = other.m_jclass; + other.m_jclass = nullptr; + } + return *this; + } - Scopedjclass(const std::string &className) - { - ScopedJNIENV scopedEnv; - jobject tempObj = scopedEnv->FindClass(className.c_str()); - m_jclass = static_cast(scopedEnv->NewGlobalRef(tempObj)); - scopedEnv->DeleteLocalRef(tempObj); - } + Scopedjclass(const std::string& className) + { + ScopedJNIENV scopedEnv; + jobject tempObj = scopedEnv->FindClass(className.c_str()); + m_jclass = static_cast(scopedEnv->NewGlobalRef(tempObj)); + scopedEnv->DeleteLocalRef(tempObj); + } - ~Scopedjclass() - { - if (m_jclass) - ScopedJNIENV()->DeleteGlobalRef(m_jclass); - } + ~Scopedjclass() + { + if (m_jclass) + ScopedJNIENV()->DeleteGlobalRef(m_jclass); + } - bool isValid() const { return m_jclass; } + bool isValid() const + { + return m_jclass; + } - jclass &operator*() { return m_jclass; } + jclass& operator*() + { + return m_jclass; + } - private: - jclass m_jclass = nullptr; -}; + private: + jclass m_jclass = nullptr; + }; -Scopedjobject getEnumValue(JNIEnv *env, const std::string &enumClassName, const std::string &enumName); -jobject createArrayList(JNIEnv *env, const std::vector &objects); -} // namespace JNIUtils + Scopedjobject getEnumValue(JNIEnv* env, const std::string& enumClassName, const std::string& enumName); + jobject createArrayList(JNIEnv* env, const std::vector& objects); +} // namespace JNIUtils diff --git a/src/android/app/src/main/cpp/Utils.cpp b/src/android/app/src/main/cpp/Utils.cpp index 0189bd96..7d1fdb32 100644 --- a/src/android/app/src/main/cpp/Utils.cpp +++ b/src/android/app/src/main/cpp/Utils.cpp @@ -15,9 +15,9 @@ void createCemuDirectories() const auto usrFolder = fs::path(mlc).append(L"usr"); fs::create_directories(usrFolder); - fs::create_directories(fs::path(usrFolder).append("title/00050000")); // base - fs::create_directories(fs::path(usrFolder).append("title/0005000c")); // dlc - fs::create_directories(fs::path(usrFolder).append("title/0005000e")); // update + fs::create_directories(fs::path(usrFolder).append("title/00050000")); // base + fs::create_directories(fs::path(usrFolder).append("title/0005000c")); // dlc + fs::create_directories(fs::path(usrFolder).append("title/0005000e")); // update // Mii Maker save folders {0x500101004A000, 0x500101004A100, 0x500101004A200}, fs::create_directories(fs::path(mlc).append(L"usr/save/00050010/1004a000/user/common/db")); @@ -34,8 +34,8 @@ void createCemuDirectories() std::ofstream file(langFile); if (file.is_open()) { - const char *langStrings[] = {"ja", "en", "fr", "de", "it", "es", "zh", "ko", "nl", "pt", "ru", "zh"}; - for (const char *lang : langStrings) + const char* langStrings[] = {"ja", "en", "fr", "de", "it", "es", "zh", "ko", "nl", "pt", "ru", "zh"}; + for (const char* lang : langStrings) file << fmt::format(R"("{}",)", lang) << std::endl; file.flush(); @@ -49,7 +49,7 @@ void createCemuDirectories() std::ofstream file(countryFile); for (sint32 i = 0; i < 201; i++) { - const char *countryCode = NCrypto::GetCountryAsString(i); + const char* countryCode = NCrypto::GetCountryAsString(i); if (boost::iequals(countryCode, "NN")) file << "NULL," << std::endl; else @@ -58,8 +58,7 @@ void createCemuDirectories() file.flush(); file.close(); } - } - catch (const std::exception &ex) + } catch (const std::exception& ex) { exit(0); } @@ -74,8 +73,7 @@ void createCemuDirectories() const auto memorySearcherFolder = ActiveSettings::GetUserDataPath(L"memorySearcher").generic_wstring(); if (!fs::exists(memorySearcherFolder)) fs::create_directories(memorySearcherFolder); - } - catch (const std::exception &ex) + } catch (const std::exception& ex) { exit(0); } diff --git a/src/android/app/src/main/cpp/native-lib.cpp b/src/android/app/src/main/cpp/native-lib.cpp index 71697f49..5728f574 100644 --- a/src/android/app/src/main/cpp/native-lib.cpp +++ b/src/android/app/src/main/cpp/native-lib.cpp @@ -6,32 +6,32 @@ EmulationState s_emulationState; -extern "C" [[maybe_unused]] JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, [[maybe_unused]] void *reserved) +extern "C" [[maybe_unused]] JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM* vm, [[maybe_unused]] void* reserved) { JNIUtils::g_jvm = vm; return JNI_VERSION_1_6; } extern "C" [[maybe_unused]] JNIEXPORT void JNICALL -Java_info_cemu_Cemu_NativeLibrary_setSurface(JNIEnv *env, [[maybe_unused]] jclass clazz, jobject surface, jboolean is_main_canvas) +Java_info_cemu_Cemu_NativeLibrary_setSurface(JNIEnv* env, [[maybe_unused]] jclass clazz, jobject surface, jboolean is_main_canvas) { s_emulationState.setSurface(env, surface, is_main_canvas); } extern "C" [[maybe_unused]] JNIEXPORT void JNICALL -Java_info_cemu_Cemu_NativeLibrary_setSurfaceSize([[maybe_unused]] JNIEnv *env, [[maybe_unused]] jclass clazz, jint width, jint height, jboolean is_main_canvas) +Java_info_cemu_Cemu_NativeLibrary_setSurfaceSize([[maybe_unused]] JNIEnv* env, [[maybe_unused]] jclass clazz, jint width, jint height, jboolean is_main_canvas) { s_emulationState.setSurfaceSize(width, height, is_main_canvas); } extern "C" [[maybe_unused]] JNIEXPORT void JNICALL -Java_info_cemu_Cemu_NativeLibrary_startGame([[maybe_unused]] JNIEnv *env, [[maybe_unused]] jclass clazz, jlong title_id) +Java_info_cemu_Cemu_NativeLibrary_startGame([[maybe_unused]] JNIEnv* env, [[maybe_unused]] jclass clazz, jlong title_id) { - s_emulationState.startGame(*reinterpret_cast(&title_id)); + s_emulationState.startGame(*reinterpret_cast(&title_id)); } extern "C" [[maybe_unused]] JNIEXPORT void JNICALL -Java_info_cemu_Cemu_NativeLibrary_setGameTitleLoadedCallback(JNIEnv *env, [[maybe_unused]] jclass clazz, jobject game_title_loaded_callback) +Java_info_cemu_Cemu_NativeLibrary_setGameTitleLoadedCallback(JNIEnv* env, [[maybe_unused]] jclass clazz, jobject game_title_loaded_callback) { jclass gameTitleLoadedCallbackClass = env->GetObjectClass(game_title_loaded_callback); jmethodID onGameTitleLoadedMID = env->GetMethodID(gameTitleLoadedCallbackClass, "onGameTitleLoaded", "(JLjava/lang/String;)V"); @@ -40,7 +40,7 @@ Java_info_cemu_Cemu_NativeLibrary_setGameTitleLoadedCallback(JNIEnv *env, [[mayb } extern "C" [[maybe_unused]] JNIEXPORT void JNICALL -Java_info_cemu_Cemu_NativeLibrary_setGameIconLoadedCallback(JNIEnv *env, [[maybe_unused]] jclass clazz, jobject game_icon_loaded_callback) +Java_info_cemu_Cemu_NativeLibrary_setGameIconLoadedCallback(JNIEnv* env, [[maybe_unused]] jclass clazz, jobject game_icon_loaded_callback) { jclass gameIconLoadedCallbackClass = env->GetObjectClass(game_icon_loaded_callback); jmethodID gameIconLoadedMID = env->GetMethodID(gameIconLoadedCallbackClass, "onGameIconLoaded", "(J[III)V"); @@ -48,18 +48,18 @@ Java_info_cemu_Cemu_NativeLibrary_setGameIconLoadedCallback(JNIEnv *env, [[maybe } extern "C" [[maybe_unused]] JNIEXPORT void JNICALL -Java_info_cemu_Cemu_NativeLibrary_requestGameIcon([[maybe_unused]] JNIEnv *env, [[maybe_unused]] jclass clazz, jlong title_id) +Java_info_cemu_Cemu_NativeLibrary_requestGameIcon([[maybe_unused]] JNIEnv* env, [[maybe_unused]] jclass clazz, jlong title_id) { - s_emulationState.requestGameIcon(*reinterpret_cast(&title_id)); + s_emulationState.requestGameIcon(*reinterpret_cast(&title_id)); } extern "C" [[maybe_unused]] JNIEXPORT void JNICALL -Java_info_cemu_Cemu_NativeLibrary_reloadGameTitles([[maybe_unused]] JNIEnv *env, [[maybe_unused]] jclass clazz) +Java_info_cemu_Cemu_NativeLibrary_reloadGameTitles([[maybe_unused]] JNIEnv* env, [[maybe_unused]] jclass clazz) { s_emulationState.reloadGameTitles(); } extern "C" [[maybe_unused]] JNIEXPORT void JNICALL -Java_info_cemu_Cemu_NativeLibrary_initializeActiveSettings(JNIEnv *env, [[maybe_unused]] jclass clazz, jstring data_path, jstring cache_path) +Java_info_cemu_Cemu_NativeLibrary_initializeActiveSettings(JNIEnv* env, [[maybe_unused]] jclass clazz, jstring data_path, jstring cache_path) { std::string dataPath = JNIUtils::JStringToString(env, data_path); std::string cachePath = JNIUtils::JStringToString(env, cache_path); @@ -67,45 +67,45 @@ Java_info_cemu_Cemu_NativeLibrary_initializeActiveSettings(JNIEnv *env, [[maybe_ } extern "C" [[maybe_unused]] JNIEXPORT void JNICALL -Java_info_cemu_Cemu_NativeLibrary_initializeEmulation([[maybe_unused]] JNIEnv *env, [[maybe_unused]] jclass clazz) +Java_info_cemu_Cemu_NativeLibrary_initializeEmulation([[maybe_unused]] JNIEnv* env, [[maybe_unused]] jclass clazz) { s_emulationState.initializeEmulation(); } extern "C" [[maybe_unused]] JNIEXPORT void JNICALL -Java_info_cemu_Cemu_NativeLibrary_initializerRenderer([[maybe_unused]] JNIEnv *env, [[maybe_unused]] jclass clazz) +Java_info_cemu_Cemu_NativeLibrary_initializerRenderer([[maybe_unused]] JNIEnv* env, [[maybe_unused]] jclass clazz) { s_emulationState.initializeRenderer(); } extern "C" [[maybe_unused]] JNIEXPORT void JNICALL -Java_info_cemu_Cemu_NativeLibrary_initializeRendererSurface([[maybe_unused]] JNIEnv *env, [[maybe_unused]] jclass clazz, jboolean is_main_canvas) +Java_info_cemu_Cemu_NativeLibrary_initializeRendererSurface([[maybe_unused]] JNIEnv* env, [[maybe_unused]] jclass clazz, jboolean is_main_canvas) { s_emulationState.initializeRenderSurface(is_main_canvas); } extern "C" [[maybe_unused]] JNIEXPORT void JNICALL -Java_info_cemu_Cemu_NativeLibrary_setDPI([[maybe_unused]] JNIEnv *env, [[maybe_unused]] jclass clazz, jfloat dpi) +Java_info_cemu_Cemu_NativeLibrary_setDPI([[maybe_unused]] JNIEnv* env, [[maybe_unused]] jclass clazz, jfloat dpi) { s_emulationState.setDPI(dpi); } extern "C" [[maybe_unused]] JNIEXPORT void JNICALL -Java_info_cemu_Cemu_NativeLibrary_clearSurface([[maybe_unused]] JNIEnv *env, [[maybe_unused]] jclass clazz, jboolean is_main_canvas) +Java_info_cemu_Cemu_NativeLibrary_clearSurface([[maybe_unused]] JNIEnv* env, [[maybe_unused]] jclass clazz, jboolean is_main_canvas) { s_emulationState.clearSurface(is_main_canvas); } extern "C" [[maybe_unused]] JNIEXPORT void JNICALL -Java_info_cemu_Cemu_NativeLibrary_recreateRenderSurface([[maybe_unused]] JNIEnv *env, [[maybe_unused]] jclass clazz, jboolean is_main_canvas) +Java_info_cemu_Cemu_NativeLibrary_recreateRenderSurface([[maybe_unused]] JNIEnv* env, [[maybe_unused]] jclass clazz, jboolean is_main_canvas) { s_emulationState.notifySurfaceChanged(is_main_canvas); } extern "C" [[maybe_unused]] JNIEXPORT void JNICALL -Java_info_cemu_Cemu_NativeLibrary_addGamePath(JNIEnv *env, [[maybe_unused]] jclass clazz, jstring uri) +Java_info_cemu_Cemu_NativeLibrary_addGamePath(JNIEnv* env, [[maybe_unused]] jclass clazz, jstring uri) { s_emulationState.addGamePath(JNIUtils::JStringToString(env, uri)); } extern "C" [[maybe_unused]] JNIEXPORT void JNICALL -Java_info_cemu_Cemu_NativeLibrary_onNativeKey(JNIEnv *env, [[maybe_unused]] jclass clazz, jstring device_descriptor, jstring device_name, jint key, jboolean is_pressed) +Java_info_cemu_Cemu_NativeLibrary_onNativeKey(JNIEnv* env, [[maybe_unused]] jclass clazz, jstring device_descriptor, jstring device_name, jint key, jboolean is_pressed) { auto deviceDescriptor = JNIUtils::JStringToString(env, device_descriptor); auto deviceName = JNIUtils::JStringToString(env, device_name); @@ -113,7 +113,7 @@ Java_info_cemu_Cemu_NativeLibrary_onNativeKey(JNIEnv *env, [[maybe_unused]] jcla } extern "C" [[maybe_unused]] JNIEXPORT void JNICALL -Java_info_cemu_Cemu_NativeLibrary_onNativeAxis(JNIEnv *env, [[maybe_unused]] jclass clazz, jstring device_descriptor, jstring device_name, jint axis, jfloat value) +Java_info_cemu_Cemu_NativeLibrary_onNativeAxis(JNIEnv* env, [[maybe_unused]] jclass clazz, jstring device_descriptor, jstring device_name, jint axis, jfloat value) { auto deviceDescriptor = JNIUtils::JStringToString(env, device_descriptor); auto deviceName = JNIUtils::JStringToString(env, device_name); @@ -121,37 +121,37 @@ Java_info_cemu_Cemu_NativeLibrary_onNativeAxis(JNIEnv *env, [[maybe_unused]] jcl } extern "C" [[maybe_unused]] JNIEXPORT void JNICALL -Java_info_cemu_Cemu_NativeLibrary_setControllerType([[maybe_unused]] JNIEnv *env, [[maybe_unused]] jclass clazz, jint index, jint emulated_controller_type) +Java_info_cemu_Cemu_NativeLibrary_setControllerType([[maybe_unused]] JNIEnv* env, [[maybe_unused]] jclass clazz, jint index, jint emulated_controller_type) { s_emulationState.setEmulatedControllerType(index, static_cast(emulated_controller_type)); } extern "C" [[maybe_unused]] JNIEXPORT jint JNICALL -Java_info_cemu_Cemu_NativeLibrary_getControllerType([[maybe_unused]] JNIEnv *env, [[maybe_unused]] jclass clazz, jint index) +Java_info_cemu_Cemu_NativeLibrary_getControllerType([[maybe_unused]] JNIEnv* env, [[maybe_unused]] jclass clazz, jint index) { return s_emulationState.getEmulatedControllerType(index); } extern "C" [[maybe_unused]] JNIEXPORT jint JNICALL -Java_info_cemu_Cemu_NativeLibrary_getWPADControllersCount([[maybe_unused]] JNIEnv *env, [[maybe_unused]] jclass clazz) +Java_info_cemu_Cemu_NativeLibrary_getWPADControllersCount([[maybe_unused]] JNIEnv* env, [[maybe_unused]] jclass clazz) { return s_emulationState.getWPADControllersCount(); } extern "C" [[maybe_unused]] JNIEXPORT jint JNICALL -Java_info_cemu_Cemu_NativeLibrary_getVPADControllersCount([[maybe_unused]] JNIEnv *env, [[maybe_unused]] jclass clazz) +Java_info_cemu_Cemu_NativeLibrary_getVPADControllersCount([[maybe_unused]] JNIEnv* env, [[maybe_unused]] jclass clazz) { return s_emulationState.getVPADControllersCount(); } extern "C" [[maybe_unused]] JNIEXPORT jboolean JNICALL -Java_info_cemu_Cemu_NativeLibrary_isControllerDisabled([[maybe_unused]] JNIEnv *env, [[maybe_unused]] jclass clazz, jint index) +Java_info_cemu_Cemu_NativeLibrary_isControllerDisabled([[maybe_unused]] JNIEnv* env, [[maybe_unused]] jclass clazz, jint index) { return s_emulationState.isEmulatedControllerDisabled(index); } extern "C" [[maybe_unused]] JNIEXPORT void JNICALL -Java_info_cemu_Cemu_NativeLibrary_setControllerMapping(JNIEnv *env, [[maybe_unused]] jclass clazz, jstring device_descriptor, jstring device_name, jint index, jint mapping_id, jint button_id) +Java_info_cemu_Cemu_NativeLibrary_setControllerMapping(JNIEnv* env, [[maybe_unused]] jclass clazz, jstring device_descriptor, jstring device_name, jint index, jint mapping_id, jint button_id) { auto deviceName = JNIUtils::JStringToString(env, device_name); auto deviceDescriptor = JNIUtils::JStringToString(env, device_descriptor); @@ -159,20 +159,20 @@ Java_info_cemu_Cemu_NativeLibrary_setControllerMapping(JNIEnv *env, [[maybe_unus } extern "C" [[maybe_unused]] JNIEXPORT jstring JNICALL -Java_info_cemu_Cemu_NativeLibrary_getControllerMapping(JNIEnv *env, [[maybe_unused]] jclass clazz, jint index, jint mapping_id) +Java_info_cemu_Cemu_NativeLibrary_getControllerMapping(JNIEnv* env, [[maybe_unused]] jclass clazz, jint index, jint mapping_id) { auto mapping = s_emulationState.getEmulatedControllerMapping(index, mapping_id); return env->NewStringUTF(mapping.value_or("").c_str()); } extern "C" [[maybe_unused]] JNIEXPORT void JNICALL -Java_info_cemu_Cemu_NativeLibrary_clearControllerMapping([[maybe_unused]] JNIEnv *env, [[maybe_unused]] jclass clazz, jint index, jint mapping_id) +Java_info_cemu_Cemu_NativeLibrary_clearControllerMapping([[maybe_unused]] JNIEnv* env, [[maybe_unused]] jclass clazz, jint index, jint mapping_id) { s_emulationState.clearEmulatedControllerMapping(index, mapping_id); } extern "C" [[maybe_unused]] JNIEXPORT jobject JNICALL -Java_info_cemu_Cemu_NativeLibrary_getControllerMappings(JNIEnv *env, [[maybe_unused]] jclass clazz, jint index) +Java_info_cemu_Cemu_NativeLibrary_getControllerMappings(JNIEnv* env, [[maybe_unused]] jclass clazz, jint index) { jclass hashMapClass = env->FindClass("java/util/HashMap"); jmethodID hashMapConstructor = env->GetMethodID(hashMapClass, "", "()V"); @@ -181,7 +181,7 @@ Java_info_cemu_Cemu_NativeLibrary_getControllerMappings(JNIEnv *env, [[maybe_unu jmethodID integerConstructor = env->GetMethodID(integerClass, "", "(I)V"); jobject hashMapObj = env->NewObject(hashMapClass, hashMapConstructor); auto mappings = s_emulationState.getEmulatedControllerMappings(index); - for (const auto &pair : mappings) + for (const auto& pair : mappings) { jint key = pair.first; jstring buttonName = env->NewStringUTF(pair.second.c_str()); @@ -192,7 +192,7 @@ Java_info_cemu_Cemu_NativeLibrary_getControllerMappings(JNIEnv *env, [[maybe_unu } extern "C" [[maybe_unused]] JNIEXPORT void JNICALL -Java_info_cemu_Cemu_NativeLibrary_onKeyEvent(JNIEnv *env, [[maybe_unused]] jclass clazz, jstring device_descriptor, jstring device_name, jint key_code, jboolean is_pressed) +Java_info_cemu_Cemu_NativeLibrary_onKeyEvent(JNIEnv* env, [[maybe_unused]] jclass clazz, jstring device_descriptor, jstring device_name, jint key_code, jboolean is_pressed) { auto deviceDescriptor = JNIUtils::JStringToString(env, device_descriptor); auto deviceName = JNIUtils::JStringToString(env, device_name); @@ -200,7 +200,7 @@ Java_info_cemu_Cemu_NativeLibrary_onKeyEvent(JNIEnv *env, [[maybe_unused]] jclas } extern "C" [[maybe_unused]] JNIEXPORT void JNICALL -Java_info_cemu_Cemu_NativeLibrary_onAxisEvent([[maybe_unused]] JNIEnv *env, [[maybe_unused]] jclass clazz, jstring device_descriptor, jstring device_name, jint axis_code, jfloat value) +Java_info_cemu_Cemu_NativeLibrary_onAxisEvent([[maybe_unused]] JNIEnv* env, [[maybe_unused]] jclass clazz, jstring device_descriptor, jstring device_name, jint axis_code, jfloat value) { auto deviceDescriptor = JNIUtils::JStringToString(env, device_descriptor); auto deviceName = JNIUtils::JStringToString(env, device_name); @@ -208,55 +208,55 @@ Java_info_cemu_Cemu_NativeLibrary_onAxisEvent([[maybe_unused]] JNIEnv *env, [[ma } extern "C" [[maybe_unused]] JNIEXPORT jboolean JNICALL -Java_info_cemu_Cemu_NativeLibrary_getAsyncShaderCompile([[maybe_unused]] JNIEnv *env, [[maybe_unused]] jclass clazz) +Java_info_cemu_Cemu_NativeLibrary_getAsyncShaderCompile([[maybe_unused]] JNIEnv* env, [[maybe_unused]] jclass clazz) { return g_config.data().async_compile; } extern "C" [[maybe_unused]] JNIEXPORT void JNICALL -Java_info_cemu_Cemu_NativeLibrary_setAsyncShaderCompile([[maybe_unused]] JNIEnv *env, [[maybe_unused]] jclass clazz, jboolean enabled) +Java_info_cemu_Cemu_NativeLibrary_setAsyncShaderCompile([[maybe_unused]] JNIEnv* env, [[maybe_unused]] jclass clazz, jboolean enabled) { g_config.data().async_compile = enabled; g_config.Save(); } extern "C" [[maybe_unused]] JNIEXPORT jint JNICALL -Java_info_cemu_Cemu_NativeLibrary_getVSyncMode([[maybe_unused]] JNIEnv *env, [[maybe_unused]] jclass clazz) +Java_info_cemu_Cemu_NativeLibrary_getVSyncMode([[maybe_unused]] JNIEnv* env, [[maybe_unused]] jclass clazz) { return g_config.data().vsync; } extern "C" [[maybe_unused]] JNIEXPORT void JNICALL -Java_info_cemu_Cemu_NativeLibrary_setVSyncMode([[maybe_unused]] JNIEnv *env, [[maybe_unused]] jclass clazz, jint vsync_mode) +Java_info_cemu_Cemu_NativeLibrary_setVSyncMode([[maybe_unused]] JNIEnv* env, [[maybe_unused]] jclass clazz, jint vsync_mode) { g_config.data().vsync = vsync_mode; g_config.Save(); } extern "C" [[maybe_unused]] JNIEXPORT jboolean JNICALL -Java_info_cemu_Cemu_NativeLibrary_getAccurateBarriers([[maybe_unused]] JNIEnv *env, [[maybe_unused]] jclass clazz) +Java_info_cemu_Cemu_NativeLibrary_getAccurateBarriers([[maybe_unused]] JNIEnv* env, [[maybe_unused]] jclass clazz) { return g_config.data().vk_accurate_barriers; } extern "C" [[maybe_unused]] JNIEXPORT void JNICALL -Java_info_cemu_Cemu_NativeLibrary_setAccurateBarriers([[maybe_unused]] JNIEnv *env, [[maybe_unused]] jclass clazz, jboolean enabled) +Java_info_cemu_Cemu_NativeLibrary_setAccurateBarriers([[maybe_unused]] JNIEnv* env, [[maybe_unused]] jclass clazz, jboolean enabled) { g_config.data().vk_accurate_barriers = enabled; g_config.Save(); } extern "C" [[maybe_unused]] JNIEXPORT jboolean JNICALL -Java_info_cemu_Cemu_NativeLibrary_getAudioDeviceEnabled([[maybe_unused]] JNIEnv *env, [[maybe_unused]] jclass clazz, jboolean tv) +Java_info_cemu_Cemu_NativeLibrary_getAudioDeviceEnabled([[maybe_unused]] JNIEnv* env, [[maybe_unused]] jclass clazz, jboolean tv) { - const auto &device = tv ? g_config.data().tv_device : g_config.data().pad_device; + const auto& device = tv ? g_config.data().tv_device : g_config.data().pad_device; return !device.empty(); } extern "C" [[maybe_unused]] JNIEXPORT void JNICALL -Java_info_cemu_Cemu_NativeLibrary_setAudioDeviceEnabled([[maybe_unused]] JNIEnv *env, [[maybe_unused]] jclass clazz, jboolean enabled, jboolean tv) +Java_info_cemu_Cemu_NativeLibrary_setAudioDeviceEnabled([[maybe_unused]] JNIEnv* env, [[maybe_unused]] jclass clazz, jboolean enabled, jboolean tv) { - auto &device = tv ? g_config.data().tv_device : g_config.data().pad_device; + auto& device = tv ? g_config.data().tv_device : g_config.data().pad_device; if (enabled) device = L"Default"; else @@ -265,31 +265,31 @@ Java_info_cemu_Cemu_NativeLibrary_setAudioDeviceEnabled([[maybe_unused]] JNIEnv } extern "C" [[maybe_unused]] JNIEXPORT jint JNICALL -Java_info_cemu_Cemu_NativeLibrary_getAudioDeviceChannels([[maybe_unused]] JNIEnv *env, [[maybe_unused]] jclass clazz, jboolean tv) +Java_info_cemu_Cemu_NativeLibrary_getAudioDeviceChannels([[maybe_unused]] JNIEnv* env, [[maybe_unused]] jclass clazz, jboolean tv) { - const auto &deviceChannels = tv ? g_config.data().tv_channels : g_config.data().pad_channels; + const auto& deviceChannels = tv ? g_config.data().tv_channels : g_config.data().pad_channels; return deviceChannels; } extern "C" [[maybe_unused]] JNIEXPORT void JNICALL -Java_info_cemu_Cemu_NativeLibrary_setAudioDeviceChannels([[maybe_unused]] JNIEnv *env, [[maybe_unused]] jclass clazz, jint channels, jboolean tv) +Java_info_cemu_Cemu_NativeLibrary_setAudioDeviceChannels([[maybe_unused]] JNIEnv* env, [[maybe_unused]] jclass clazz, jint channels, jboolean tv) { - auto &deviceChannels = tv ? g_config.data().tv_channels : g_config.data().pad_channels; + auto& deviceChannels = tv ? g_config.data().tv_channels : g_config.data().pad_channels; deviceChannels = static_cast(channels); g_config.Save(); } extern "C" [[maybe_unused]] JNIEXPORT jint JNICALL -Java_info_cemu_Cemu_NativeLibrary_getAudioDeviceVolume([[maybe_unused]] JNIEnv *env, [[maybe_unused]] jclass clazz, jboolean tv) +Java_info_cemu_Cemu_NativeLibrary_getAudioDeviceVolume([[maybe_unused]] JNIEnv* env, [[maybe_unused]] jclass clazz, jboolean tv) { - const auto &deviceVolume = tv ? g_config.data().tv_volume : g_config.data().pad_volume; + const auto& deviceVolume = tv ? g_config.data().tv_volume : g_config.data().pad_volume; return deviceVolume; } extern "C" [[maybe_unused]] JNIEXPORT void JNICALL -Java_info_cemu_Cemu_NativeLibrary_setAudioDeviceVolume([[maybe_unused]] JNIEnv *env, [[maybe_unused]] jclass clazz, jint volume, jboolean tv) +Java_info_cemu_Cemu_NativeLibrary_setAudioDeviceVolume([[maybe_unused]] JNIEnv* env, [[maybe_unused]] jclass clazz, jint volume, jboolean tv) { - auto &deviceVolume = tv ? g_config.data().tv_volume : g_config.data().pad_volume; + auto& deviceVolume = tv ? g_config.data().tv_volume : g_config.data().pad_volume; deviceVolume = volume; g_config.Save(); }