summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--doc/classes/Crypto.xml1
-rw-r--r--doc/classes/CryptoKey.xml1
-rw-r--r--doc/classes/HMACContext.xml1
-rw-r--r--doc/classes/HashingContext.xml1
-rw-r--r--doc/classes/X509Certificate.xml1
-rw-r--r--editor/editor_node.cpp4
-rw-r--r--editor/plugins/gdextension_export_plugin.h22
-rw-r--r--editor/project_manager.cpp46
-rw-r--r--platform/javascript/detect.py5
-rw-r--r--platform/linuxbsd/export/export.cpp2
-rw-r--r--scene/resources/primitive_meshes.cpp17
-rw-r--r--servers/rendering/renderer_rd/storage_rd/particles_storage.cpp7
12 files changed, 60 insertions, 48 deletions
diff --git a/doc/classes/Crypto.xml b/doc/classes/Crypto.xml
index c0a76dc80e..4936fc1d85 100644
--- a/doc/classes/Crypto.xml
+++ b/doc/classes/Crypto.xml
@@ -68,7 +68,6 @@
}
[/csharp]
[/codeblocks]
- [b]Note:[/b] Not available in HTML5 exports.
</description>
<tutorials>
</tutorials>
diff --git a/doc/classes/CryptoKey.xml b/doc/classes/CryptoKey.xml
index b0abdf60c8..8496c6dec1 100644
--- a/doc/classes/CryptoKey.xml
+++ b/doc/classes/CryptoKey.xml
@@ -6,7 +6,6 @@
<description>
The CryptoKey class represents a cryptographic key. Keys can be loaded and saved like any other [Resource].
They can be used to generate a self-signed [X509Certificate] via [method Crypto.generate_self_signed_certificate] and as private key in [method StreamPeerSSL.accept_stream] along with the appropriate certificate.
- [b]Note:[/b] Not available in HTML5 exports.
</description>
<tutorials>
</tutorials>
diff --git a/doc/classes/HMACContext.xml b/doc/classes/HMACContext.xml
index fa60a7eb58..f2b946cab7 100644
--- a/doc/classes/HMACContext.xml
+++ b/doc/classes/HMACContext.xml
@@ -50,7 +50,6 @@
[/csharp]
[/codeblocks]
- [b]Note:[/b] Not available in HTML5 exports.
</description>
<tutorials>
</tutorials>
diff --git a/doc/classes/HashingContext.xml b/doc/classes/HashingContext.xml
index 9ecf2872f3..c126efcfbb 100644
--- a/doc/classes/HashingContext.xml
+++ b/doc/classes/HashingContext.xml
@@ -57,7 +57,6 @@
}
[/csharp]
[/codeblocks]
- [b]Note:[/b] Not available in HTML5 exports.
</description>
<tutorials>
</tutorials>
diff --git a/doc/classes/X509Certificate.xml b/doc/classes/X509Certificate.xml
index e5d8b45db6..581aba05e4 100644
--- a/doc/classes/X509Certificate.xml
+++ b/doc/classes/X509Certificate.xml
@@ -6,7 +6,6 @@
<description>
The X509Certificate class represents an X509 certificate. Certificates can be loaded and saved like any other [Resource].
They can be used as the server certificate in [method StreamPeerSSL.accept_stream] (along with the proper [CryptoKey]), and to specify the only certificate that should be accepted when connecting to an SSL server via [method StreamPeerSSL.connect_to_stream].
- [b]Note:[/b] Not available in HTML5 exports.
</description>
<tutorials>
</tutorials>
diff --git a/editor/editor_node.cpp b/editor/editor_node.cpp
index 4998cc82e8..c59c7de603 100644
--- a/editor/editor_node.cpp
+++ b/editor/editor_node.cpp
@@ -7025,11 +7025,15 @@ EditorNode::EditorNode() {
ScriptTextEditor::register_editor(); // Register one for text scripts.
TextEditor::register_editor();
+ // Asset Library can't work on Web editor for now as most assets are sourced
+ // directly from GitHub which does not set CORS.
+#ifndef JAVASCRIPT_ENABLED
if (StreamPeerSSL::is_available()) {
add_editor_plugin(memnew(AssetLibraryEditorPlugin));
} else {
WARN_PRINT("Asset Library not available, as it requires SSL to work.");
}
+#endif
// Add interface before adding plugins.
diff --git a/editor/plugins/gdextension_export_plugin.h b/editor/plugins/gdextension_export_plugin.h
index c17e02e1fd..b91a17d9e5 100644
--- a/editor/plugins/gdextension_export_plugin.h
+++ b/editor/plugins/gdextension_export_plugin.h
@@ -47,14 +47,9 @@ void GDExtensionExportPlugin::_export_file(const String &p_path, const String &p
config.instantiate();
Error err = config->load(p_path);
+ ERR_FAIL_COND_MSG(err, "Failed to load GDExtension file: " + p_path);
- if (err != OK) {
- return;
- }
-
- if (!config->has_section_key("configuration", "entry_symbol")) {
- return;
- }
+ ERR_FAIL_COND_MSG(!config->has_section_key("configuration", "entry_symbol"), "Failed to export GDExtension file, missing entry symbol: " + p_path);
String entry_symbol = config->get_value("configuration", "entry_symbol");
@@ -62,6 +57,7 @@ void GDExtensionExportPlugin::_export_file(const String &p_path, const String &p
config->get_section_keys("libraries", &libraries);
+ bool could_export = false;
for (const String &E : libraries) {
Vector<String> tags = E.split(".");
bool all_tags_met = true;
@@ -101,13 +97,23 @@ void GDExtensionExportPlugin::_export_file(const String &p_path, const String &p
String linker_flags = "-Wl,-U,_" + entry_symbol;
add_ios_linker_flags(linker_flags);
}
+ could_export = true;
break;
}
}
+ if (!could_export) {
+ Vector<String> tags;
+ for (const String &E : p_features) {
+ tags.append(E);
+ }
+ ERR_FAIL_MSG(vformat("Couldn't export extension: %s. No suitable library found for export flags: %s", p_path, String(", ").join(tags)));
+ }
List<String> dependencies;
+ if (config->has_section("dependencies")) {
+ config->get_section_keys("dependencies", &dependencies);
+ }
- config->get_section_keys("dependencies", &dependencies);
for (const String &E : libraries) {
Vector<String> tags = E.split(".");
bool all_tags_met = true;
diff --git a/editor/project_manager.cpp b/editor/project_manager.cpp
index 379c3bbb01..a56b6ec9d4 100644
--- a/editor/project_manager.cpp
+++ b/editor/project_manager.cpp
@@ -1881,18 +1881,20 @@ void ProjectManager::_notification(int p_what) {
} break;
case NOTIFICATION_RESIZED: {
- if (open_templates->is_visible()) {
+ if (open_templates && open_templates->is_visible()) {
open_templates->popup_centered();
}
- real_t size = get_size().x / EDSCALE;
- asset_library->set_columns(size < 1000 ? 1 : 2);
- // Adjust names of tabs to fit the new size.
- if (size < 650) {
- local_projects_hb->set_name(TTR("Local"));
- asset_library->set_name(TTR("Asset Library"));
- } else {
- local_projects_hb->set_name(TTR("Local Projects"));
- asset_library->set_name(TTR("Asset Library Projects"));
+ if (asset_library) {
+ real_t size = get_size().x / EDSCALE;
+ asset_library->set_columns(size < 1000 ? 1 : 2);
+ // Adjust names of tabs to fit the new size.
+ if (size < 650) {
+ local_projects_hb->set_name(TTR("Local"));
+ asset_library->set_name(TTR("Asset Library"));
+ } else {
+ local_projects_hb->set_name(TTR("Local Projects"));
+ asset_library->set_name(TTR("Asset Library Projects"));
+ }
}
} break;
@@ -1901,10 +1903,6 @@ void ProjectManager::_notification(int p_what) {
filter_option->select(default_sorting);
_project_list->set_order_option(default_sorting);
- if (_project_list->get_project_count() == 0 && StreamPeerSSL::is_available()) {
- open_templates->popup_centered();
- }
-
if (_project_list->get_project_count() >= 1) {
// Focus on the search box immediately to allow the user
// to search without having to reach for their mouse
@@ -1914,6 +1912,10 @@ void ProjectManager::_notification(int p_what) {
if (asset_library) {
// Removes extra border margins.
asset_library->add_theme_style_override("panel", memnew(StyleBoxEmpty));
+ // Suggest browsing asset library to get templates/demos.
+ if (open_templates && _project_list->get_project_count() == 0) {
+ open_templates->popup_centered();
+ }
}
} break;
@@ -2771,6 +2773,9 @@ ProjectManager::ProjectManager() {
center_box->add_child(settings_hb);
}
+ // Asset Library can't work on Web editor for now as most assets are sourced
+ // directly from GitHub which does not set CORS.
+#ifndef JAVASCRIPT_ENABLED
if (StreamPeerSSL::is_available()) {
asset_library = memnew(EditorAssetLibrary(true));
asset_library->set_name(TTR("Asset Library Projects"));
@@ -2779,6 +2784,7 @@ ProjectManager::ProjectManager() {
} else {
WARN_PRINT("Asset Library not available, as it requires SSL to work.");
}
+#endif
{
// Dialogs
@@ -2847,11 +2853,13 @@ ProjectManager::ProjectManager() {
dialog_error = memnew(AcceptDialog);
add_child(dialog_error);
- open_templates = memnew(ConfirmationDialog);
- open_templates->set_text(TTR("You currently don't have any projects.\nWould you like to explore official example projects in the Asset Library?"));
- open_templates->get_ok_button()->set_text(TTR("Open Asset Library"));
- open_templates->connect("confirmed", callable_mp(this, &ProjectManager::_open_asset_library));
- add_child(open_templates);
+ if (asset_library) {
+ open_templates = memnew(ConfirmationDialog);
+ open_templates->set_text(TTR("You currently don't have any projects.\nWould you like to explore official example projects in the Asset Library?"));
+ open_templates->get_ok_button()->set_text(TTR("Open Asset Library"));
+ open_templates->connect("confirmed", callable_mp(this, &ProjectManager::_open_asset_library));
+ add_child(open_templates);
+ }
about = memnew(EditorAbout);
add_child(about);
diff --git a/platform/javascript/detect.py b/platform/javascript/detect.py
index 709104c5ee..4a9652fc1c 100644
--- a/platform/javascript/detect.py
+++ b/platform/javascript/detect.py
@@ -48,11 +48,6 @@ def get_flags():
return [
("tools", False),
("builtin_pcre2_with_jit", False),
- # Disabling the mbedtls module reduces file size.
- # The module has little use due to the limited networking functionality
- # in this platform. For the available networking methods, the browser
- # manages TLS.
- ("module_mbedtls_enabled", False),
("vulkan", False),
]
diff --git a/platform/linuxbsd/export/export.cpp b/platform/linuxbsd/export/export.cpp
index ec83e52f09..965b969ba8 100644
--- a/platform/linuxbsd/export/export.cpp
+++ b/platform/linuxbsd/export/export.cpp
@@ -44,7 +44,7 @@ void register_linuxbsd_exporter() {
platform->set_name("Linux/X11");
platform->set_extension("x86_32");
platform->set_extension("x86_64", "binary_format/64_bits");
- platform->set_os_name("LinuxBSD");
+ platform->set_os_name("Linux");
platform->set_chmod_flags(0755);
EditorExport::get_singleton()->add_export_platform(platform);
diff --git a/scene/resources/primitive_meshes.cpp b/scene/resources/primitive_meshes.cpp
index 36c8a9b435..f5ab0085f1 100644
--- a/scene/resources/primitive_meshes.cpp
+++ b/scene/resources/primitive_meshes.cpp
@@ -2385,6 +2385,9 @@ void TextMesh::_create_mesh_array(Array &p_arr) const {
dirty_text = false;
dirty_font = false;
+ if (horizontal_alignment == HORIZONTAL_ALIGNMENT_FILL) {
+ TS->shaped_text_fit_to_width(text_rid, width, TextServer::JUSTIFICATION_WORD_BOUND | TextServer::JUSTIFICATION_KASHIDA);
+ }
} else if (dirty_font) {
int spans = TS->shaped_get_span_count(text_rid);
for (int i = 0; i < spans; i++) {
@@ -2392,11 +2395,9 @@ void TextMesh::_create_mesh_array(Array &p_arr) const {
}
dirty_font = false;
- }
- if (horizontal_alignment == HORIZONTAL_ALIGNMENT_FILL) {
- TS->shaped_text_fit_to_width(text_rid, width, TextServer::JUSTIFICATION_WORD_BOUND | TextServer::JUSTIFICATION_KASHIDA);
- } else {
- TS->shaped_text_fit_to_width(text_rid, -1, TextServer::JUSTIFICATION_WORD_BOUND | TextServer::JUSTIFICATION_KASHIDA);
+ if (horizontal_alignment == HORIZONTAL_ALIGNMENT_FILL) {
+ TS->shaped_text_fit_to_width(text_rid, width, TextServer::JUSTIFICATION_WORD_BOUND | TextServer::JUSTIFICATION_KASHIDA);
+ }
}
Vector2 offset;
@@ -2793,6 +2794,9 @@ TextMesh::~TextMesh() {
void TextMesh::set_horizontal_alignment(HorizontalAlignment p_alignment) {
ERR_FAIL_INDEX((int)p_alignment, 4);
if (horizontal_alignment != p_alignment) {
+ if (horizontal_alignment == HORIZONTAL_ALIGNMENT_FILL || p_alignment == HORIZONTAL_ALIGNMENT_FILL) {
+ dirty_text = true;
+ }
horizontal_alignment = p_alignment;
_request_update();
}
@@ -2900,6 +2904,9 @@ real_t TextMesh::get_depth() const {
void TextMesh::set_width(real_t p_width) {
if (width != p_width) {
width = p_width;
+ if (horizontal_alignment == HORIZONTAL_ALIGNMENT_FILL) {
+ dirty_text = true;
+ }
_request_update();
}
}
diff --git a/servers/rendering/renderer_rd/storage_rd/particles_storage.cpp b/servers/rendering/renderer_rd/storage_rd/particles_storage.cpp
index e15d3e13a9..58a96ed1f9 100644
--- a/servers/rendering/renderer_rd/storage_rd/particles_storage.cpp
+++ b/servers/rendering/renderer_rd/storage_rd/particles_storage.cpp
@@ -540,11 +540,8 @@ void ParticlesStorage::particles_emit(RID p_particles, const Transform3D &p_tran
_particles_allocate_emission_buffer(particles);
}
- if (particles->inactive) {
- //in case it was inactive, make active again
- particles->inactive = false;
- particles->inactive_time = 0;
- }
+ particles->inactive = false;
+ particles->inactive_time = 0;
int32_t idx = particles->emission_buffer->particle_count;
if (idx < particles->emission_buffer->particle_max) {