android: jni cleanup

This commit is contained in:
BreadFish64 2020-03-30 09:17:40 -05:00 committed by bunnei
parent 5b3e5de381
commit 562d7a5170
5 changed files with 254 additions and 234 deletions

View File

@ -638,7 +638,7 @@ public final class EmulationActivity extends AppCompatActivity {
@IntDef({MENU_ACTION_EDIT_CONTROLS_PLACEMENT, MENU_ACTION_TOGGLE_CONTROLS, MENU_ACTION_ADJUST_SCALE,
MENU_ACTION_EXIT, MENU_ACTION_SHOW_FPS, MENU_ACTION_SCREEN_LAYOUT_LANDSCAPE,
MENU_ACTION_SCREEN_LAYOUT_PORTRAIT, MENU_ACTION_SCREEN_LAYOUT_SINGLE, MENU_ACTION_SCREEN_LAYOUT_SIDEBYSIDE,
MENU_ACTION_SWAP_SCREENS, MENU_ACTION_RESET_OVERLAY, MENU_ACTION_SHOW_OVERLAY})
MENU_ACTION_SWAP_SCREENS, MENU_ACTION_RESET_OVERLAY, MENU_ACTION_SHOW_OVERLAY, MENU_ACTION_OPEN_SETTINGS})
public @interface MenuAction {
}
}

View File

@ -68,7 +68,7 @@ char16_t* GetTitle(std::string physical_name) {
char16_t* title;
title = reinterpret_cast<char16_t*>(smdh.titles[static_cast<int>(language)].long_title.data());
LOG_INFO(Frontend, "Title: %s", Common::UTF16ToUTF8(title).data());
LOG_INFO(Frontend, "Title: {}", Common::UTF16ToUTF8(title));
return title;
}
@ -91,7 +91,7 @@ char16_t* GetPublisher(std::string physical_name) {
publisher =
reinterpret_cast<char16_t*>(smdh.titles[static_cast<int>(language)].publisher.data());
LOG_INFO(Frontend, "Publisher: %s", Common::UTF16ToUTF8(publisher).data());
LOG_INFO(Frontend, "Publisher: {}", Common::UTF16ToUTF8(publisher));
return publisher;
}

View File

@ -14,4 +14,4 @@ char16_t* GetTitle(std::string physical_name);
char16_t* GetPublisher(std::string physical_name);
std::vector<u16> GetIcon(std::string physical_name);
} // namespace GameInfo
} // namespace GameInfo

View File

@ -3,32 +3,21 @@
// Refer to the license.txt file included.
#include <iostream>
#include <memory>
#include <regex>
#include <string>
#include <thread>
// This needs to be included before getopt.h because the latter #defines symbols used by it
#include "common/microprofile.h"
#include <getopt.h>
#include <android/native_window_jni.h>
#include <jni.h>
#include "common/file_util.h"
#include "common/logging/log.h"
#include "common/microprofile.h"
#include "common/scm_rev.h"
#include "common/scope_exit.h"
#include "common/string_util.h"
#include "core/core.h"
#include "core/file_sys/cia_container.h"
#include "core/frontend/applets/default_applets.h"
#include "core/frontend/scope_acquire_context.h"
#include "core/gdbstub/gdbstub.h"
#include "core/hle/service/am/am.h"
#include "core/loader/loader.h"
#include "core/movie.h"
#include "core/settings.h"
#include "jni/button_manager.h"
#include "jni/config.h"
@ -37,17 +26,12 @@
#include "jni/id_cache.h"
#include "jni/native.h"
#include "jni/ndk_motion.h"
#include "network/network.h"
#include "video_core/renderer_base.h"
#include "video_core/video_core.h"
namespace {
ANativeWindow* s_surf;
jclass s_jni_class;
jmethodID s_jni_method_alert;
std::unique_ptr<EmuWindow_Android> window;
std::atomic<bool> is_running{false};
@ -118,7 +102,6 @@ static Core::System::ResultStatus RunCitra(const std::string& filepath) {
LOG_INFO(Frontend, "Citra is Starting");
MicroProfileOnThreadCreate("EmuThread");
SCOPE_EXIT({ MicroProfileShutdown(); });
if (filepath.empty()) {
LOG_CRITICAL(Frontend, "Failed to load ROM: No ROM specified");
@ -126,23 +109,18 @@ static Core::System::ResultStatus RunCitra(const std::string& filepath) {
}
window = std::make_unique<EmuWindow_Android>(s_surf);
SCOPE_EXIT({ window.reset(); });
Core::System& system{Core::System::GetInstance()};
SCOPE_EXIT({ system.Shutdown(); });
{
// Forces a config reload on game boot, if the user changed settings in the UI
Config config;
Settings::Apply();
}
// Forces a config reload on game boot, if the user changed settings in the UI
Config{};
Settings::Apply();
// Register frontend applets
Frontend::RegisterDefaultApplets();
system.RegisterSoftwareKeyboard(std::make_shared<AndroidKeyboard>());
InputManager::Init();
SCOPE_EXIT({ InputManager::Shutdown(); });
Frontend::ScopeAcquireContext scope(*window);
const Core::System::ResultStatus load_result{system.Load(*window, filepath)};
@ -166,17 +144,25 @@ static Core::System::ResultStatus RunCitra(const std::string& filepath) {
SCOPE_EXIT({ Settings::values.volume = volume; });
Settings::values.volume = 0;
std::unique_lock<std::mutex> lock(paused_mutex);
running_cv.wait(lock, [] { return !pause_emulation || !is_running; });
std::unique_lock<std::mutex> pause_lock(paused_mutex);
running_cv.wait(pause_lock, [] { return !pause_emulation || !is_running; });
}
}
window->StopPresenting();
system.Shutdown();
window.reset();
InputManager::Shutdown();
MicroProfileShutdown();
return Core::System::ResultStatus::Success;
}
void Java_org_citra_citra_1emu_NativeLibrary_SurfaceChanged(JNIEnv* env, jobject obj,
jobject surf) {
extern "C" {
void Java_org_citra_citra_1emu_NativeLibrary_SurfaceChanged(JNIEnv* env,
[[maybe_unused]] jclass clazz,
jobject surf) {
s_surf = ANativeWindow_fromSurface(env, surf);
if (window) {
@ -186,7 +172,9 @@ void Java_org_citra_citra_1emu_NativeLibrary_SurfaceChanged(JNIEnv* env, jobject
LOG_INFO(Frontend, "Surface changed");
}
void Java_org_citra_citra_1emu_NativeLibrary_SurfaceDestroyed(JNIEnv* env, jobject obj) {
void Java_org_citra_citra_1emu_NativeLibrary_SurfaceDestroyed(JNIEnv* env,
[[maybe_unused]] [
[maybe_unused]] jclass clazz) {
ANativeWindow_release(s_surf);
s_surf = nullptr;
if (window) {
@ -194,16 +182,17 @@ void Java_org_citra_citra_1emu_NativeLibrary_SurfaceDestroyed(JNIEnv* env, jobje
}
}
void Java_org_citra_citra_1emu_NativeLibrary_NotifyOrientationChange(
JNIEnv* env, jclass clazz, jint layout_option, jint rotation) {
void Java_org_citra_citra_1emu_NativeLibrary_NotifyOrientationChange(JNIEnv* env,
[[maybe_unused]] jclass clazz,
jint layout_option,
jint rotation) {
Settings::values.layout_option = static_cast<Settings::LayoutOption>(layout_option);
VideoCore::g_renderer->UpdateCurrentFramebufferLayout(!(rotation % 2));
InputManager::screen_rotation = rotation;
}
void Java_org_citra_citra_1emu_NativeLibrary_SwapScreens(JNIEnv* env, jclass clazz,
jboolean swap_screens,
jint rotation) {
void Java_org_citra_citra_1emu_NativeLibrary_SwapScreens(JNIEnv* env, [[maybe_unused]] jclass clazz,
jboolean swap_screens, jint rotation) {
Settings::values.swap_screen = swap_screens;
if (VideoCore::g_renderer) {
VideoCore::g_renderer->UpdateCurrentFramebufferLayout(!(rotation % 2));
@ -211,90 +200,100 @@ void Java_org_citra_citra_1emu_NativeLibrary_SwapScreens(JNIEnv* env, jclass cla
InputManager::screen_rotation = rotation;
}
void Java_org_citra_citra_1emu_NativeLibrary_SetUserDirectory(JNIEnv* env, jobject obj,
jstring jDirectory) {
FileUtil::SetCurrentDir(GetJString(env, jDirectory));
void Java_org_citra_citra_1emu_NativeLibrary_SetUserDirectory(JNIEnv* env,
[[maybe_unused]] jclass clazz,
jstring j_directory) {
FileUtil::SetCurrentDir(GetJString(env, j_directory));
}
void Java_org_citra_citra_1emu_NativeLibrary_UnPauseEmulation(JNIEnv* env, jobject obj) {
void Java_org_citra_citra_1emu_NativeLibrary_UnPauseEmulation(JNIEnv* env,
[[maybe_unused]] jclass clazz) {
pause_emulation = false;
running_cv.notify_all();
}
void Java_org_citra_citra_1emu_NativeLibrary_PauseEmulation(JNIEnv* env, jobject obj) {
void Java_org_citra_citra_1emu_NativeLibrary_PauseEmulation(JNIEnv* env,
[[maybe_unused]] jclass clazz) {
pause_emulation = true;
}
void Java_org_citra_citra_1emu_NativeLibrary_StopEmulation(JNIEnv* env, jobject obj) {
void Java_org_citra_citra_1emu_NativeLibrary_StopEmulation(JNIEnv* env,
[[maybe_unused]] jclass clazz) {
is_running = false;
pause_emulation = false;
running_cv.notify_all();
}
jboolean Java_org_citra_citra_1emu_NativeLibrary_IsRunning(JNIEnv* env, jobject obj) {
jboolean Java_org_citra_citra_1emu_NativeLibrary_IsRunning(JNIEnv* env,
[[maybe_unused]] jclass clazz) {
return static_cast<jboolean>(is_running);
}
jboolean Java_org_citra_citra_1emu_NativeLibrary_onGamePadEvent(JNIEnv* env, jobject obj,
jstring jDevice, jint button,
jint pressed) {
jboolean Java_org_citra_citra_1emu_NativeLibrary_onGamePadEvent(JNIEnv* env,
[[maybe_unused]] jclass clazz,
jstring j_device, jint j_button,
jint action) {
bool consumed{};
if (pressed) {
consumed = InputManager::ButtonHandler()->PressKey(button);
if (action) {
consumed = InputManager::ButtonHandler()->PressKey(j_button);
} else {
consumed = InputManager::ButtonHandler()->ReleaseKey(button);
consumed = InputManager::ButtonHandler()->ReleaseKey(j_button);
}
return static_cast<jboolean>(consumed);
}
jboolean Java_org_citra_citra_1emu_NativeLibrary_onGamePadMoveEvent(JNIEnv* env, jobject obj,
jstring jDevice, jint Axis,
jfloat x, jfloat y) {
jboolean Java_org_citra_citra_1emu_NativeLibrary_onGamePadMoveEvent(JNIEnv* env,
[[maybe_unused]] jclass clazz,
jstring j_device, jint axis,
jfloat x, jfloat y) {
// Clamp joystick movement to supported minimum and maximum
// Citra uses an inverted y axis sent by the frontend
x = std::clamp(x, -1.f, 1.f);
y = std::clamp(-y, -1.f, 1.f);
return static_cast<jboolean>(InputManager::AnalogHandler()->MoveJoystick(Axis, x, y));
return static_cast<jboolean>(InputManager::AnalogHandler()->MoveJoystick(axis, x, y));
}
jboolean Java_org_citra_citra_1emu_NativeLibrary_onGamePadAxisEvent(JNIEnv* env, jobject obj,
jstring jDevice,
jint axis_id,
jfloat axis_val) {
jboolean Java_org_citra_citra_1emu_NativeLibrary_onGamePadAxisEvent(JNIEnv* env,
[[maybe_unused]] jclass clazz,
jstring j_device, jint axis_id,
jfloat axis_val) {
return static_cast<jboolean>(
InputManager::ButtonHandler()->AnalogButtonEvent(axis_id, axis_val));
}
void Java_org_citra_citra_1emu_NativeLibrary_onTouchEvent(JNIEnv* env, jobject obj, jfloat x,
jfloat y, jboolean pressed) {
void Java_org_citra_citra_1emu_NativeLibrary_onTouchEvent(JNIEnv* env,
[[maybe_unused]] jclass clazz, jfloat x,
jfloat y, jboolean pressed) {
window->OnTouchEvent((int)x, (int)y, (bool)pressed);
}
void Java_org_citra_citra_1emu_NativeLibrary_onTouchMoved(JNIEnv* env, jobject obj, jfloat x,
jfloat y) {
void Java_org_citra_citra_1emu_NativeLibrary_onTouchMoved(JNIEnv* env,
[[maybe_unused]] jclass clazz, jfloat x,
jfloat y) {
window->OnTouchMoved((int)x, (int)y);
}
jintArray Java_org_citra_citra_1emu_NativeLibrary_GetBanner(JNIEnv* env, jobject obj,
jstring jFilepath) {
std::string filepath = GetJString(env, jFilepath);
jintArray Java_org_citra_citra_1emu_NativeLibrary_GetBanner(JNIEnv* env,
[[maybe_unused]] jclass clazz,
jstring j_file) {
std::string filepath = GetJString(env, j_file);
std::vector<u16> icon_data = GameInfo::GetIcon(filepath);
if (icon_data.size() == 0) {
return 0;
}
jintArray Banner = env->NewIntArray(icon_data.size());
env->SetIntArrayRegion(Banner, 0, env->GetArrayLength(Banner),
jintArray banner = env->NewIntArray(static_cast<jsize>(icon_data.size()));
env->SetIntArrayRegion(banner, 0, env->GetArrayLength(banner),
reinterpret_cast<jint*>(icon_data.data()));
return Banner;
return banner;
}
jstring Java_org_citra_citra_1emu_NativeLibrary_GetTitle(JNIEnv* env, jobject obj,
jstring jFilepath) {
std::string filepath = GetJString(env, jFilepath);
jstring Java_org_citra_citra_1emu_NativeLibrary_GetTitle(JNIEnv* env, [[maybe_unused]] jclass clazz,
jstring j_filename) {
std::string filepath = GetJString(env, j_filename);
char16_t* Title = GameInfo::GetTitle(filepath);
@ -305,147 +304,167 @@ jstring Java_org_citra_citra_1emu_NativeLibrary_GetTitle(JNIEnv* env, jobject ob
return env->NewStringUTF(Common::UTF16ToUTF8(Title).data());
}
jstring Java_org_citra_citra_1emu_NativeLibrary_GetDescription(JNIEnv* env, jobject obj,
jstring jFilename) {
return jFilename;
jstring Java_org_citra_citra_1emu_NativeLibrary_GetDescription(JNIEnv* env,
[[maybe_unused]] jclass clazz,
jstring j_filename) {
return j_filename;
}
jstring Java_org_citra_citra_1emu_NativeLibrary_GetGameId(JNIEnv* env, jobject obj,
jstring jFilename) {
return jFilename;
jstring Java_org_citra_citra_1emu_NativeLibrary_GetGameId(JNIEnv* env,
[[maybe_unused]] jclass clazz,
jstring j_filename) {
return j_filename;
}
jint Java_org_citra_citra_1emu_NativeLibrary_GetCountry(JNIEnv* env, jobject obj,
jstring jFilename) {
jint Java_org_citra_citra_1emu_NativeLibrary_GetCountry(JNIEnv* env, [[maybe_unused]] jclass clazz,
jstring j_filename) {
return 0;
}
jstring Java_org_citra_citra_1emu_NativeLibrary_GetCompany(JNIEnv* env, jobject obj,
jstring jFilepath) {
std::string filepath = GetJString(env, jFilepath);
jstring Java_org_citra_citra_1emu_NativeLibrary_GetCompany(JNIEnv* env,
[[maybe_unused]] jclass clazz,
jstring j_filename) {
std::string filepath = GetJString(env, j_filename);
char16_t* Publisher = GameInfo::GetPublisher(filepath);
char16_t* publisher = GameInfo::GetPublisher(filepath);
if (!Publisher) {
if (!publisher) {
return nullptr;
}
return env->NewStringUTF(Common::UTF16ToUTF8(Publisher).data());
return env->NewStringUTF(Common::UTF16ToUTF8(publisher).data());
}
jlong Java_org_citra_citra_1emu_NativeLibrary_GetFilesize(JNIEnv* env, jobject obj,
jstring jFilename) {
jlong Java_org_citra_citra_1emu_NativeLibrary_GetFilesize(JNIEnv* env,
[[maybe_unused]] jclass clazz,
jstring j_filename) {
return 0;
}
jstring Java_org_citra_citra_1emu_NativeLibrary_GetVersionString(JNIEnv* env, jobject obj) {
jstring Java_org_citra_citra_1emu_NativeLibrary_GetVersionString(JNIEnv* env,
[[maybe_unused]] jclass clazz) {
return nullptr;
}
jstring Java_org_citra_citra_1emu_NativeLibrary_GetGitRevision(JNIEnv* env, jobject obj) {
jstring Java_org_citra_citra_1emu_NativeLibrary_GetGitRevision(JNIEnv* env,
[[maybe_unused]] jclass clazz) {
return nullptr;
}
void Java_org_citra_citra_1emu_NativeLibrary_SaveScreenShot(JNIEnv* env, jobject obj) {}
void Java_org_citra_citra_1emu_NativeLibrary_SaveScreenShot(JNIEnv* env,
[[maybe_unused]] jclass clazz) {}
void Java_org_citra_citra_1emu_NativeLibrary_eglBindAPI(JNIEnv* env, jobject obj, jint api) {}
void Java_org_citra_citra_1emu_NativeLibrary_eglBindAPI(JNIEnv* env, [[maybe_unused]] jclass clazz,
jint api) {}
jstring Java_org_citra_citra_1emu_NativeLibrary_GetConfig(JNIEnv* env, jobject obj,
jstring jFile, jstring jSection,
jstring jKey, jstring jDefault) {
jstring Java_org_citra_citra_1emu_NativeLibrary_GetConfig(JNIEnv* env,
[[maybe_unused]] jclass clazz,
jstring j_file, jstring j_section,
jstring j_key, jstring j_default) {
return nullptr;
}
void Java_org_citra_citra_1emu_NativeLibrary_SetConfig(JNIEnv* env, jobject obj, jstring jFile,
jstring jSection, jstring jKey,
jstring jValue) {}
void Java_org_citra_citra_1emu_NativeLibrary_SetConfig(JNIEnv* env, [[maybe_unused]] jclass clazz,
jstring j_file, jstring j_section,
jstring j_key, jstring j_value) {}
void Java_org_citra_citra_1emu_NativeLibrary_SetFilename(JNIEnv* env, jobject obj,
jstring jFile) {}
void Java_org_citra_citra_1emu_NativeLibrary_SetFilename(JNIEnv* env, [[maybe_unused]] jclass clazz,
jstring j_file) {}
void Java_org_citra_citra_1emu_NativeLibrary_SaveState(JNIEnv* env, jobject obj, jint slot,
jboolean wait) {}
void Java_org_citra_citra_1emu_NativeLibrary_SaveState(JNIEnv* env, [[maybe_unused]] jclass clazz,
jint slot, jboolean wait) {}
void Java_org_citra_citra_1emu_NativeLibrary_SaveStateAs(JNIEnv* env, jobject obj, jstring path,
jboolean wait) {}
void Java_org_citra_citra_1emu_NativeLibrary_SaveStateAs(JNIEnv* env, [[maybe_unused]] jclass clazz,
jstring path, jboolean wait) {}
void Java_org_citra_citra_1emu_NativeLibrary_LoadState(JNIEnv* env, jobject obj, jint slot) {}
void Java_org_citra_citra_1emu_NativeLibrary_LoadState(JNIEnv* env, [[maybe_unused]] jclass clazz,
jint slot) {}
void Java_org_citra_citra_1emu_NativeLibrary_LoadStateAs(JNIEnv* env, jobject obj,
jstring path) {}
void Java_org_citra_citra_1emu_NativeLibrary_LoadStateAs(JNIEnv* env, [[maybe_unused]] jclass clazz,
jstring path) {}
void Java_org_citra_citra_1emu_utils_DirectoryInitialization_CreateUserDirectories(
JNIEnv* env, jobject obj) {}
JNIEnv* env, [[maybe_unused]] jclass clazz) {}
jstring Java_org_citra_citra_1emu_NativeLibrary_GetUserDirectory(JNIEnv* env, jobject obj) {
jstring Java_org_citra_citra_1emu_NativeLibrary_GetUserDirectory(JNIEnv* env,
[[maybe_unused]] jclass clazz) {
return nullptr;
}
void Java_org_citra_citra_1emu_NativeLibrary_CreateConfigFile() {
new Config();
void Java_org_citra_citra_1emu_NativeLibrary_CreateConfigFile(JNIEnv* env,
[[maybe_unused]] jclass clazz) {
Config{};
}
jint Java_org_citra_citra_1emu_NativeLibrary_DefaultCPUCore(JNIEnv* env, jobject obj) {
jint Java_org_citra_citra_1emu_NativeLibrary_DefaultCPUCore(JNIEnv* env,
[[maybe_unused]] jclass clazz) {
return 0;
}
void Java_org_citra_citra_1emu_NativeLibrary_SetProfiling(JNIEnv* env, jobject obj,
jboolean enable) {}
void Java_org_citra_citra_1emu_NativeLibrary_SetProfiling(JNIEnv* env,
[[maybe_unused]] jclass clazz,
jboolean enable) {}
void Java_org_citra_citra_1emu_NativeLibrary_WriteProfileResults(JNIEnv* env, jobject obj) {}
void Java_org_citra_citra_1emu_NativeLibrary_WriteProfileResults(JNIEnv* env,
[[maybe_unused]] jclass clazz) {}
void Java_org_citra_citra_1emu_NativeLibrary_Run__Ljava_lang_String_2Ljava_lang_String_2Z(
JNIEnv* env, jobject obj, jstring jFile, jstring jSavestate, jboolean jDeleteSavestate) {}
JNIEnv* env, [[maybe_unused]] jclass clazz, jstring j_file, jstring j_savestate,
jboolean j_delete_savestate) {}
void Java_org_citra_citra_1emu_NativeLibrary_ReloadSettings(JNIEnv* env, jclass type) {
Config{};
Settings::Apply();
void Java_org_citra_citra_1emu_NativeLibrary_ReloadSettings(JNIEnv* env,
[[maybe_unused]] jclass clazz) {
Config{};
Settings::Apply();
}
jstring Java_org_citra_citra_1emu_NativeLibrary_GetUserSetting(JNIEnv* env, jclass type,
jstring gameID_,
jstring Section_, jstring Key_) {
const char* gameID = env->GetStringUTFChars(gameID_, 0);
const char* Section = env->GetStringUTFChars(Section_, 0);
const char* Key = env->GetStringUTFChars(Key_, 0);
jstring Java_org_citra_citra_1emu_NativeLibrary_GetUserSetting(JNIEnv* env,
[[maybe_unused]] jclass clazz,
jstring j_game_id, jstring j_section,
jstring j_key) {
std::string_view game_id = env->GetStringUTFChars(j_game_id, 0);
std::string_view section = env->GetStringUTFChars(j_section, 0);
std::string_view key = env->GetStringUTFChars(j_key, 0);
// TODO
env->ReleaseStringUTFChars(gameID_, gameID);
env->ReleaseStringUTFChars(Section_, Section);
env->ReleaseStringUTFChars(Key_, Key);
env->ReleaseStringUTFChars(j_game_id, game_id.data());
env->ReleaseStringUTFChars(j_section, section.data());
env->ReleaseStringUTFChars(j_key, key.data());
return env->NewStringUTF("");
}
void Java_org_citra_citra_1emu_NativeLibrary_SetUserSetting(JNIEnv* env, jclass type,
jstring gameID_, jstring Section_,
jstring Key_, jstring Value_) {
const char* gameID = env->GetStringUTFChars(gameID_, 0);
const char* Section = env->GetStringUTFChars(Section_, 0);
const char* Key = env->GetStringUTFChars(Key_, 0);
const char* Value = env->GetStringUTFChars(Value_, 0);
void Java_org_citra_citra_1emu_NativeLibrary_SetUserSetting(JNIEnv* env,
[[maybe_unused]] jclass clazz,
jstring j_game_id, jstring j_section,
jstring j_key, jstring j_value) {
std::string_view game_id = env->GetStringUTFChars(j_game_id, 0);
std::string_view section = env->GetStringUTFChars(j_section, 0);
std::string_view key = env->GetStringUTFChars(j_key, 0);
std::string_view value = env->GetStringUTFChars(j_value, 0);
// TODO
env->ReleaseStringUTFChars(gameID_, gameID);
env->ReleaseStringUTFChars(Section_, Section);
env->ReleaseStringUTFChars(Key_, Key);
env->ReleaseStringUTFChars(Value_, Value);
env->ReleaseStringUTFChars(j_game_id, game_id.data());
env->ReleaseStringUTFChars(j_section, section.data());
env->ReleaseStringUTFChars(j_key, key.data());
env->ReleaseStringUTFChars(j_value, value.data());
}
void Java_org_citra_citra_1emu_NativeLibrary_InitGameIni(JNIEnv* env, jclass type,
jstring gameID_) {
const char* gameID = env->GetStringUTFChars(gameID_, 0);
void Java_org_citra_citra_1emu_NativeLibrary_InitGameIni(JNIEnv* env, [[maybe_unused]] jclass clazz,
jstring j_game_id) {
std::string_view game_id = env->GetStringUTFChars(j_game_id, 0);
// TODO
env->ReleaseStringUTFChars(gameID_, gameID);
env->ReleaseStringUTFChars(j_game_id, game_id.data());
}
jdoubleArray Java_org_citra_citra_1emu_NativeLibrary_GetPerfStats(JNIEnv* env, jclass type) {
jdoubleArray Java_org_citra_citra_1emu_NativeLibrary_GetPerfStats(JNIEnv* env,
[[maybe_unused]] jclass clazz) {
auto& core = Core::System::GetInstance();
jdoubleArray jstats = env->NewDoubleArray(4);
jdoubleArray j_stats = env->NewDoubleArray(4);
if (core.IsPoweredOn()) {
auto results = core.GetAndResetPerfStats();
@ -454,22 +473,23 @@ jdoubleArray Java_org_citra_citra_1emu_NativeLibrary_GetPerfStats(JNIEnv* env, j
double stats[4] = {results.system_fps, results.game_fps, results.frametime,
results.emulation_speed};
env->SetDoubleArrayRegion(jstats, 0, 4, stats);
env->SetDoubleArrayRegion(j_stats, 0, 4, stats);
}
return jstats;
return j_stats;
}
void Java_org_citra_citra_1emu_utils_DirectoryInitialization_SetSysDirectory(
JNIEnv* env, jclass type, jstring path_) {
const char* path = env->GetStringUTFChars(path_, 0);
JNIEnv* env, [[maybe_unused]] jclass clazz, jstring j_path) {
std::string_view path = env->GetStringUTFChars(j_path, 0);
env->ReleaseStringUTFChars(path_, path);
env->ReleaseStringUTFChars(j_path, path.data());
}
void Java_org_citra_citra_1emu_NativeLibrary_Run__Ljava_lang_String_2(JNIEnv* env, jclass type,
jstring path_) {
const std::string path = GetJString(env, path_);
void Java_org_citra_citra_1emu_NativeLibrary_Run__Ljava_lang_String_2(JNIEnv* env,
[[maybe_unused]] jclass clazz,
jstring j_path) {
const std::string path = GetJString(env, j_path);
if (is_running) {
is_running = false;
@ -482,3 +502,5 @@ void Java_org_citra_citra_1emu_NativeLibrary_Run__Ljava_lang_String_2(JNIEnv* en
IDCache::GetExitEmulationActivity(), static_cast<int>(result));
}
}
} // extern "C"

View File

@ -12,166 +12,164 @@ extern "C" {
#endif
JNIEXPORT void JNICALL Java_org_citra_citra_1emu_NativeLibrary_UnPauseEmulation(JNIEnv* env,
jobject obj);
jclass clazz);
JNIEXPORT void JNICALL Java_org_citra_citra_1emu_NativeLibrary_PauseEmulation(JNIEnv* env,
jobject obj);
jclass clazz);
JNIEXPORT void JNICALL Java_org_citra_citra_1emu_NativeLibrary_StopEmulation(JNIEnv* env,
jobject obj);
jclass clazz);
JNIEXPORT jboolean JNICALL Java_org_citra_citra_1emu_NativeLibrary_IsRunning(JNIEnv* env,
jobject obj);
jclass clazz);
JNIEXPORT jboolean JNICALL Java_org_citra_citra_1emu_NativeLibrary_onGamePadEvent(
JNIEnv* env, jobject obj, jstring jDevice, jint Button, jint Action);
JNIEnv* env, jclass clazz, jstring j_device, jint j_button, jint action);
JNIEXPORT jboolean JNICALL Java_org_citra_citra_1emu_NativeLibrary_onGamePadMoveEvent(
JNIEnv* env, jobject obj, jstring jDevice, jint Axis, jfloat x, jfloat y);
JNIEnv* env, jclass clazz, jstring j_device, jint axis, jfloat x, jfloat y);
JNIEXPORT jboolean JNICALL Java_org_citra_citra_1emu_NativeLibrary_onGamePadAxisEvent(
JNIEnv* env, jobject obj, jstring jDevice, jint axis_id, jfloat axis_val);
JNIEnv* env, jclass clazz, jstring j_device, jint axis_id, jfloat axis_val);
JNIEXPORT void JNICALL Java_org_citra_citra_1emu_NativeLibrary_onTouchEvent(JNIEnv* env,
jobject obj,
jfloat x, jfloat y,
jboolean pressed);
jclass clazz, jfloat x,
jfloat y,
jboolean pressed);
JNIEXPORT void JNICALL Java_org_citra_citra_1emu_NativeLibrary_onTouchMoved(JNIEnv* env,
jobject obj,
jfloat x, jfloat y);
jclass clazz, jfloat x,
jfloat y);
JNIEXPORT jintArray JNICALL Java_org_citra_citra_1emu_NativeLibrary_GetBanner(JNIEnv* env,
jobject obj,
jstring jFile);
jclass clazz,
jstring j_file);
JNIEXPORT jstring JNICALL Java_org_citra_citra_1emu_NativeLibrary_GetTitle(JNIEnv* env,
jobject obj,
jstring jFilename);
jclass clazz,
jstring j_filename);
JNIEXPORT jstring JNICALL Java_org_citra_citra_1emu_NativeLibrary_GetDescription(
JNIEnv* env, jobject obj, jstring jFilename);
JNIEXPORT jstring JNICALL Java_org_citra_citra_1emu_NativeLibrary_GetDescription(JNIEnv* env,
jclass clazz,
jstring j_filename);
JNIEXPORT jstring JNICALL Java_org_citra_citra_1emu_NativeLibrary_GetGameId(JNIEnv* env,
jobject obj,
jstring jFilename);
jclass clazz,
jstring j_filename);
JNIEXPORT jint JNICALL Java_org_citra_citra_1emu_NativeLibrary_GetCountry(JNIEnv* env,
jobject obj,
jstring jFilename);
JNIEXPORT jint JNICALL Java_org_citra_citra_1emu_NativeLibrary_GetCountry(JNIEnv* env, jclass clazz,
jstring j_filename);
JNIEXPORT jstring JNICALL Java_org_citra_citra_1emu_NativeLibrary_GetCompany(JNIEnv* env,
jobject obj,
jstring jFilename);
jclass clazz,
jstring j_filename);
JNIEXPORT jlong JNICALL Java_org_citra_citra_1emu_NativeLibrary_GetFilesize(JNIEnv* env,
jobject obj,
jstring jFilename);
jclass clazz,
jstring j_filename);
JNIEXPORT jstring JNICALL Java_org_citra_citra_1emu_NativeLibrary_GetVersionString(JNIEnv* env,
jobject obj);
jclass clazz);
JNIEXPORT jstring JNICALL Java_org_citra_citra_1emu_NativeLibrary_GetGitRevision(JNIEnv* env,
jobject obj);
jclass clazz);
JNIEXPORT void JNICALL Java_org_citra_citra_1emu_NativeLibrary_SaveScreenShot(JNIEnv* env,
jobject obj);
jclass clazz);
JNIEXPORT void JNICALL Java_org_citra_citra_1emu_NativeLibrary_eglBindAPI(JNIEnv* env,
jobject obj,
jint api);
JNIEXPORT void JNICALL Java_org_citra_citra_1emu_NativeLibrary_eglBindAPI(JNIEnv* env, jclass clazz,
jint api);
JNIEXPORT jstring JNICALL Java_org_citra_citra_1emu_NativeLibrary_GetConfig(
JNIEnv* env, jobject obj, jstring jFile, jstring jSection, jstring jKey, jstring jDefault);
JNIEnv* env, jclass clazz, jstring j_file, jstring j_section, jstring j_key, jstring j_default);
JNIEXPORT void JNICALL Java_org_citra_citra_1emu_NativeLibrary_SetConfig(
JNIEnv* env, jobject obj, jstring jFile, jstring jSection, jstring jKey, jstring jValue);
JNIEnv* env, jclass clazz, jstring j_file, jstring j_section, jstring j_key, jstring j_value);
JNIEXPORT void JNICALL Java_org_citra_citra_1emu_NativeLibrary_SetFilename(JNIEnv* env,
jobject obj,
jstring jFile);
JNIEXPORT void JNICALL Java_org_citra_citra_1emu_NativeLibrary_SetFilename(JNIEnv* env, jclass clazz,
jstring j_file);
JNIEXPORT void JNICALL Java_org_citra_citra_1emu_NativeLibrary_SaveState(JNIEnv* env,
jobject obj, jint slot,
jboolean wait);
JNIEXPORT void JNICALL Java_org_citra_citra_1emu_NativeLibrary_SaveState(JNIEnv* env, jclass clazz,
jint slot, jboolean wait);
JNIEXPORT void JNICALL Java_org_citra_citra_1emu_NativeLibrary_SaveStateAs(JNIEnv* env,
jobject obj,
jstring path,
jboolean wait);
jclass clazz,
jstring path,
jboolean wait);
JNIEXPORT void JNICALL Java_org_citra_citra_1emu_NativeLibrary_LoadState(JNIEnv* env,
jobject obj,
jint slot);
JNIEXPORT void JNICALL Java_org_citra_citra_1emu_NativeLibrary_LoadState(JNIEnv* env, jclass clazz,
jint slot);
JNIEXPORT void JNICALL Java_org_citra_citra_1emu_NativeLibrary_LoadStateAs(JNIEnv* env,
jobject obj,
jstring path);
jclass clazz,
jstring path);
JNIEXPORT void JNICALL
Java_org_citra_citra_1emu_utils_DirectoryInitialization_CreateUserDirectories(
JNIEnv* env, jobject obj);
Java_org_citra_citra_1emu_utils_DirectoryInitialization_CreateUserDirectories(JNIEnv* env,
jclass clazz);
JNIEXPORT void JNICALL Java_org_citra_citra_1emu_NativeLibrary_SetUserDirectory(
JNIEnv* env, jobject obj, jstring jDirectory);
JNIEXPORT void JNICALL Java_org_citra_citra_1emu_NativeLibrary_SetUserDirectory(JNIEnv* env,
jclass clazz,
jstring j_directory);
JNIEXPORT void JNICALL
Java_org_citra_citra_1emu_utils_DirectoryInitialization_SetSysDirectory(
JNIEnv* env, jclass type, jstring path_);
JNIEXPORT void JNICALL Java_org_citra_citra_1emu_utils_DirectoryInitialization_SetSysDirectory(
JNIEnv* env, jclass clazz, jstring path_);
JNIEXPORT jstring JNICALL Java_org_citra_citra_1emu_NativeLibrary_GetUserDirectory(JNIEnv* env,
jobject obj);
jclass clazz);
JNIEXPORT void JNICALL Java_org_citra_citra_1emu_NativeLibrary_SetSysDirectory(JNIEnv* env,
jobject obj,
jstring path);
jclass clazz,
jstring path);
JNIEXPORT void JNICALL Java_org_citra_citra_1emu_NativeLibrary_CreateConfigFile();
JNIEXPORT void JNICALL Java_org_citra_citra_1emu_NativeLibrary_CreateConfigFile(JNIEnv* env,
jclass clazz);
JNIEXPORT jint JNICALL Java_org_citra_citra_1emu_NativeLibrary_DefaultCPUCore(JNIEnv* env,
jobject obj);
jclass clazz);
JNIEXPORT void JNICALL Java_org_citra_citra_1emu_NativeLibrary_SetProfiling(JNIEnv* env,
jobject obj,
jboolean enable);
jclass clazz,
jboolean enable);
JNIEXPORT void JNICALL Java_org_citra_citra_1emu_NativeLibrary_WriteProfileResults(JNIEnv* env,
jobject obj);
jclass clazz);
JNIEXPORT void JNICALL Java_org_citra_citra_1emu_NativeLibrary_NotifyOrientationChange(
JNIEnv* env, jclass clazz, jint layout_option, jint rotation);
JNIEXPORT void JNICALL Java_org_citra_citra_1emu_NativeLibrary_SwapScreens(
JNIEnv* env, jclass clazz, jboolean swap_screens, jint rotation);
JNIEXPORT void JNICALL Java_org_citra_citra_1emu_NativeLibrary_SwapScreens(JNIEnv* env,
jclass clazz,
jboolean swap_screens,
jint rotation);
JNIEXPORT void JNICALL Java_org_citra_citra_1emu_NativeLibrary_Run__Ljava_lang_String_2(
JNIEnv* env, jclass type, jstring path_);
JNIEnv* env, jclass clazz, jstring j_path);
JNIEXPORT void JNICALL
Java_org_citra_citra_1emu_NativeLibrary_Run__Ljava_lang_String_2Ljava_lang_String_2Z(
JNIEnv* env, jobject obj, jstring jFile, jstring jSavestate, jboolean jDeleteSavestate);
JNIEnv* env, jclass clazz, jstring j_file, jstring j_savestate, jboolean j_delete_savestate);
JNIEXPORT void JNICALL Java_org_citra_citra_1emu_NativeLibrary_SurfaceChanged(JNIEnv* env,
jobject obj,
jobject surf);
jclass clazz,
jobject surf);
JNIEXPORT void JNICALL Java_org_citra_citra_1emu_NativeLibrary_SurfaceDestroyed(JNIEnv* env,
jobject obj);
jclass clazz);
JNIEXPORT void JNICALL Java_org_citra_citra_1emu_NativeLibrary_InitGameIni(JNIEnv* env,
jclass type,
jstring gameID_);
JNIEXPORT void JNICALL Java_org_citra_citra_1emu_NativeLibrary_InitGameIni(JNIEnv* env, jclass clazz,
jstring j_game_id);
JNIEXPORT void JNICALL Java_org_citra_citra_1emu_NativeLibrary_ReloadSettings(JNIEnv* env,
jclass type);
jclass clazz);
JNIEXPORT void JNICALL Java_org_citra_citra_1emu_NativeLibrary_SetUserSetting(
JNIEnv* env, jclass type, jstring gameID_, jstring Section_, jstring Key_, jstring Value_);
JNIEnv* env, jclass clazz, jstring j_game_id, jstring j_section, jstring j_key, jstring j_value);
JNIEXPORT jstring JNICALL Java_org_citra_citra_1emu_NativeLibrary_GetUserSetting(
JNIEnv* env, jclass type, jstring gameID_, jstring Section_, jstring Key_);
JNIEnv* env, jclass clazz, jstring game_id, jstring section, jstring key);
JNIEXPORT jdoubleArray JNICALL
Java_org_citra_citra_1emu_NativeLibrary_GetPerfStats(JNIEnv* env, jclass type);
JNIEXPORT jdoubleArray JNICALL Java_org_citra_citra_1emu_NativeLibrary_GetPerfStats(JNIEnv* env,
jclass clazz);
#ifdef __cplusplus
}