Refactor android backend JNI calls & fix application context
This commit is contained in:
parent
2e569b2cd3
commit
810f64ad76
1 changed files with 42 additions and 50 deletions
|
|
@ -39,6 +39,22 @@ namespace
|
|||
{}
|
||||
};
|
||||
|
||||
template <typename F>
|
||||
auto try_native(JNIEnv * env, F && f) try
|
||||
{
|
||||
return f();
|
||||
}
|
||||
catch (std::exception const & e)
|
||||
{
|
||||
env->ThrowNew(env->FindClass("java/lang/Exception"), e.what());
|
||||
__builtin_unreachable();
|
||||
}
|
||||
catch (...)
|
||||
{
|
||||
env->ThrowNew(env->FindClass("java/lang/Exception"), "Unknown exception");
|
||||
__builtin_unreachable();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
extern "C" void Java_psemek_app_PsemekApplication_setupLogging(JNIEnv *, jclass)
|
||||
|
|
@ -46,26 +62,20 @@ extern "C" void Java_psemek_app_PsemekApplication_setupLogging(JNIEnv *, jclass)
|
|||
psemek::log::add_sink(std::make_unique<sink_impl>());
|
||||
}
|
||||
|
||||
extern "C" jlong Java_psemek_app_PsemekApplication_createNativeApp(JNIEnv * env, jclass) try
|
||||
extern "C" jlong Java_psemek_app_PsemekApplication_createNativeApp(JNIEnv * env, jclass)
|
||||
{
|
||||
auto factory = psemek::app::make_application_factory();
|
||||
return try_native(env, [&]{
|
||||
auto factory = psemek::app::make_application_factory();
|
||||
|
||||
psemek::gfx::init();
|
||||
psemek::gfx::init();
|
||||
|
||||
psemek::app::application::context context;
|
||||
auto app = factory->create(factory->options(), context).release();
|
||||
psemek::app::application::context context;
|
||||
context.show_cursor = [](bool){};
|
||||
context.vsync = [](bool){};
|
||||
auto app = factory->create(factory->options(), context).release();
|
||||
|
||||
return reinterpret_cast<jlong>(app);
|
||||
}
|
||||
catch (std::exception const & e)
|
||||
{
|
||||
env->ThrowNew(env->FindClass("java/lang/Exception"), e.what());
|
||||
return 0;
|
||||
}
|
||||
catch (...)
|
||||
{
|
||||
env->ThrowNew(env->FindClass("java/lang/Exception"), "Unknown exception");
|
||||
return 0;
|
||||
return reinterpret_cast<jlong>(app);
|
||||
});
|
||||
}
|
||||
|
||||
extern "C" void Java_psemek_app_PsemekApplication_destroyNativeApp(JNIEnv *, jclass, jlong ptr)
|
||||
|
|
@ -73,45 +83,27 @@ extern "C" void Java_psemek_app_PsemekApplication_destroyNativeApp(JNIEnv *, jcl
|
|||
delete reinterpret_cast<psemek::app::application *>(ptr);
|
||||
}
|
||||
|
||||
extern "C" void Java_psemek_app_PsemekApplication_resizeNative(JNIEnv * env, jclass, jlong ptr, jint width, jint height) try
|
||||
extern "C" void Java_psemek_app_PsemekApplication_resizeNative(JNIEnv * env, jclass, jlong ptr, jint width, jint height)
|
||||
{
|
||||
auto app = reinterpret_cast<psemek::app::application *>(ptr);
|
||||
app->on_event(psemek::app::resize_event{{width, height}});
|
||||
}
|
||||
catch (std::exception const & e)
|
||||
{
|
||||
env->ThrowNew(env->FindClass("java/lang/Exception"), e.what());
|
||||
}
|
||||
catch (...)
|
||||
{
|
||||
env->ThrowNew(env->FindClass("java/lang/Exception"), "Unknown exception");
|
||||
try_native(env, [&]{
|
||||
auto app = reinterpret_cast<psemek::app::application *>(ptr);
|
||||
app->on_event(psemek::app::resize_event{{width, height}});
|
||||
});
|
||||
}
|
||||
|
||||
extern "C" void Java_psemek_app_PsemekApplication_touchNative(JNIEnv * env, jclass, jlong ptr, jint x, jint y) try
|
||||
extern "C" void Java_psemek_app_PsemekApplication_touchNative(JNIEnv * env, jclass, jlong ptr, jint x, jint y)
|
||||
{
|
||||
auto app = reinterpret_cast<psemek::app::application *>(ptr);
|
||||
app->on_event(psemek::app::touch_event{{x, y}});
|
||||
}
|
||||
catch (std::exception const & e)
|
||||
{
|
||||
env->ThrowNew(env->FindClass("java/lang/Exception"), e.what());
|
||||
}
|
||||
catch (...)
|
||||
{
|
||||
env->ThrowNew(env->FindClass("java/lang/Exception"), "Unknown exception");
|
||||
try_native(env, [&]{
|
||||
auto app = reinterpret_cast<psemek::app::application *>(ptr);
|
||||
app->on_event(psemek::app::touch_event{{x, y}});
|
||||
});
|
||||
}
|
||||
|
||||
extern "C" void Java_psemek_app_PsemekApplication_drawFrameNative(JNIEnv * env, jclass, jlong ptr) try
|
||||
extern "C" void Java_psemek_app_PsemekApplication_drawFrameNative(JNIEnv * env, jclass, jlong ptr)
|
||||
{
|
||||
auto app = reinterpret_cast<psemek::app::application *>(ptr);
|
||||
app->update();
|
||||
app->present();
|
||||
}
|
||||
catch (std::exception const & e)
|
||||
{
|
||||
env->ThrowNew(env->FindClass("java/lang/Exception"), e.what());
|
||||
}
|
||||
catch (...)
|
||||
{
|
||||
env->ThrowNew(env->FindClass("java/lang/Exception"), "Unknown exception");
|
||||
try_native(env, [&]{
|
||||
auto app = reinterpret_cast<psemek::app::application *>(ptr);
|
||||
app->update();
|
||||
app->present();
|
||||
});
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue