@@ -837,23 +837,23 @@ void DisplayServerAndroid::_mouse_update_mode() {
837837 ? mouse_mode_override
838838 : mouse_mode_base;
839839
840- if (!OS_Android::get_singleton ()->get_godot_java ()->get_godot_view ()-> can_update_pointer_icon () || ! OS_Android::get_singleton ()-> get_godot_java ()-> get_godot_view ()-> can_capture_pointer ()) {
840+ if (!OS_Android::get_singleton ()->get_godot_java ()->can_capture_pointer ()) {
841841 return ;
842842 }
843843 if (mouse_mode == wanted_mouse_mode) {
844844 return ;
845845 }
846846
847847 if (wanted_mouse_mode == MouseMode::MOUSE_MODE_HIDDEN) {
848- OS_Android::get_singleton ()->get_godot_java ()->get_godot_view ()-> set_pointer_icon (CURSOR_TYPE_NULL);
848+ OS_Android::get_singleton ()->get_godot_java ()->set_pointer_icon (CURSOR_TYPE_NULL);
849849 } else {
850850 cursor_set_shape (cursor_shape);
851851 }
852852
853853 if (wanted_mouse_mode == MouseMode::MOUSE_MODE_CAPTURED) {
854- OS_Android::get_singleton ()->get_godot_java ()->get_godot_view ()-> request_pointer_capture ();
854+ OS_Android::get_singleton ()->get_godot_java ()->request_pointer_capture ();
855855 } else {
856- OS_Android::get_singleton ()->get_godot_java ()->get_godot_view ()-> release_pointer_capture ();
856+ OS_Android::get_singleton ()->get_godot_java ()->release_pointer_capture ();
857857 }
858858
859859 mouse_mode = wanted_mouse_mode;
@@ -903,17 +903,14 @@ BitField<MouseButtonMask> DisplayServerAndroid::mouse_get_button_state() const {
903903}
904904
905905void DisplayServerAndroid::_cursor_set_shape_helper (CursorShape p_shape, bool force) {
906- if (!OS_Android::get_singleton ()->get_godot_java ()->get_godot_view ()->can_update_pointer_icon ()) {
907- return ;
908- }
909906 if (cursor_shape == p_shape && !force) {
910907 return ;
911908 }
912909
913910 cursor_shape = p_shape;
914911
915912 if (mouse_mode == MouseMode::MOUSE_MODE_VISIBLE || mouse_mode == MouseMode::MOUSE_MODE_CONFINED) {
916- OS_Android::get_singleton ()->get_godot_java ()->get_godot_view ()-> set_pointer_icon (android_cursors[cursor_shape]);
913+ OS_Android::get_singleton ()->get_godot_java ()->set_pointer_icon (android_cursors[cursor_shape]);
917914 }
918915}
919916
@@ -932,7 +929,7 @@ void DisplayServerAndroid::cursor_set_custom_image(const Ref<Resource> &p_cursor
932929 if (!cursor_path.is_empty ()) {
933930 cursor_path = ProjectSettings::get_singleton ()->globalize_path (cursor_path);
934931 }
935- OS_Android::get_singleton ()->get_godot_java ()->get_godot_view ()-> configure_pointer_icon (android_cursors[cursor_shape], cursor_path, p_hotspot);
932+ OS_Android::get_singleton ()->get_godot_java ()->configure_pointer_icon (android_cursors[cursor_shape], cursor_path, p_hotspot);
936933 _cursor_set_shape_helper (p_shape, true );
937934}
938935
@@ -953,16 +950,24 @@ DisplayServer::VSyncMode DisplayServerAndroid::window_get_vsync_mode(WindowID p_
953950 return DisplayServer::VSYNC_ENABLED;
954951}
955952
956- void DisplayServerAndroid::reset_swap_buffers_flag () {
957- swap_buffers_flag = false ;
958- }
953+ void DisplayServerAndroid::release_rendering_thread () {
954+ if (egl_current_window_id == INVALID_WINDOW_ID) {
955+ return ;
956+ }
959957
960- bool DisplayServerAndroid::should_swap_buffers () const {
961- return swap_buffers_flag;
958+ GodotJavaWrapper *godot_java = OS_Android::get_singleton ()->get_godot_java ();
959+ ERR_FAIL_NULL (godot_java);
960+ godot_java->release_current_gl_window (egl_current_window_id);
962961}
963962
964963void DisplayServerAndroid::swap_buffers () {
965- swap_buffers_flag = true ;
964+ if (egl_current_window_id == INVALID_WINDOW_ID) {
965+ return ;
966+ }
967+
968+ GodotJavaWrapper *godot_java = OS_Android::get_singleton ()->get_godot_java ();
969+ ERR_FAIL_NULL (godot_java);
970+ godot_java->egl_swap_buffers (egl_current_window_id);
966971}
967972
968973void DisplayServerAndroid::set_native_icon (const String &p_filename) {
@@ -976,3 +981,18 @@ void DisplayServerAndroid::set_icon(const Ref<Image> &p_icon) {
976981bool DisplayServerAndroid::is_window_transparency_available () const {
977982 return GLOBAL_GET_CACHED (bool , " display/window/per_pixel_transparency/allowed" );
978983}
984+
985+ void DisplayServerAndroid::gl_window_make_current (DisplayServer::WindowID p_window_id) {
986+ if (p_window_id == INVALID_WINDOW_ID) {
987+ return ;
988+ }
989+
990+ if (egl_current_window_id == p_window_id) {
991+ return ;
992+ }
993+
994+ GodotJavaWrapper *godot_java = OS_Android::get_singleton ()->get_godot_java ();
995+ ERR_FAIL_NULL (godot_java);
996+ godot_java->make_gl_window_current (p_window_id);
997+ egl_current_window_id = p_window_id;
998+ }
0 commit comments