summaryrefslogtreecommitdiffstats
path: root/modules
diff options
context:
space:
mode:
Diffstat (limited to 'modules')
-rw-r--r--modules/gltf/editor/editor_scene_exporter_gltf_plugin.cpp2
-rw-r--r--modules/gltf/editor/editor_scene_importer_blend.cpp2
-rw-r--r--modules/gridmap/editor/grid_map_editor_plugin.cpp2
-rw-r--r--modules/multiplayer/editor/replication_editor.cpp2
-rw-r--r--modules/navigation/editor/navigation_mesh_editor_plugin.cpp3
-rw-r--r--modules/navigation/editor/navigation_mesh_editor_plugin.h2
-rw-r--r--modules/openxr/doc_classes/OpenXRInterface.xml3
-rw-r--r--modules/openxr/editor/openxr_action_map_editor.cpp2
-rw-r--r--modules/openxr/openxr_api.cpp12
-rw-r--r--modules/openxr/openxr_api.h5
-rw-r--r--modules/openxr/openxr_interface.cpp21
-rw-r--r--modules/openxr/openxr_interface.h3
-rw-r--r--modules/text_server_adv/text_server_adv.cpp98
-rw-r--r--modules/text_server_adv/text_server_adv.h4
14 files changed, 120 insertions, 41 deletions
diff --git a/modules/gltf/editor/editor_scene_exporter_gltf_plugin.cpp b/modules/gltf/editor/editor_scene_exporter_gltf_plugin.cpp
index 3b8d2cc701..5f6ec5904c 100644
--- a/modules/gltf/editor/editor_scene_exporter_gltf_plugin.cpp
+++ b/modules/gltf/editor/editor_scene_exporter_gltf_plugin.cpp
@@ -34,9 +34,9 @@
#include "../gltf_document.h"
-#include "editor/editor_file_dialog.h"
#include "editor/editor_file_system.h"
#include "editor/editor_node.h"
+#include "editor/gui/editor_file_dialog.h"
String SceneExporterGLTFPlugin::get_name() const {
return "ConvertGLTF2";
diff --git a/modules/gltf/editor/editor_scene_importer_blend.cpp b/modules/gltf/editor/editor_scene_importer_blend.cpp
index a736e36c6a..2efaaa7d4d 100644
--- a/modules/gltf/editor/editor_scene_importer_blend.cpp
+++ b/modules/gltf/editor/editor_scene_importer_blend.cpp
@@ -37,10 +37,10 @@
#include "editor_import_blend_runner.h"
#include "core/config/project_settings.h"
-#include "editor/editor_file_dialog.h"
#include "editor/editor_node.h"
#include "editor/editor_scale.h"
#include "editor/editor_settings.h"
+#include "editor/gui/editor_file_dialog.h"
#include "main/main.h"
#include "scene/gui/line_edit.h"
diff --git a/modules/gridmap/editor/grid_map_editor_plugin.cpp b/modules/gridmap/editor/grid_map_editor_plugin.cpp
index bb5eb8e643..20f1aa357b 100644
--- a/modules/gridmap/editor/grid_map_editor_plugin.cpp
+++ b/modules/gridmap/editor/grid_map_editor_plugin.cpp
@@ -40,6 +40,8 @@
#include "editor/editor_undo_redo_manager.h"
#include "editor/plugins/node_3d_editor_plugin.h"
#include "scene/3d/camera_3d.h"
+#include "scene/gui/dialogs.h"
+#include "scene/gui/label.h"
#include "scene/gui/menu_button.h"
#include "scene/gui/separator.h"
#include "scene/main/window.h"
diff --git a/modules/multiplayer/editor/replication_editor.cpp b/modules/multiplayer/editor/replication_editor.cpp
index 9e542828ee..1f707f1192 100644
--- a/modules/multiplayer/editor/replication_editor.cpp
+++ b/modules/multiplayer/editor/replication_editor.cpp
@@ -36,9 +36,9 @@
#include "editor/editor_scale.h"
#include "editor/editor_settings.h"
#include "editor/editor_undo_redo_manager.h"
+#include "editor/gui/scene_tree_editor.h"
#include "editor/inspector_dock.h"
#include "editor/property_selector.h"
-#include "editor/scene_tree_editor.h"
#include "scene/gui/dialogs.h"
#include "scene/gui/separator.h"
#include "scene/gui/tree.h"
diff --git a/modules/navigation/editor/navigation_mesh_editor_plugin.cpp b/modules/navigation/editor/navigation_mesh_editor_plugin.cpp
index 557d45b386..dd2c539c95 100644
--- a/modules/navigation/editor/navigation_mesh_editor_plugin.cpp
+++ b/modules/navigation/editor/navigation_mesh_editor_plugin.cpp
@@ -38,6 +38,9 @@
#include "editor/editor_node.h"
#include "scene/3d/mesh_instance_3d.h"
#include "scene/gui/box_container.h"
+#include "scene/gui/button.h"
+#include "scene/gui/dialogs.h"
+#include "scene/gui/label.h"
void NavigationMeshEditor::_node_removed(Node *p_node) {
if (p_node == node) {
diff --git a/modules/navigation/editor/navigation_mesh_editor_plugin.h b/modules/navigation/editor/navigation_mesh_editor_plugin.h
index 010be411d6..b73d8d2e69 100644
--- a/modules/navigation/editor/navigation_mesh_editor_plugin.h
+++ b/modules/navigation/editor/navigation_mesh_editor_plugin.h
@@ -36,7 +36,9 @@
#include "editor/editor_plugin.h"
class AcceptDialog;
+class Button;
class HBoxContainer;
+class Label;
class NavigationRegion3D;
class NavigationMeshEditor : public Control {
diff --git a/modules/openxr/doc_classes/OpenXRInterface.xml b/modules/openxr/doc_classes/OpenXRInterface.xml
index 16a16a7f24..b6d52464c0 100644
--- a/modules/openxr/doc_classes/OpenXRInterface.xml
+++ b/modules/openxr/doc_classes/OpenXRInterface.xml
@@ -43,6 +43,9 @@
<member name="display_refresh_rate" type="float" setter="set_display_refresh_rate" getter="get_display_refresh_rate" default="0.0">
The display refresh rate for the current HMD. Only functional if this feature is supported by the OpenXR runtime and after the interface has been initialized.
</member>
+ <member name="render_target_size_multiplier" type="float" setter="set_render_target_size_multiplier" getter="get_render_target_size_multiplier" default="1.0">
+ The render size multiplier for the current HMD. Must be set before the interface has been initialized.
+ </member>
</members>
<signals>
<signal name="pose_recentered">
diff --git a/modules/openxr/editor/openxr_action_map_editor.cpp b/modules/openxr/editor/openxr_action_map_editor.cpp
index ad5a515a01..64e07eff21 100644
--- a/modules/openxr/editor/openxr_action_map_editor.cpp
+++ b/modules/openxr/editor/openxr_action_map_editor.cpp
@@ -31,10 +31,10 @@
#include "openxr_action_map_editor.h"
#include "core/config/project_settings.h"
-#include "editor/editor_file_dialog.h"
#include "editor/editor_node.h"
#include "editor/editor_scale.h"
#include "editor/editor_settings.h"
+#include "editor/gui/editor_file_dialog.h"
// TODO implement redo/undo system
diff --git a/modules/openxr/openxr_api.cpp b/modules/openxr/openxr_api.cpp
index 4b39a6295c..d1680612d9 100644
--- a/modules/openxr/openxr_api.cpp
+++ b/modules/openxr/openxr_api.cpp
@@ -1423,8 +1423,8 @@ Size2 OpenXRAPI::get_recommended_target_size() {
Size2 target_size;
- target_size.width = view_configuration_views[0].recommendedImageRectWidth;
- target_size.height = view_configuration_views[0].recommendedImageRectHeight;
+ target_size.width = view_configuration_views[0].recommendedImageRectWidth * render_target_size_multiplier;
+ target_size.height = view_configuration_views[0].recommendedImageRectHeight * render_target_size_multiplier;
return target_size;
}
@@ -1964,6 +1964,14 @@ Array OpenXRAPI::get_available_display_refresh_rates() const {
return Array();
}
+double OpenXRAPI::get_render_target_size_multiplier() const {
+ return render_target_size_multiplier;
+}
+
+void OpenXRAPI::set_render_target_size_multiplier(double multiplier) {
+ render_target_size_multiplier = multiplier;
+}
+
OpenXRAPI::OpenXRAPI() {
// OpenXRAPI is only constructed if OpenXR is enabled.
singleton = this;
diff --git a/modules/openxr/openxr_api.h b/modules/openxr/openxr_api.h
index c8bef5d420..292e54228d 100644
--- a/modules/openxr/openxr_api.h
+++ b/modules/openxr/openxr_api.h
@@ -120,6 +120,7 @@ private:
XrSessionState session_state = XR_SESSION_STATE_UNKNOWN;
bool running = false;
XrFrameState frame_state = { XR_TYPE_FRAME_STATE, NULL, 0, 0, false };
+ double render_target_size_multiplier = 1.0;
OpenXRGraphicsExtensionWrapper *graphics_extension = nullptr;
XrSystemGraphicsProperties graphics_properties;
@@ -368,6 +369,10 @@ public:
void set_display_refresh_rate(float p_refresh_rate);
Array get_available_display_refresh_rates() const;
+ // Render Target size multiplier
+ double get_render_target_size_multiplier() const;
+ void set_render_target_size_multiplier(double multiplier);
+
// action map
String get_default_action_map_resource_name();
diff --git a/modules/openxr/openxr_interface.cpp b/modules/openxr/openxr_interface.cpp
index 27344c9da7..933148da87 100644
--- a/modules/openxr/openxr_interface.cpp
+++ b/modules/openxr/openxr_interface.cpp
@@ -47,6 +47,11 @@ void OpenXRInterface::_bind_methods() {
ClassDB::bind_method(D_METHOD("set_display_refresh_rate", "refresh_rate"), &OpenXRInterface::set_display_refresh_rate);
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "display_refresh_rate"), "set_display_refresh_rate", "get_display_refresh_rate");
+ // Render Target size multiplier
+ ClassDB::bind_method(D_METHOD("get_render_target_size_multiplier"), &OpenXRInterface::get_render_target_size_multiplier);
+ ClassDB::bind_method(D_METHOD("set_render_target_size_multiplier", "multiplier"), &OpenXRInterface::set_render_target_size_multiplier);
+ ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "render_target_size_multiplier"), "set_render_target_size_multiplier", "get_render_target_size_multiplier");
+
ClassDB::bind_method(D_METHOD("is_action_set_active", "name"), &OpenXRInterface::is_action_set_active);
ClassDB::bind_method(D_METHOD("set_action_set_active", "name", "active"), &OpenXRInterface::set_action_set_active);
ClassDB::bind_method(D_METHOD("get_action_sets"), &OpenXRInterface::get_action_sets);
@@ -668,6 +673,22 @@ Array OpenXRInterface::get_action_sets() const {
return arr;
}
+double OpenXRInterface::get_render_target_size_multiplier() const {
+ if (openxr_api == nullptr) {
+ return 1.0;
+ } else {
+ return openxr_api->get_render_target_size_multiplier();
+ }
+}
+
+void OpenXRInterface::set_render_target_size_multiplier(double multiplier) {
+ if (openxr_api == nullptr) {
+ return;
+ } else {
+ openxr_api->set_render_target_size_multiplier(multiplier);
+ }
+}
+
Size2 OpenXRInterface::get_render_target_size() {
if (openxr_api == nullptr) {
return Size2();
diff --git a/modules/openxr/openxr_interface.h b/modules/openxr/openxr_interface.h
index de758a8c2d..f36318530c 100644
--- a/modules/openxr/openxr_interface.h
+++ b/modules/openxr/openxr_interface.h
@@ -128,6 +128,9 @@ public:
void set_action_set_active(const String &p_action_set, bool p_active);
Array get_action_sets() const;
+ double get_render_target_size_multiplier() const;
+ void set_render_target_size_multiplier(double multiplier);
+
virtual Size2 get_render_target_size() override;
virtual uint32_t get_view_count() override;
virtual Transform3D get_camera_transform() override;
diff --git a/modules/text_server_adv/text_server_adv.cpp b/modules/text_server_adv/text_server_adv.cpp
index c6a21aeefe..43c7f49395 100644
--- a/modules/text_server_adv/text_server_adv.cpp
+++ b/modules/text_server_adv/text_server_adv.cpp
@@ -4182,22 +4182,37 @@ bool TextServerAdvanced::_shape_substr(ShapedTextDataAdvanced *p_new_sd, const S
ERR_FAIL_COND_V_MSG((start < 0 || end - start > p_new_sd->utf16.length()), false, "Invalid BiDi override range.");
// Create temporary line bidi & shape.
- UBiDi *bidi_iter = ubidi_openSized(end - start, 0, &err);
- ERR_FAIL_COND_V_MSG(U_FAILURE(err), false, u_errorName(err));
- ubidi_setLine(p_sd->bidi_iter[ov], start, end, bidi_iter, &err);
- if (U_FAILURE(err)) {
- ubidi_close(bidi_iter);
- ERR_FAIL_V_MSG(false, u_errorName(err));
+ UBiDi *bidi_iter = nullptr;
+ if (p_sd->bidi_iter[ov]) {
+ bidi_iter = ubidi_openSized(end - start, 0, &err);
+ if (U_SUCCESS(err)) {
+ ubidi_setLine(p_sd->bidi_iter[ov], start, end, bidi_iter, &err);
+ if (U_FAILURE(err)) {
+ ubidi_close(bidi_iter);
+ bidi_iter = nullptr;
+ ERR_PRINT(vformat("BiDi reordering for the line failed: %s", u_errorName(err)));
+ }
+ } else {
+ bidi_iter = nullptr;
+ ERR_PRINT(vformat("BiDi iterator allocation for the line failed: %s", u_errorName(err)));
+ }
}
p_new_sd->bidi_iter.push_back(bidi_iter);
err = U_ZERO_ERROR;
- int bidi_run_count = ubidi_countRuns(bidi_iter, &err);
- ERR_FAIL_COND_V_MSG(U_FAILURE(err), false, u_errorName(err));
+ int bidi_run_count = 1;
+ if (bidi_iter) {
+ bidi_run_count = ubidi_countRuns(bidi_iter, &err);
+ if (U_FAILURE(err)) {
+ ERR_PRINT(u_errorName(err));
+ }
+ }
for (int i = 0; i < bidi_run_count; i++) {
int32_t _bidi_run_start = 0;
- int32_t _bidi_run_length = 0;
- ubidi_getVisualRun(bidi_iter, i, &_bidi_run_start, &_bidi_run_length);
+ int32_t _bidi_run_length = end - start;
+ if (bidi_iter) {
+ ubidi_getVisualRun(bidi_iter, i, &_bidi_run_start, &_bidi_run_length);
+ }
int32_t bidi_run_start = _convert_pos(p_sd, ov_start + start + _bidi_run_start);
int32_t bidi_run_end = _convert_pos(p_sd, ov_start + start + _bidi_run_start + _bidi_run_length);
@@ -5642,38 +5657,53 @@ bool TextServerAdvanced::_shaped_text_shape(const RID &p_shaped) {
UErrorCode err = U_ZERO_ERROR;
UBiDi *bidi_iter = ubidi_openSized(end - start, 0, &err);
- ERR_FAIL_COND_V_MSG(U_FAILURE(err), false, u_errorName(err));
-
- switch (static_cast<TextServer::Direction>(sd->bidi_override[ov].z)) {
- case DIRECTION_LTR: {
- ubidi_setPara(bidi_iter, data + start, end - start, UBIDI_LTR, nullptr, &err);
- } break;
- case DIRECTION_RTL: {
- ubidi_setPara(bidi_iter, data + start, end - start, UBIDI_RTL, nullptr, &err);
- } break;
- case DIRECTION_INHERITED: {
- ubidi_setPara(bidi_iter, data + start, end - start, base_para_direction, nullptr, &err);
- } break;
- case DIRECTION_AUTO: {
- UBiDiDirection direction = ubidi_getBaseDirection(data + start, end - start);
- if (direction != UBIDI_NEUTRAL) {
- ubidi_setPara(bidi_iter, data + start, end - start, direction, nullptr, &err);
- } else {
+ if (U_SUCCESS(err)) {
+ switch (static_cast<TextServer::Direction>(sd->bidi_override[ov].z)) {
+ case DIRECTION_LTR: {
+ ubidi_setPara(bidi_iter, data + start, end - start, UBIDI_LTR, nullptr, &err);
+ } break;
+ case DIRECTION_RTL: {
+ ubidi_setPara(bidi_iter, data + start, end - start, UBIDI_RTL, nullptr, &err);
+ } break;
+ case DIRECTION_INHERITED: {
ubidi_setPara(bidi_iter, data + start, end - start, base_para_direction, nullptr, &err);
- }
- } break;
+ } break;
+ case DIRECTION_AUTO: {
+ UBiDiDirection direction = ubidi_getBaseDirection(data + start, end - start);
+ if (direction != UBIDI_NEUTRAL) {
+ ubidi_setPara(bidi_iter, data + start, end - start, direction, nullptr, &err);
+ } else {
+ ubidi_setPara(bidi_iter, data + start, end - start, base_para_direction, nullptr, &err);
+ }
+ } break;
+ }
+ if (U_FAILURE(err)) {
+ ubidi_close(bidi_iter);
+ bidi_iter = nullptr;
+ ERR_PRINT(vformat("BiDi reordering for the paragraph failed: %s", u_errorName(err)));
+ }
+ } else {
+ bidi_iter = nullptr;
+ ERR_PRINT(vformat("BiDi iterator allocation for the paragraph failed: %s", u_errorName(err)));
}
- ERR_FAIL_COND_V_MSG(U_FAILURE(err), false, u_errorName(err));
sd->bidi_iter.push_back(bidi_iter);
err = U_ZERO_ERROR;
- int bidi_run_count = ubidi_countRuns(bidi_iter, &err);
- ERR_FAIL_COND_V_MSG(U_FAILURE(err), false, u_errorName(err));
+ int bidi_run_count = 1;
+ if (bidi_iter) {
+ bidi_run_count = ubidi_countRuns(bidi_iter, &err);
+ if (U_FAILURE(err)) {
+ ERR_PRINT(u_errorName(err));
+ }
+ }
for (int i = 0; i < bidi_run_count; i++) {
int32_t _bidi_run_start = 0;
- int32_t _bidi_run_length = 0;
+ int32_t _bidi_run_length = end - start;
+ bool is_rtl = false;
hb_direction_t bidi_run_direction = HB_DIRECTION_INVALID;
- bool is_rtl = (ubidi_getVisualRun(bidi_iter, i, &_bidi_run_start, &_bidi_run_length) == UBIDI_LTR);
+ if (bidi_iter) {
+ is_rtl = (ubidi_getVisualRun(bidi_iter, i, &_bidi_run_start, &_bidi_run_length) == UBIDI_LTR);
+ }
switch (sd->orientation) {
case ORIENTATION_HORIZONTAL: {
if (is_rtl) {
diff --git a/modules/text_server_adv/text_server_adv.h b/modules/text_server_adv/text_server_adv.h
index b959dd8544..af3a0c7876 100644
--- a/modules/text_server_adv/text_server_adv.h
+++ b/modules/text_server_adv/text_server_adv.h
@@ -515,7 +515,9 @@ class TextServerAdvanced : public TextServerExtension {
~ShapedTextDataAdvanced() {
for (int i = 0; i < bidi_iter.size(); i++) {
- ubidi_close(bidi_iter[i]);
+ if (bidi_iter[i]) {
+ ubidi_close(bidi_iter[i]);
+ }
}
if (script_iter) {
memdelete(script_iter);