feat: updated engine
This commit is contained in:
parent
cbe99774ff
commit
f4cf6b3999
6607 changed files with 910135 additions and 430025 deletions
|
|
@ -49,11 +49,11 @@
|
|||
#include "core/config/project_settings.h"
|
||||
#include "core/input/input.h"
|
||||
#include "core/os/main_loop.h"
|
||||
#include "core/os/os.h"
|
||||
#include "core/profiling/profiling.h"
|
||||
#include "main/main.h"
|
||||
#include "servers/rendering/rendering_server.h"
|
||||
|
||||
#include "servers/camera/camera_server.h"
|
||||
#include "servers/rendering/rendering_server.h"
|
||||
|
||||
#ifndef XR_DISABLED
|
||||
#include "servers/xr/xr_server.h"
|
||||
|
|
@ -139,6 +139,21 @@ static void _terminate(JNIEnv *env, bool p_restart = false) {
|
|||
}
|
||||
}
|
||||
|
||||
static String rendering_source_to_string(OS::RenderingSource p_source) {
|
||||
switch (p_source) {
|
||||
case OS::RENDERING_SOURCE_DEFAULT:
|
||||
return "Default";
|
||||
case OS::RENDERING_SOURCE_PROJECT_SETTING:
|
||||
return "ProjectSettings";
|
||||
case OS::RENDERING_SOURCE_COMMANDLINE:
|
||||
return "Commandline";
|
||||
case OS::RENDERING_SOURCE_FALLBACK:
|
||||
return "Fallback";
|
||||
default:
|
||||
return "Unknown";
|
||||
}
|
||||
}
|
||||
|
||||
extern "C" {
|
||||
|
||||
JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_setVirtualKeyboardHeight(JNIEnv *env, jclass clazz, jint p_height) {
|
||||
|
|
@ -147,7 +162,7 @@ JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_setVirtualKeyboardHei
|
|||
}
|
||||
}
|
||||
|
||||
JNIEXPORT jboolean JNICALL Java_org_godotengine_godot_GodotLib_initialize(JNIEnv *env, jclass clazz, jobject p_godot_instance, jobject p_asset_manager, jobject p_godot_io, jobject p_net_utils, jobject p_directory_access_handler, jobject p_file_access_handler, jboolean p_use_apk_expansion) {
|
||||
JNIEXPORT jboolean JNICALL Java_org_godotengine_godot_GodotLib_initialize(JNIEnv *env, jclass clazz, jobject p_godot_native_bridge, jobject p_asset_manager, jobject p_godot_io, jobject p_net_utils, jobject p_directory_access_handler, jobject p_file_access_handler, jboolean p_use_apk_expansion) {
|
||||
godot_init_profiler();
|
||||
|
||||
JavaVM *jvm;
|
||||
|
|
@ -157,7 +172,7 @@ JNIEXPORT jboolean JNICALL Java_org_godotengine_godot_GodotLib_initialize(JNIEnv
|
|||
setup_android_class_loader();
|
||||
|
||||
// create our wrapper classes
|
||||
godot_java = new GodotJavaWrapper(env, p_godot_instance);
|
||||
godot_java = new GodotJavaWrapper(env, p_godot_native_bridge);
|
||||
godot_io_java = new GodotIOJavaWrapper(env, p_godot_io);
|
||||
|
||||
FileAccessAndroid::setup(p_asset_manager);
|
||||
|
|
@ -258,7 +273,7 @@ JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_back(JNIEnv *env, jcl
|
|||
}
|
||||
|
||||
if (DisplayServerAndroid *dsa = Object::cast_to<DisplayServerAndroid>(DisplayServer::get_singleton())) {
|
||||
dsa->send_window_event(DisplayServer::WINDOW_EVENT_GO_BACK_REQUEST);
|
||||
dsa->send_window_event(DisplayServerEnums::WINDOW_EVENT_GO_BACK_REQUEST);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -347,10 +362,11 @@ JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_dispatchTouchEvent(JN
|
|||
tp.pos = Point2(p[1], p[2]);
|
||||
tp.pressure = p[3];
|
||||
tp.tilt = Vector2(p[4], p[5]);
|
||||
tp.double_tap = p_double_tap;
|
||||
points.push_back(tp);
|
||||
}
|
||||
|
||||
input_handler->process_touch_event(ev, pointer, points, p_double_tap);
|
||||
input_handler->process_touch_event(ev, pointer, points);
|
||||
}
|
||||
|
||||
// Called on the UI thread
|
||||
|
|
@ -487,13 +503,46 @@ JNIEXPORT jstring JNICALL Java_org_godotengine_godot_GodotLib_getGlobal(JNIEnv *
|
|||
return env->NewStringUTF(setting_value.utf8().get_data());
|
||||
}
|
||||
|
||||
JNIEXPORT jobjectArray JNICALL Java_org_godotengine_godot_GodotLib_getRendererInfo(JNIEnv *env, jclass clazz) {
|
||||
String rendering_driver = RenderingServer::get_singleton()->get_current_rendering_driver_name();
|
||||
JNIEXPORT jobjectArray JNICALL Java_org_godotengine_godot_GodotLib_getRendererInfo(JNIEnv *env, jclass clazz, jboolean p_vulkan_requirements_met) {
|
||||
String rendering_driver_original = RenderingServer::get_singleton()->get_current_rendering_driver_name();
|
||||
String rendering_driver_chosen = rendering_driver_original;
|
||||
String rendering_method = RenderingServer::get_singleton()->get_current_rendering_method();
|
||||
|
||||
jobjectArray result = env->NewObjectArray(2, jni_find_class(env, "java/lang/String"), nullptr);
|
||||
env->SetObjectArrayElement(result, 0, env->NewStringUTF(rendering_driver.utf8().get_data()));
|
||||
env->SetObjectArrayElement(result, 1, env->NewStringUTF(rendering_method.utf8().get_data()));
|
||||
#ifdef VULKAN_ENABLED
|
||||
if (rendering_driver_original == "vulkan" && !DisplayServerAndroid::check_vulkan_global_context(p_vulkan_requirements_met)) {
|
||||
// The Android display server only gets created after this step, so a static check must be used to check for Vulkan
|
||||
// availability instead. If the check fails, it'll fall back to OpenGL3 accordingly if the relevant project setting
|
||||
// is enabled. The Vulkan context created by this check will be reused by the DisplayServer afterwards.
|
||||
rendering_driver_chosen = RenderingServer::get_singleton()->get_current_rendering_driver_name();
|
||||
rendering_method = RenderingServer::get_singleton()->get_current_rendering_method();
|
||||
}
|
||||
#ifndef XR_DISABLED
|
||||
// When running in XR mode, vulkan initialization must be done by the XR module, so we ensure that the vulkan
|
||||
// global context is reset.
|
||||
// Note: This is temporary workaround to address https://github.com/godotengine/godot/issues/115924
|
||||
// A proper fix involves updating the Android init flow so that DisplayServerAndroid can update the Android surface
|
||||
// type (vulkan or opengl) after it's initialized.
|
||||
bool xr_enabled = false;
|
||||
if (XRServer::get_xr_mode() == XRServer::XRMODE_DEFAULT) {
|
||||
xr_enabled = GLOBAL_GET_CACHED(bool, "xr/shaders/enabled");
|
||||
} else {
|
||||
xr_enabled = XRServer::get_xr_mode() == XRServer::XRMODE_ON;
|
||||
}
|
||||
if (xr_enabled) {
|
||||
DisplayServerAndroid::free_vulkan_global_context();
|
||||
}
|
||||
#endif // XR_DISABLED
|
||||
#endif
|
||||
|
||||
String rendering_driver_source = rendering_source_to_string(OS::get_singleton()->get_current_rendering_driver_name_source());
|
||||
String rendering_method_source = rendering_source_to_string(OS::get_singleton()->get_current_rendering_method_source());
|
||||
|
||||
jobjectArray result = env->NewObjectArray(5, jni_find_class(env, "java/lang/String"), nullptr);
|
||||
env->SetObjectArrayElement(result, 0, env->NewStringUTF(rendering_driver_chosen.utf8().get_data()));
|
||||
env->SetObjectArrayElement(result, 1, env->NewStringUTF(rendering_driver_original.utf8().get_data()));
|
||||
env->SetObjectArrayElement(result, 2, env->NewStringUTF(rendering_method.utf8().get_data()));
|
||||
env->SetObjectArrayElement(result, 3, env->NewStringUTF(rendering_driver_source.utf8().get_data()));
|
||||
env->SetObjectArrayElement(result, 4, env->NewStringUTF(rendering_method_source.utf8().get_data()));
|
||||
|
||||
return result;
|
||||
}
|
||||
|
|
@ -501,9 +550,11 @@ JNIEXPORT jobjectArray JNICALL Java_org_godotengine_godot_GodotLib_getRendererIn
|
|||
JNIEXPORT jstring JNICALL Java_org_godotengine_godot_GodotLib_getEditorSetting(JNIEnv *env, jclass clazz, jstring p_setting_key) {
|
||||
String editor_setting_value = "";
|
||||
#ifdef TOOLS_ENABLED
|
||||
String godot_setting_key = jstring_to_string(p_setting_key, env);
|
||||
Variant editor_setting = EDITOR_GET(godot_setting_key);
|
||||
editor_setting_value = (editor_setting.get_type() == Variant::NIL) ? "" : editor_setting;
|
||||
if (EditorSettings::get_singleton() != nullptr) {
|
||||
String godot_setting_key = jstring_to_string(p_setting_key, env);
|
||||
Variant editor_setting = EDITOR_GET(godot_setting_key);
|
||||
editor_setting_value = (editor_setting.get_type() == Variant::NIL) ? "" : editor_setting;
|
||||
}
|
||||
#else
|
||||
WARN_PRINT("Access to the Editor Settings in only available on Editor builds");
|
||||
#endif
|
||||
|
|
@ -630,7 +681,7 @@ JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_onRendererPaused(JNIE
|
|||
}
|
||||
}
|
||||
|
||||
JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_onScreenRotationChange(JNIEnv *env, jclass clazz, jint p_orientation) {
|
||||
JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_onOrientationChange(JNIEnv *env, jclass clazz, jint p_orientation) {
|
||||
if (step.get() <= STEP_SETUP) {
|
||||
return;
|
||||
}
|
||||
|
|
@ -639,6 +690,11 @@ JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_onScreenRotationChang
|
|||
if (camera_server) {
|
||||
camera_server->handle_display_rotation_change(p_orientation);
|
||||
}
|
||||
|
||||
DisplayServer *display_server = DisplayServer::get_singleton();
|
||||
if (display_server) {
|
||||
display_server->emit_signal("orientation_changed", p_orientation);
|
||||
}
|
||||
}
|
||||
|
||||
JNIEXPORT jboolean JNICALL Java_org_godotengine_godot_GodotLib_shouldDispatchInputToRenderThread(JNIEnv *env, jclass clazz) {
|
||||
|
|
@ -677,4 +733,18 @@ JNIEXPORT jboolean JNICALL Java_org_godotengine_godot_GodotLib_hasFeature(JNIEnv
|
|||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_onPictureInPictureModeChanged(JNIEnv *env, jclass clazz, jboolean p_is_in_picture_in_picture_mode) {
|
||||
if (step.get() <= STEP_SETUP) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (os_android->get_main_loop()) {
|
||||
if (p_is_in_picture_in_picture_mode) {
|
||||
os_android->get_main_loop()->notification(MainLoop::NOTIFICATION_APPLICATION_PIP_MODE_ENTERED);
|
||||
} else {
|
||||
os_android->get_main_loop()->notification(MainLoop::NOTIFICATION_APPLICATION_PIP_MODE_EXITED);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue