diff --git a/platform/android/display_server_android.cpp b/platform/android/display_server_android.cpp index 6eb3f6a24d..611053df26 100644 --- a/platform/android/display_server_android.cpp +++ b/platform/android/display_server_android.cpp @@ -717,6 +717,14 @@ void DisplayServerAndroid::notify_surface_changed(int p_width, int p_height) { } } +void DisplayServerAndroid::notify_application_paused() { +#if defined(RD_ENABLED) + if (rendering_device) { + rendering_device->update_pipeline_cache(); + } +#endif // defined(RD_ENABLED) +} + DisplayServerAndroid::DisplayServerAndroid(const String &p_rendering_driver, DisplayServer::WindowMode p_mode, DisplayServer::VSyncMode p_vsync_mode, uint32_t p_flags, const Vector2i *p_position, const Vector2i &p_resolution, int p_screen, Context p_context, int64_t p_parent_window, Error &r_error) { rendering_driver = p_rendering_driver; diff --git a/platform/android/display_server_android.h b/platform/android/display_server_android.h index 3c7af20f9d..f5b437708a 100644 --- a/platform/android/display_server_android.h +++ b/platform/android/display_server_android.h @@ -247,6 +247,7 @@ public: void reset_window(); void notify_surface_changed(int p_width, int p_height); + void notify_application_paused(); virtual Point2i mouse_get_position() const override; virtual BitField mouse_get_button_state() const override; diff --git a/platform/android/java/nativeSrcsConfigs/CMakeLists.txt b/platform/android/java/nativeSrcsConfigs/CMakeLists.txt index 1584c6fd5c..0c3956841d 100644 --- a/platform/android/java/nativeSrcsConfigs/CMakeLists.txt +++ b/platform/android/java/nativeSrcsConfigs/CMakeLists.txt @@ -21,4 +21,12 @@ target_include_directories(${PROJECT_NAME} ${ANDROID_ROOT_DIR} ${OPENXR_INCLUDE_DIR}) -add_definitions(-DUNIX_ENABLED -DVULKAN_ENABLED -DANDROID_ENABLED -DGLES3_ENABLED -DTOOLS_ENABLED -DDEBUG_ENABLED) +add_definitions( + -DUNIX_ENABLED + -DVULKAN_ENABLED + -DANDROID_ENABLED + -DGLES3_ENABLED + -DTOOLS_ENABLED + -DDEBUG_ENABLED + -DRD_ENABLED +) diff --git a/platform/android/java_godot_lib_jni.cpp b/platform/android/java_godot_lib_jni.cpp index b7bb2c0010..41f963849a 100644 --- a/platform/android/java_godot_lib_jni.cpp +++ b/platform/android/java_godot_lib_jni.cpp @@ -624,6 +624,10 @@ JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_onRendererPaused(JNIE if (os_android->get_main_loop()) { os_android->get_main_loop()->notification(MainLoop::NOTIFICATION_APPLICATION_PAUSED); } + + if (DisplayServerAndroid *dsa = Object::cast_to(DisplayServer::get_singleton())) { + dsa->notify_application_paused(); + } } JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_onScreenRotationChange(JNIEnv *env, jclass clazz, jint p_orientation) { diff --git a/servers/rendering/rendering_device.cpp b/servers/rendering/rendering_device.cpp index cbcd18410e..71b5c830dd 100644 --- a/servers/rendering/rendering_device.cpp +++ b/servers/rendering/rendering_device.cpp @@ -4224,7 +4224,7 @@ RID RenderingDevice::render_pipeline_create(RID p_shader, FramebufferFormatID p_ ERR_FAIL_COND_V(!pipeline.driver_id, RID()); if (pipeline_cache_enabled) { - _update_pipeline_cache(); + update_pipeline_cache(); } pipeline.shader = p_shader; @@ -4312,7 +4312,7 @@ RID RenderingDevice::compute_pipeline_create(RID p_shader, const Vector RenderingDevice::_load_pipeline_cache() { } } -void RenderingDevice::_update_pipeline_cache(bool p_closing) { +void RenderingDevice::update_pipeline_cache(bool p_closing) { _THREAD_SAFE_METHOD_ { @@ -7525,7 +7525,7 @@ void RenderingDevice::finalize() { } if (pipeline_cache_enabled) { - _update_pipeline_cache(true); + update_pipeline_cache(true); driver->pipeline_cache_free(); } diff --git a/servers/rendering/rendering_device.h b/servers/rendering/rendering_device.h index 4ca7b32adb..14aafc9445 100644 --- a/servers/rendering/rendering_device.h +++ b/servers/rendering/rendering_device.h @@ -1215,7 +1215,6 @@ private: WorkerThreadPool::TaskID pipeline_cache_save_task = WorkerThreadPool::INVALID_TASK_ID; Vector _load_pipeline_cache(); - void _update_pipeline_cache(bool p_closing = false); static void _save_pipeline_cache(void *p_data); struct ComputePipeline { @@ -1237,6 +1236,8 @@ public: RID compute_pipeline_create(RID p_shader, const Vector &p_specialization_constants = Vector()); bool compute_pipeline_is_valid(RID p_pipeline); + void update_pipeline_cache(bool p_closing = false); + private: /****************/ /**** SCREEN ****/