summaryrefslogtreecommitdiffstats
path: root/modules
diff options
context:
space:
mode:
Diffstat (limited to 'modules')
-rw-r--r--modules/SCsub3
-rw-r--r--modules/fbx/editor/editor_scene_importer_ufbx.cpp2
-rwxr-xr-xmodules/mono/build_scripts/build_assemblies.py10
-rw-r--r--modules/mono/build_scripts/mono_configure.py4
-rw-r--r--modules/mono/config.py2
-rw-r--r--modules/mono/doc_classes/CSharpScript.xml1
-rw-r--r--modules/mono/doc_classes/GodotSharp.xml20
-rw-r--r--modules/mono/editor/editor_internal_calls.cpp2
-rw-r--r--modules/mono/glue/GodotSharp/GodotSharp/Core/Aabb.cs6
-rw-r--r--modules/mono/mono_gd/gd_mono.cpp11
-rw-r--r--modules/mono/mono_gd/gd_mono.h8
-rw-r--r--modules/mono/register_types.cpp3
-rw-r--r--modules/navigation/3d/nav_mesh_generator_3d.cpp26
-rw-r--r--modules/openxr/doc_classes/OpenXRExtensionWrapperExtension.xml6
-rw-r--r--modules/openxr/extensions/openxr_extension_wrapper.h1
-rw-r--r--modules/openxr/extensions/openxr_extension_wrapper_extension.cpp5
-rw-r--r--modules/openxr/extensions/openxr_extension_wrapper_extension.h2
-rw-r--r--modules/openxr/extensions/openxr_fb_foveation_extension.cpp37
-rw-r--r--modules/openxr/extensions/openxr_fb_foveation_extension.h12
-rw-r--r--modules/openxr/openxr_api.cpp4
-rw-r--r--modules/openxr/scene/openxr_composition_layer.cpp4
-rw-r--r--modules/text_server_adv/gdextension_build/SConstruct7
-rw-r--r--modules/text_server_adv/gdextension_build/methods.py62
-rw-r--r--modules/text_server_fb/gdextension_build/SConstruct5
-rw-r--r--modules/text_server_fb/gdextension_build/methods.py62
25 files changed, 162 insertions, 143 deletions
diff --git a/modules/SCsub b/modules/SCsub
index 739c5de0b5..db0e563dc4 100644
--- a/modules/SCsub
+++ b/modules/SCsub
@@ -1,8 +1,9 @@
#!/usr/bin/env python
-import methods
import os
+import methods
+
Import("env")
env_modules = env.Clone()
diff --git a/modules/fbx/editor/editor_scene_importer_ufbx.cpp b/modules/fbx/editor/editor_scene_importer_ufbx.cpp
index 3cc919fae2..e0f60fe998 100644
--- a/modules/fbx/editor/editor_scene_importer_ufbx.cpp
+++ b/modules/fbx/editor/editor_scene_importer_ufbx.cpp
@@ -111,7 +111,7 @@ void EditorSceneFormatImporterUFBX::get_import_options(const String &p_path,
void EditorSceneFormatImporterUFBX::handle_compatibility_options(HashMap<StringName, Variant> &p_import_params) const {
if (!p_import_params.has("fbx/importer")) {
- p_import_params["fbx/importer"] = EditorSceneFormatImporterUFBX::FBX_IMPORTER_UFBX;
+ p_import_params["fbx/importer"] = EditorSceneFormatImporterUFBX::FBX_IMPORTER_FBX2GLTF;
}
}
diff --git a/modules/mono/build_scripts/build_assemblies.py b/modules/mono/build_scripts/build_assemblies.py
index f9709362eb..efbf298f99 100755
--- a/modules/mono/build_scripts/build_assemblies.py
+++ b/modules/mono/build_scripts/build_assemblies.py
@@ -5,7 +5,7 @@ import os.path
import shlex
import subprocess
from dataclasses import dataclass
-from typing import Optional, List
+from typing import List, Optional
def find_dotnet_cli():
@@ -304,9 +304,7 @@ def generate_sdk_package_versions():
<GodotVersionConstants>{1}</GodotVersionConstants>
</PropertyGroup>
</Project>
-""".format(
- version_str, ";".join(version_defines)
- )
+""".format(version_str, ";".join(version_defines))
# We write in ../SdkPackageVersions.props.
with open(os.path.join(dirname(script_path), "SdkPackageVersions.props"), "w", encoding="utf-8", newline="\n") as f:
@@ -323,9 +321,7 @@ def generate_sdk_package_versions():
public const string VersionDocsUrl = "https://docs.godotengine.org/en/{docs_branch}";
}}
}}
-""".format(
- **version_info
- )
+""".format(**version_info)
generators_dir = os.path.join(
dirname(script_path),
diff --git a/modules/mono/build_scripts/mono_configure.py b/modules/mono/build_scripts/mono_configure.py
index e5469c4980..98c50dcc22 100644
--- a/modules/mono/build_scripts/mono_configure.py
+++ b/modules/mono/build_scripts/mono_configure.py
@@ -1,7 +1,3 @@
-import os
-import os.path
-
-
def is_desktop(platform):
return platform in ["windows", "macos", "linuxbsd"]
diff --git a/modules/mono/config.py b/modules/mono/config.py
index 3d087c9e27..5ebdb83b36 100644
--- a/modules/mono/config.py
+++ b/modules/mono/config.py
@@ -12,7 +12,7 @@ def configure(env):
# Check if the platform has marked mono as supported.
supported = env.get("supported", [])
- if not "mono" in supported:
+ if "mono" not in supported:
raise RuntimeError("This module does not currently support building for this platform")
env.add_module_version_string("mono")
diff --git a/modules/mono/doc_classes/CSharpScript.xml b/modules/mono/doc_classes/CSharpScript.xml
index b559ca20b2..7e14259d5a 100644
--- a/modules/mono/doc_classes/CSharpScript.xml
+++ b/modules/mono/doc_classes/CSharpScript.xml
@@ -5,7 +5,6 @@
</brief_description>
<description>
This class represents a C# script. It is the C# equivalent of the [GDScript] class and is only available in Mono-enabled Godot builds.
- See also [GodotSharp].
</description>
<tutorials>
<link title="C# documentation index">$DOCS_URL/tutorials/scripting/c_sharp/index.html</link>
diff --git a/modules/mono/doc_classes/GodotSharp.xml b/modules/mono/doc_classes/GodotSharp.xml
deleted file mode 100644
index 969ca14350..0000000000
--- a/modules/mono/doc_classes/GodotSharp.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<class name="GodotSharp" inherits="Object" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../doc/class.xsd">
- <brief_description>
- Bridge between Godot and the Mono runtime (Mono-enabled builds only).
- </brief_description>
- <description>
- This class is a bridge between Godot and the Mono runtime. It exposes several low-level operations and is only available in Mono-enabled Godot builds.
- See also [CSharpScript].
- </description>
- <tutorials>
- </tutorials>
- <methods>
- <method name="is_runtime_initialized">
- <return type="bool" />
- <description>
- Returns [code]true[/code] if the .NET runtime is initialized, [code]false[/code] otherwise.
- </description>
- </method>
- </methods>
-</class>
diff --git a/modules/mono/editor/editor_internal_calls.cpp b/modules/mono/editor/editor_internal_calls.cpp
index 05dacd28fb..03d8b4eab6 100644
--- a/modules/mono/editor/editor_internal_calls.cpp
+++ b/modules/mono/editor/editor_internal_calls.cpp
@@ -143,7 +143,7 @@ bool godot_icall_Internal_IsAssembliesReloadingNeeded() {
void godot_icall_Internal_ReloadAssemblies(bool p_soft_reload) {
#ifdef GD_MONO_HOT_RELOAD
- mono_bind::GodotSharp::get_singleton()->call_deferred(SNAME("_reload_assemblies"), (bool)p_soft_reload);
+ callable_mp(mono_bind::GodotSharp::get_singleton(), &mono_bind::GodotSharp::reload_assemblies).call_deferred(p_soft_reload);
#endif
}
diff --git a/modules/mono/glue/GodotSharp/GodotSharp/Core/Aabb.cs b/modules/mono/glue/GodotSharp/GodotSharp/Core/Aabb.cs
index ab7f8ede44..33f0850a8d 100644
--- a/modules/mono/glue/GodotSharp/GodotSharp/Core/Aabb.cs
+++ b/modules/mono/glue/GodotSharp/GodotSharp/Core/Aabb.cs
@@ -318,9 +318,9 @@ namespace Godot
Vector3 ofs = _position + halfExtents;
return ofs + new Vector3(
- dir.X > 0f ? -halfExtents.X : halfExtents.X,
- dir.Y > 0f ? -halfExtents.Y : halfExtents.Y,
- dir.Z > 0f ? -halfExtents.Z : halfExtents.Z);
+ dir.X > 0f ? halfExtents.X : -halfExtents.X,
+ dir.Y > 0f ? halfExtents.Y : -halfExtents.Y,
+ dir.Z > 0f ? halfExtents.Z : -halfExtents.Z);
}
/// <summary>
diff --git a/modules/mono/mono_gd/gd_mono.cpp b/modules/mono/mono_gd/gd_mono.cpp
index 0e34616951..48caae8523 100644
--- a/modules/mono/mono_gd/gd_mono.cpp
+++ b/modules/mono/mono_gd/gd_mono.cpp
@@ -564,11 +564,7 @@ namespace mono_bind {
GodotSharp *GodotSharp::singleton = nullptr;
-bool GodotSharp::_is_runtime_initialized() {
- return GDMono::get_singleton() != nullptr && GDMono::get_singleton()->is_runtime_initialized();
-}
-
-void GodotSharp::_reload_assemblies(bool p_soft_reload) {
+void GodotSharp::reload_assemblies(bool p_soft_reload) {
#ifdef GD_MONO_HOT_RELOAD
CRASH_COND(CSharpLanguage::get_singleton() == nullptr);
// This method may be called more than once with `call_deferred`, so we need to check
@@ -579,11 +575,6 @@ void GodotSharp::_reload_assemblies(bool p_soft_reload) {
#endif
}
-void GodotSharp::_bind_methods() {
- ClassDB::bind_method(D_METHOD("is_runtime_initialized"), &GodotSharp::_is_runtime_initialized);
- ClassDB::bind_method(D_METHOD("_reload_assemblies"), &GodotSharp::_reload_assemblies);
-}
-
GodotSharp::GodotSharp() {
singleton = this;
}
diff --git a/modules/mono/mono_gd/gd_mono.h b/modules/mono/mono_gd/gd_mono.h
index 0cb087db57..614bfc63fb 100644
--- a/modules/mono/mono_gd/gd_mono.h
+++ b/modules/mono/mono_gd/gd_mono.h
@@ -167,18 +167,14 @@ namespace mono_bind {
class GodotSharp : public Object {
GDCLASS(GodotSharp, Object);
- friend class GDMono;
-
- void _reload_assemblies(bool p_soft_reload);
- bool _is_runtime_initialized();
-
protected:
static GodotSharp *singleton;
- static void _bind_methods();
public:
static GodotSharp *get_singleton() { return singleton; }
+ void reload_assemblies(bool p_soft_reload);
+
GodotSharp();
~GodotSharp();
};
diff --git a/modules/mono/register_types.cpp b/modules/mono/register_types.cpp
index beaa50ecb2..4d5426d96f 100644
--- a/modules/mono/register_types.cpp
+++ b/modules/mono/register_types.cpp
@@ -49,9 +49,6 @@ void initialize_mono_module(ModuleInitializationLevel p_level) {
_godotsharp = memnew(mono_bind::GodotSharp);
- GDREGISTER_CLASS(mono_bind::GodotSharp);
- Engine::get_singleton()->add_singleton(Engine::Singleton("GodotSharp", mono_bind::GodotSharp::get_singleton()));
-
script_language_cs = memnew(CSharpLanguage);
script_language_cs->set_language_index(ScriptServer::get_language_count());
ScriptServer::register_language(script_language_cs);
diff --git a/modules/navigation/3d/nav_mesh_generator_3d.cpp b/modules/navigation/3d/nav_mesh_generator_3d.cpp
index cc3bbdbf01..df0bdc9537 100644
--- a/modules/navigation/3d/nav_mesh_generator_3d.cpp
+++ b/modules/navigation/3d/nav_mesh_generator_3d.cpp
@@ -895,9 +895,22 @@ void NavMeshGenerator3D::generator_bake_from_source_geometry_data(Ref<Navigation
Vector<Vector3> nav_vertices;
+ HashMap<Vector3, int> recast_vertex_to_native_index;
+ LocalVector<int> recast_index_to_native_index;
+ recast_index_to_native_index.resize(detail_mesh->nverts);
+
for (int i = 0; i < detail_mesh->nverts; i++) {
const float *v = &detail_mesh->verts[i * 3];
- nav_vertices.push_back(Vector3(v[0], v[1], v[2]));
+ const Vector3 vertex = Vector3(v[0], v[1], v[2]);
+ int *existing_index_ptr = recast_vertex_to_native_index.getptr(vertex);
+ if (!existing_index_ptr) {
+ int new_index = recast_vertex_to_native_index.size();
+ recast_index_to_native_index[i] = new_index;
+ recast_vertex_to_native_index[vertex] = new_index;
+ nav_vertices.push_back(vertex);
+ } else {
+ recast_index_to_native_index[i] = *existing_index_ptr;
+ }
}
p_navigation_mesh->set_vertices(nav_vertices);
p_navigation_mesh->clear_polygons();
@@ -912,9 +925,14 @@ void NavMeshGenerator3D::generator_bake_from_source_geometry_data(Ref<Navigation
Vector<int> nav_indices;
nav_indices.resize(3);
// Polygon order in recast is opposite than godot's
- nav_indices.write[0] = ((int)(detail_mesh_bverts + detail_mesh_tris[j * 4 + 0]));
- nav_indices.write[1] = ((int)(detail_mesh_bverts + detail_mesh_tris[j * 4 + 2]));
- nav_indices.write[2] = ((int)(detail_mesh_bverts + detail_mesh_tris[j * 4 + 1]));
+ int index1 = ((int)(detail_mesh_bverts + detail_mesh_tris[j * 4 + 0]));
+ int index2 = ((int)(detail_mesh_bverts + detail_mesh_tris[j * 4 + 2]));
+ int index3 = ((int)(detail_mesh_bverts + detail_mesh_tris[j * 4 + 1]));
+
+ nav_indices.write[0] = recast_index_to_native_index[index1];
+ nav_indices.write[1] = recast_index_to_native_index[index2];
+ nav_indices.write[2] = recast_index_to_native_index[index3];
+
p_navigation_mesh->add_polygon(nav_indices);
}
}
diff --git a/modules/openxr/doc_classes/OpenXRExtensionWrapperExtension.xml b/modules/openxr/doc_classes/OpenXRExtensionWrapperExtension.xml
index 79aa547c52..338d632524 100644
--- a/modules/openxr/doc_classes/OpenXRExtensionWrapperExtension.xml
+++ b/modules/openxr/doc_classes/OpenXRExtensionWrapperExtension.xml
@@ -84,6 +84,12 @@
Called right before the OpenXR instance is destroyed.
</description>
</method>
+ <method name="_on_main_swapchains_created" qualifiers="virtual">
+ <return type="void" />
+ <description>
+ Called right after the main swapchains are (re)created.
+ </description>
+ </method>
<method name="_on_pre_render" qualifiers="virtual">
<return type="void" />
<description>
diff --git a/modules/openxr/extensions/openxr_extension_wrapper.h b/modules/openxr/extensions/openxr_extension_wrapper.h
index ce03df0b30..8d05657afc 100644
--- a/modules/openxr/extensions/openxr_extension_wrapper.h
+++ b/modules/openxr/extensions/openxr_extension_wrapper.h
@@ -84,6 +84,7 @@ public:
// This is when controller data is queried and made available to game logic.
virtual void on_process() {}
virtual void on_pre_render() {} // `on_pre_render` is called right before we start rendering our XR viewports.
+ virtual void on_main_swapchains_created() {} // `on_main_swapchains_created` is called right after our main swapchains are (re)created.
virtual void on_pre_draw_viewport(RID p_render_target) {} // `on_pre_draw_viewport` is called right before we start rendering this viewport
virtual void on_post_draw_viewport(RID p_render_target) {} // `on_port_draw_viewport` is called right after we start rendering this viewport (note that on Vulkan draw commands may only be queued)
diff --git a/modules/openxr/extensions/openxr_extension_wrapper_extension.cpp b/modules/openxr/extensions/openxr_extension_wrapper_extension.cpp
index 3b31e1b1f6..e09ca484d5 100644
--- a/modules/openxr/extensions/openxr_extension_wrapper_extension.cpp
+++ b/modules/openxr/extensions/openxr_extension_wrapper_extension.cpp
@@ -50,6 +50,7 @@ void OpenXRExtensionWrapperExtension::_bind_methods() {
GDVIRTUAL_BIND(_on_session_created, "session");
GDVIRTUAL_BIND(_on_process);
GDVIRTUAL_BIND(_on_pre_render);
+ GDVIRTUAL_BIND(_on_main_swapchains_created);
GDVIRTUAL_BIND(_on_session_destroyed);
GDVIRTUAL_BIND(_on_state_idle);
GDVIRTUAL_BIND(_on_state_ready);
@@ -198,6 +199,10 @@ void OpenXRExtensionWrapperExtension::on_pre_render() {
GDVIRTUAL_CALL(_on_pre_render);
}
+void OpenXRExtensionWrapperExtension::on_main_swapchains_created() {
+ GDVIRTUAL_CALL(_on_main_swapchains_created);
+}
+
void OpenXRExtensionWrapperExtension::on_session_destroyed() {
GDVIRTUAL_CALL(_on_session_destroyed);
}
diff --git a/modules/openxr/extensions/openxr_extension_wrapper_extension.h b/modules/openxr/extensions/openxr_extension_wrapper_extension.h
index 71d2a57ff8..e37853903b 100644
--- a/modules/openxr/extensions/openxr_extension_wrapper_extension.h
+++ b/modules/openxr/extensions/openxr_extension_wrapper_extension.h
@@ -86,6 +86,7 @@ public:
virtual void on_session_created(const XrSession p_session) override;
virtual void on_process() override;
virtual void on_pre_render() override;
+ virtual void on_main_swapchains_created() override;
virtual void on_session_destroyed() override;
GDVIRTUAL0(_on_register_metadata);
@@ -95,6 +96,7 @@ public:
GDVIRTUAL1(_on_session_created, uint64_t);
GDVIRTUAL0(_on_process);
GDVIRTUAL0(_on_pre_render);
+ GDVIRTUAL0(_on_main_swapchains_created);
GDVIRTUAL0(_on_session_destroyed);
virtual void on_state_idle() override;
diff --git a/modules/openxr/extensions/openxr_fb_foveation_extension.cpp b/modules/openxr/extensions/openxr_fb_foveation_extension.cpp
index bbdd2e3c8a..8ce808dd3c 100644
--- a/modules/openxr/extensions/openxr_fb_foveation_extension.cpp
+++ b/modules/openxr/extensions/openxr_fb_foveation_extension.cpp
@@ -101,7 +101,7 @@ void *OpenXRFBFoveationExtension::set_swapchain_create_info_and_get_next_pointer
}
}
-void OpenXRFBFoveationExtension::on_state_ready() {
+void OpenXRFBFoveationExtension::on_main_swapchains_created() {
update_profile();
}
@@ -127,26 +127,41 @@ void OpenXRFBFoveationExtension::set_foveation_dynamic(XrFoveationDynamicFB p_fo
update_profile();
}
-void OpenXRFBFoveationExtension::update_profile() {
- if (!is_enabled()) {
+void OpenXRFBFoveationExtension::_update_profile() {
+ // Must be called from rendering thread!
+ ERR_NOT_ON_RENDER_THREAD;
+
+ OpenXRFBFoveationExtension *fov_ext = OpenXRFBFoveationExtension::get_singleton();
+ ERR_FAIL_NULL(fov_ext);
+
+ if (!fov_ext->is_enabled()) {
+ return;
+ }
+
+ OpenXRAPI *openxr_api = OpenXRAPI::get_singleton();
+ ERR_FAIL_NULL(openxr_api);
+
+ XrSwapchain main_color_swapchain = openxr_api->get_color_swapchain();
+ if (main_color_swapchain == XR_NULL_HANDLE) {
+ // Our swapchain hasn't been created yet, we'll call this again once it has.
return;
}
XrFoveationLevelProfileCreateInfoFB level_profile_create_info;
level_profile_create_info.type = XR_TYPE_FOVEATION_LEVEL_PROFILE_CREATE_INFO_FB;
level_profile_create_info.next = nullptr;
- level_profile_create_info.level = foveation_level;
+ level_profile_create_info.level = fov_ext->foveation_level;
level_profile_create_info.verticalOffset = 0.0f;
- level_profile_create_info.dynamic = foveation_dynamic;
+ level_profile_create_info.dynamic = fov_ext->foveation_dynamic;
XrFoveationProfileCreateInfoFB profile_create_info;
profile_create_info.type = XR_TYPE_FOVEATION_PROFILE_CREATE_INFO_FB;
profile_create_info.next = &level_profile_create_info;
XrFoveationProfileFB foveation_profile;
- XrResult result = xrCreateFoveationProfileFB(OpenXRAPI::get_singleton()->get_session(), &profile_create_info, &foveation_profile);
+ XrResult result = fov_ext->xrCreateFoveationProfileFB(openxr_api->get_session(), &profile_create_info, &foveation_profile);
if (XR_FAILED(result)) {
- print_line("OpenXR: Unable to create the foveation profile [", OpenXRAPI::get_singleton()->get_error_string(result), "]");
+ print_line("OpenXR: Unable to create the foveation profile [", openxr_api->get_error_string(result), "]");
return;
}
@@ -154,15 +169,15 @@ void OpenXRFBFoveationExtension::update_profile() {
foveation_update_state.type = XR_TYPE_SWAPCHAIN_STATE_FOVEATION_FB;
foveation_update_state.profile = foveation_profile;
- result = swapchain_update_state_ext->xrUpdateSwapchainFB(OpenXRAPI::get_singleton()->get_color_swapchain(), (XrSwapchainStateBaseHeaderFB *)&foveation_update_state);
+ result = fov_ext->swapchain_update_state_ext->xrUpdateSwapchainFB(main_color_swapchain, (XrSwapchainStateBaseHeaderFB *)&foveation_update_state);
if (XR_FAILED(result)) {
- print_line("OpenXR: Unable to update the swapchain [", OpenXRAPI::get_singleton()->get_error_string(result), "]");
+ print_line("OpenXR: Unable to update the swapchain [", openxr_api->get_error_string(result), "]");
// We still want to destroy our profile so keep going...
}
- result = xrDestroyFoveationProfileFB(foveation_profile);
+ result = fov_ext->xrDestroyFoveationProfileFB(foveation_profile);
if (XR_FAILED(result)) {
- print_line("OpenXR: Unable to destroy the foveation profile [", OpenXRAPI::get_singleton()->get_error_string(result), "]");
+ print_line("OpenXR: Unable to destroy the foveation profile [", openxr_api->get_error_string(result), "]");
}
}
diff --git a/modules/openxr/extensions/openxr_fb_foveation_extension.h b/modules/openxr/extensions/openxr_fb_foveation_extension.h
index 1c5e722731..84bd7011b5 100644
--- a/modules/openxr/extensions/openxr_fb_foveation_extension.h
+++ b/modules/openxr/extensions/openxr_fb_foveation_extension.h
@@ -60,7 +60,7 @@ public:
virtual void *set_swapchain_create_info_and_get_next_pointer(void *p_next_pointer) override;
- virtual void on_state_ready() override;
+ virtual void on_main_swapchains_created() override;
bool is_enabled() const;
@@ -82,7 +82,15 @@ private:
XrFoveationLevelFB foveation_level = XR_FOVEATION_LEVEL_NONE_FB;
XrFoveationDynamicFB foveation_dynamic = XR_FOVEATION_DYNAMIC_DISABLED_FB;
- void update_profile();
+ static void _update_profile();
+
+ void update_profile() {
+ // If we're rendering on a separate thread, we may still be processing the last frame, don't communicate this till we're ready...
+ RenderingServer *rendering_server = RenderingServer::get_singleton();
+ ERR_FAIL_NULL(rendering_server);
+
+ rendering_server->call_on_render_thread(callable_mp_static(&OpenXRFBFoveationExtension::_update_profile));
+ }
// Enable foveation on this swapchain
XrSwapchainCreateInfoFoveationFB swapchain_create_info_foveation_fb;
diff --git a/modules/openxr/openxr_api.cpp b/modules/openxr/openxr_api.cpp
index 32512070d6..541e369925 100644
--- a/modules/openxr/openxr_api.cpp
+++ b/modules/openxr/openxr_api.cpp
@@ -1220,6 +1220,10 @@ bool OpenXRAPI::create_main_swapchains(Size2i p_size) {
}
};
+ for (OpenXRExtensionWrapper *wrapper : registered_extension_wrappers) {
+ wrapper->on_main_swapchains_created();
+ }
+
return true;
};
diff --git a/modules/openxr/scene/openxr_composition_layer.cpp b/modules/openxr/scene/openxr_composition_layer.cpp
index 50cc7b9e7b..b02f3082ab 100644
--- a/modules/openxr/scene/openxr_composition_layer.cpp
+++ b/modules/openxr/scene/openxr_composition_layer.cpp
@@ -165,7 +165,9 @@ void OpenXRCompositionLayer::set_layer_viewport(SubViewport *p_viewport) {
return;
}
- ERR_FAIL_COND_EDMSG(is_viewport_in_use(p_viewport), RTR("Cannot use the same SubViewport with multiple OpenXR composition layers. Clear it from its current layer first."));
+ if (p_viewport != nullptr) {
+ ERR_FAIL_COND_EDMSG(is_viewport_in_use(p_viewport), RTR("Cannot use the same SubViewport with multiple OpenXR composition layers. Clear it from its current layer first."));
+ }
layer_viewport = p_viewport;
diff --git a/modules/text_server_adv/gdextension_build/SConstruct b/modules/text_server_adv/gdextension_build/SConstruct
index 58e1868e31..2f7a175d91 100644
--- a/modules/text_server_adv/gdextension_build/SConstruct
+++ b/modules/text_server_adv/gdextension_build/SConstruct
@@ -1,14 +1,15 @@
#!/usr/bin/env python
import atexit
import sys
-import methods
import time
+import methods
+
# Enable ANSI escape code support on Windows 10 and later (for colored console output).
# <https://github.com/python/cpython/issues/73245>
if sys.stdout.isatty() and sys.platform == "win32":
try:
- from ctypes import windll, byref, WinError # type: ignore
+ from ctypes import WinError, byref, windll # type: ignore
from ctypes.wintypes import DWORD # type: ignore
stdout_handle = windll.kernel32.GetStdHandle(DWORD(-11))
@@ -720,7 +721,7 @@ if env["static_icu_data"]:
env.Append(CXXFLAGS=["-DICU_STATIC_DATA"])
env.Append(CPPPATH=["../../../thirdparty/icu4c/"])
else:
- thirdparty_sources += ["../icu_data/icudata_stub.cpp"]
+ thirdparty_icu_sources += ["../icu_data/icudata_stub.cpp"]
env_icu.Append(CPPPATH=["../../../thirdparty/icu4c/common/", "../../../thirdparty/icu4c/i18n/"])
env_icu.Append(
diff --git a/modules/text_server_adv/gdextension_build/methods.py b/modules/text_server_adv/gdextension_build/methods.py
index 3453c3e8f0..43bf56abfe 100644
--- a/modules/text_server_adv/gdextension_build/methods.py
+++ b/modules/text_server_adv/gdextension_build/methods.py
@@ -81,9 +81,9 @@ def disable_warnings(self):
self.Append(CCFLAGS=["/w"])
self.Append(CFLAGS=["/w"])
self.Append(CXXFLAGS=["/w"])
- self["CCFLAGS"] = [x for x in self["CCFLAGS"] if not x in warn_flags]
- self["CFLAGS"] = [x for x in self["CFLAGS"] if not x in warn_flags]
- self["CXXFLAGS"] = [x for x in self["CXXFLAGS"] if not x in warn_flags]
+ self["CCFLAGS"] = [x for x in self["CCFLAGS"] if x not in warn_flags]
+ self["CFLAGS"] = [x for x in self["CFLAGS"] if x not in warn_flags]
+ self["CXXFLAGS"] = [x for x in self["CXXFLAGS"] if x not in warn_flags]
else:
self.Append(CCFLAGS=["-w"])
self.Append(CFLAGS=["-w"])
@@ -117,31 +117,31 @@ def make_icu_data(target, source, env):
def write_macos_plist(target, binary_name, identifier, name):
os.makedirs(f"{target}/Resource/", exist_ok=True)
with open(f"{target}/Resource/Info.plist", "w", encoding="utf-8", newline="\n") as f:
- f.write(f'<?xml version="1.0" encoding="UTF-8"?>\n')
- f.write(
- f'<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">\n'
- )
- f.write(f'<plist version="1.0">\n')
- f.write(f"<dict>\n")
- f.write(f"\t<key>CFBundleExecutable</key>\n")
- f.write(f"\t<string>{binary_name}</string>\n")
- f.write(f"\t<key>CFBundleIdentifier</key>\n")
- f.write(f"\t<string>{identifier}</string>\n")
- f.write(f"\t<key>CFBundleInfoDictionaryVersion</key>\n")
- f.write(f"\t<string>6.0</string>\n")
- f.write(f"\t<key>CFBundleName</key>\n")
- f.write(f"\t<string>{name}</string>\n")
- f.write(f"\t<key>CFBundlePackageType</key>\n")
- f.write(f"\t<string>FMWK</string>\n")
- f.write(f"\t<key>CFBundleShortVersionString</key>\n")
- f.write(f"\t<string>1.0.0</string>\n")
- f.write(f"\t<key>CFBundleSupportedPlatforms</key>\n")
- f.write(f"\t<array>\n")
- f.write(f"\t\t<string>MacOSX</string>\n")
- f.write(f"\t</array>\n")
- f.write(f"\t<key>CFBundleVersion</key>\n")
- f.write(f"\t<string>1.0.0</string>\n")
- f.write(f"\t<key>LSMinimumSystemVersion</key>\n")
- f.write(f"\t<string>10.14</string>\n")
- f.write(f"</dict>\n")
- f.write(f"</plist>\n")
+ f.write(f"""\
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>CFBundleExecutable</key>
+ <string>{binary_name}</string>
+ <key>CFBundleIdentifier</key>
+ <string>{identifier}</string>
+ <key>CFBundleInfoDictionaryVersion</key>
+ <string>6.0</string>
+ <key>CFBundleName</key>
+ <string>{name}</string>
+ <key>CFBundlePackageType</key>
+ <string>FMWK</string>
+ <key>CFBundleShortVersionString</key>
+ <string>1.0.0</string>
+ <key>CFBundleSupportedPlatforms</key>
+ <array>
+ <string>MacOSX</string>
+ </array>
+ <key>CFBundleVersion</key>
+ <string>1.0.0</string>
+ <key>LSMinimumSystemVersion</key>
+ <string>10.14</string>
+</dict>
+</plist>
+""")
diff --git a/modules/text_server_fb/gdextension_build/SConstruct b/modules/text_server_fb/gdextension_build/SConstruct
index 9326a53026..f6ae7149be 100644
--- a/modules/text_server_fb/gdextension_build/SConstruct
+++ b/modules/text_server_fb/gdextension_build/SConstruct
@@ -1,14 +1,15 @@
#!/usr/bin/env python
import atexit
import sys
-import methods
import time
+import methods
+
# Enable ANSI escape code support on Windows 10 and later (for colored console output).
# <https://github.com/python/cpython/issues/73245>
if sys.stdout.isatty() and sys.platform == "win32":
try:
- from ctypes import windll, byref, WinError # type: ignore
+ from ctypes import WinError, byref, windll # type: ignore
from ctypes.wintypes import DWORD # type: ignore
stdout_handle = windll.kernel32.GetStdHandle(DWORD(-11))
diff --git a/modules/text_server_fb/gdextension_build/methods.py b/modules/text_server_fb/gdextension_build/methods.py
index 3453c3e8f0..43bf56abfe 100644
--- a/modules/text_server_fb/gdextension_build/methods.py
+++ b/modules/text_server_fb/gdextension_build/methods.py
@@ -81,9 +81,9 @@ def disable_warnings(self):
self.Append(CCFLAGS=["/w"])
self.Append(CFLAGS=["/w"])
self.Append(CXXFLAGS=["/w"])
- self["CCFLAGS"] = [x for x in self["CCFLAGS"] if not x in warn_flags]
- self["CFLAGS"] = [x for x in self["CFLAGS"] if not x in warn_flags]
- self["CXXFLAGS"] = [x for x in self["CXXFLAGS"] if not x in warn_flags]
+ self["CCFLAGS"] = [x for x in self["CCFLAGS"] if x not in warn_flags]
+ self["CFLAGS"] = [x for x in self["CFLAGS"] if x not in warn_flags]
+ self["CXXFLAGS"] = [x for x in self["CXXFLAGS"] if x not in warn_flags]
else:
self.Append(CCFLAGS=["-w"])
self.Append(CFLAGS=["-w"])
@@ -117,31 +117,31 @@ def make_icu_data(target, source, env):
def write_macos_plist(target, binary_name, identifier, name):
os.makedirs(f"{target}/Resource/", exist_ok=True)
with open(f"{target}/Resource/Info.plist", "w", encoding="utf-8", newline="\n") as f:
- f.write(f'<?xml version="1.0" encoding="UTF-8"?>\n')
- f.write(
- f'<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">\n'
- )
- f.write(f'<plist version="1.0">\n')
- f.write(f"<dict>\n")
- f.write(f"\t<key>CFBundleExecutable</key>\n")
- f.write(f"\t<string>{binary_name}</string>\n")
- f.write(f"\t<key>CFBundleIdentifier</key>\n")
- f.write(f"\t<string>{identifier}</string>\n")
- f.write(f"\t<key>CFBundleInfoDictionaryVersion</key>\n")
- f.write(f"\t<string>6.0</string>\n")
- f.write(f"\t<key>CFBundleName</key>\n")
- f.write(f"\t<string>{name}</string>\n")
- f.write(f"\t<key>CFBundlePackageType</key>\n")
- f.write(f"\t<string>FMWK</string>\n")
- f.write(f"\t<key>CFBundleShortVersionString</key>\n")
- f.write(f"\t<string>1.0.0</string>\n")
- f.write(f"\t<key>CFBundleSupportedPlatforms</key>\n")
- f.write(f"\t<array>\n")
- f.write(f"\t\t<string>MacOSX</string>\n")
- f.write(f"\t</array>\n")
- f.write(f"\t<key>CFBundleVersion</key>\n")
- f.write(f"\t<string>1.0.0</string>\n")
- f.write(f"\t<key>LSMinimumSystemVersion</key>\n")
- f.write(f"\t<string>10.14</string>\n")
- f.write(f"</dict>\n")
- f.write(f"</plist>\n")
+ f.write(f"""\
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>CFBundleExecutable</key>
+ <string>{binary_name}</string>
+ <key>CFBundleIdentifier</key>
+ <string>{identifier}</string>
+ <key>CFBundleInfoDictionaryVersion</key>
+ <string>6.0</string>
+ <key>CFBundleName</key>
+ <string>{name}</string>
+ <key>CFBundlePackageType</key>
+ <string>FMWK</string>
+ <key>CFBundleShortVersionString</key>
+ <string>1.0.0</string>
+ <key>CFBundleSupportedPlatforms</key>
+ <array>
+ <string>MacOSX</string>
+ </array>
+ <key>CFBundleVersion</key>
+ <string>1.0.0</string>
+ <key>LSMinimumSystemVersion</key>
+ <string>10.14</string>
+</dict>
+</plist>
+""")