Compare commits

...

5 Commits

Author SHA1 Message Date
44c3f6a55a Merge pull request #112776 from m4gr3d/add_android_xr_support_4_5_1
[4.5] [Android editor] Add support for Android XR devices to the Godot XR Editor
2025-11-19 12:43:58 +01:00
bc382d11de Add support for Android XR devices to the Godot XR Editor 2025-11-14 11:47:57 -08:00
6d411f0c0d Merge pull request #112103 from akien-mga/4.5-fix-gcc-warnings
[4.5] Core: Sidestep MinGW-GCC false-positive warnings
2025-10-28 17:10:56 +01:00
20c59d6924 Core: Sidestep GCC false-positive warnings
(cherry picked from commits acdb8667b5
and 6733345f73)

Adds some more fixes for 4.5.

Co-authored-by: Lukas Tenbrink <lukas.tenbrink@gmail.com>
Co-authored-by: Rémi Verschelde <rverschelde@gmail.com>
2025-10-28 14:07:12 +01:00
8351a28101 Bump version to 4.5.2-rc 2025-10-15 11:15:29 -05:00
21 changed files with 102 additions and 29 deletions

View File

@ -2357,6 +2357,12 @@ void Image::initialize_data(const char **p_xpm) {
} break;
case READING_PIXELS: {
int y = line - colormap_size - 1;
#ifdef __MINGW32__
// False positive only with MinGW-GCC. Don't silence for regular GCC/Clang
// as this is code that _could_ exhibit actual overflow bugs.
GODOT_GCC_WARNING_PUSH
GODOT_GCC_PRAGMA(GCC diagnostic warning "-Wstringop-overflow=0")
#endif
for (int x = 0; x < size_width; x++) {
char pixelstr[6] = { 0, 0, 0, 0, 0, 0 };
for (int i = 0; i < pixelchars; i++) {
@ -2371,6 +2377,9 @@ void Image::initialize_data(const char **p_xpm) {
}
_put_pixelb(x, y, pixel_size, data_write, pixel);
}
#ifdef __MINGW32__
GODOT_GCC_WARNING_POP
#endif
if (y == (size_height - 1)) {
status = DONE;

View File

@ -30,7 +30,9 @@
#include "geometry_2d.h"
GODOT_GCC_WARNING_PUSH_AND_IGNORE("-Walloc-zero")
#include "thirdparty/clipper2/include/clipper2/clipper.h"
GODOT_GCC_WARNING_POP
#include "thirdparty/misc/polypartition.h"
#define STB_RECT_PACK_IMPLEMENTATION
#include "thirdparty/misc/stb_rect_pack.h"

View File

@ -5855,6 +5855,15 @@ String String::unquote() const {
return substr(1, length() - 2);
}
// MinGW-GCC false positives because CharStringT::length() is int (so possibly < 0).
// Don't silence for regular GCC/Clang as this is code that _could_ exhibit actual overflow bugs.
#ifdef __MINGW32__
GODOT_GCC_WARNING_PUSH
GODOT_GCC_PRAGMA(GCC diagnostic warning "-Wstringop-overflow=0")
GODOT_GCC_WARNING_IGNORE("-Warray-bounds")
GODOT_GCC_WARNING_IGNORE("-Wrestrict")
#endif
Vector<uint8_t> String::to_ascii_buffer() const {
const String *s = this;
if (s->is_empty()) {
@ -5903,6 +5912,10 @@ Vector<uint8_t> String::to_utf16_buffer() const {
return retval;
}
#ifdef __MINGW32__
GODOT_GCC_WARNING_POP
#endif
Vector<uint8_t> String::to_utf32_buffer() const {
const String *s = this;
if (s->is_empty()) {

View File

@ -32,6 +32,8 @@
#include "core/templates/span.h"
GODOT_GCC_WARNING_PUSH_AND_IGNORE("-Warray-bounds")
/**
* A high performance Vector of fixed capacity.
* Especially useful if you need to create an array on the stack, to
@ -163,3 +165,5 @@ public:
_FORCE_INLINE_ constexpr const T *begin() const { return ptr(); }
_FORCE_INLINE_ constexpr const T *end() const { return ptr() + _size; }
};
GODOT_GCC_WARNING_POP

View File

@ -19,11 +19,11 @@
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string>4.5.1</string>
<string>4.5.2</string>
<key>CFBundleSignature</key>
<string>GODO</string>
<key>CFBundleVersion</key>
<string>4.5.1</string>
<string>4.5.2</string>
<key>NSMicrophoneUsageDescription</key>
<string>Microphone access is required to capture audio.</string>
<key>NSCameraUsageDescription</key>

View File

@ -1,5 +1,5 @@
#define MyAppName "Godot Engine"
#define MyAppVersion "4.5.1"
#define MyAppVersion "4.5.2"
#define MyAppPublisher "Godot Engine contributors"
#define MyAppURL "https://godotengine.org/"
#define MyAppExeName "godot.exe"

View File

@ -7,7 +7,7 @@
<Authors>Godot Engine contributors</Authors>
<PackageId>Godot.NET.Sdk</PackageId>
<Version>4.5.1</Version>
<Version>4.5.2</Version>
<PackageVersion>$(PackageVersion_Godot_NET_Sdk)</PackageVersion>
<RepositoryUrl>https://github.com/godotengine/godot/tree/master/modules/mono/editor/Godot.NET.Sdk</RepositoryUrl>
<PackageProjectUrl>$(RepositoryUrl)</PackageProjectUrl>

View File

@ -10,7 +10,7 @@
<Authors>Godot Engine contributors</Authors>
<PackageId>Godot.SourceGenerators</PackageId>
<Version>4.5.1</Version>
<Version>4.5.2</Version>
<PackageVersion>$(PackageVersion_Godot_SourceGenerators)</PackageVersion>
<RepositoryUrl>https://github.com/godotengine/godot/tree/master/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators</RepositoryUrl>
<PackageProjectUrl>$(RepositoryUrl)</PackageProjectUrl>

View File

@ -19,7 +19,7 @@
<Authors>Godot Engine contributors</Authors>
<PackageId>GodotSharp</PackageId>
<Version>4.5.1</Version>
<Version>4.5.2</Version>
<PackageVersion>$(PackageVersion_GodotSharp)</PackageVersion>
<RepositoryUrl>https://github.com/godotengine/godot/tree/master/modules/mono/glue/GodotSharp/GodotSharp</RepositoryUrl>
<PackageProjectUrl>$(RepositoryUrl)</PackageProjectUrl>

View File

@ -15,7 +15,7 @@
<Authors>Godot Engine contributors</Authors>
<PackageId>GodotSharpEditor</PackageId>
<Version>4.5.1</Version>
<Version>4.5.2</Version>
<PackageVersion>$(PackageVersion_GodotSharp)</PackageVersion>
<RepositoryUrl>https://github.com/godotengine/godot/tree/master/modules/mono/glue/GodotSharp/GodotSharpEditor</RepositoryUrl>
<PackageProjectUrl>$(RepositoryUrl)</PackageProjectUrl>

View File

@ -15,7 +15,7 @@ ext.versions = [
// Also update 'platform/android/detect.py#get_ndk_version()' when this is updated.
ndkVersion : '28.1.13356709',
splashscreenVersion: '1.0.1',
openxrVendorsVersion: '4.1.1-stable'
openxrVendorsVersion: '4.2.0-stable',
]

View File

@ -192,6 +192,8 @@ dependencies {
implementation "androidx.constraintlayout:constraintlayout:2.2.1"
implementation "org.bouncycastle:bcprov-jdk15to18:1.78"
// Android XR dependencies
androidImplementation "org.godotengine:godot-openxr-vendors-androidxr:$versions.openxrVendorsVersion"
// Meta dependencies
horizonosImplementation "org.godotengine:godot-openxr-vendors-meta:$versions.openxrVendorsVersion"
// Pico dependencies

View File

@ -0,0 +1,42 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<uses-feature
android:name="android.software.xr.api.openxr"
android:required="false" />
<!-- 6dof motion controllers -->
<uses-feature android:name="android.hardware.xr.input.controller" android:required="false" />
<!-- Eye tracking -->
<uses-feature android:name="android.hardware.xr.input.eye_tracking" android:required="false" />
<uses-permission android:name="android.permission.EYE_TRACKING_FINE" />
<!-- Hand tracking -->
<uses-feature android:name="android.hardware.xr.input.hand_tracking" android:required="false" />
<uses-permission android:name="android.permission.HAND_TRACKING" />
<application>
<uses-native-library android:name="libopenxr.google.so" android:required="false" />
<property
android:name="android.window.PROPERTY_XR_BOUNDARY_TYPE_RECOMMENDED"
android:value="XR_BOUNDARY_TYPE_NO_RECOMMENDATION" />
<activity
android:name=".GodotXRGame"
android:exported="false"
tools:node="merge">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="org.khronos.openxr.intent.category.IMMERSIVE_HMD" />
</intent-filter>
<property
android:name="android.window.PROPERTY_XR_ACTIVITY_START_MODE"
android:value="XR_ACTIVITY_START_MODE_FULL_SPACE_UNMANAGED" />
</activity>
</application>
</manifest>

View File

@ -33,6 +33,16 @@ package org.godotengine.editor
/**
* Primary window of the Godot Editor.
*
* This is the implementation of the editor used when running on regular Android devices.
* This is the implementation of the editor used when running on Android devices.
*/
open class GodotEditor : BaseGodotEditor()
open class GodotEditor : BaseGodotEditor() {
override fun getXRRuntimePermissions(): MutableSet<String> {
val xrRuntimePermissions = super.getXRRuntimePermissions()
xrRuntimePermissions.add("android.permission.EYE_TRACKING_FINE")
xrRuntimePermissions.add("android.permission.HAND_TRACKING")
return xrRuntimePermissions
}
}

View File

@ -110,6 +110,7 @@
android:configChanges="layoutDirection|locale|orientation|keyboardHidden|screenSize|smallestScreenSize|density|keyboard|navigation|screenLayout|uiMode"
android:process=":GodotXRGame"
android:launchMode="singleTask"
android:taskAffinity=":xr"
android:icon="@mipmap/ic_play_window"
android:label="@string/godot_game_activity_name"
android:exported="false"

View File

@ -68,11 +68,7 @@ import org.godotengine.godot.error.Error
import org.godotengine.godot.utils.DialogUtils
import org.godotengine.godot.utils.PermissionsUtil
import org.godotengine.godot.utils.ProcessPhoenix
import org.godotengine.godot.utils.isNativeXRDevice
import org.godotengine.godot.xr.HybridMode
import org.godotengine.godot.xr.getHybridAppLaunchMode
import org.godotengine.godot.xr.HYBRID_APP_PANEL_CATEGORY
import org.godotengine.godot.xr.HYBRID_APP_IMMERSIVE_CATEGORY
import org.godotengine.openxr.vendors.utils.*
import kotlin.math.min
/**
@ -712,12 +708,8 @@ abstract class BaseGodotEditor : GodotActivity(), GameMenuFragment.GameMenuListe
return isNativeXRDevice(applicationContext)
}
if (featureTag == "horizonos") {
return BuildConfig.FLAVOR == "horizonos"
}
if (featureTag == "picoos") {
return BuildConfig.FLAVOR == "picoos"
if (featureTag == BuildConfig.FLAVOR) {
return true
}
return super.supportsFeature(featureTag)

View File

@ -38,8 +38,7 @@ import org.godotengine.godot.GodotLib
import org.godotengine.godot.editor.utils.GameMenuUtils
import org.godotengine.godot.utils.PermissionsUtil
import org.godotengine.godot.utils.ProcessPhoenix
import org.godotengine.godot.xr.HYBRID_APP_FEATURE
import org.godotengine.godot.xr.isHybridAppEnabled
import org.godotengine.openxr.vendors.utils.*
/**
* Base class for the Godot play windows.

View File

@ -43,11 +43,8 @@ import org.godotengine.editor.embed.GameMenuFragment
import org.godotengine.godot.GodotLib
import org.godotengine.godot.editor.utils.GameMenuUtils
import org.godotengine.godot.utils.ProcessPhoenix
import org.godotengine.godot.utils.isHorizonOSDevice
import org.godotengine.godot.utils.isNativeXRDevice
import org.godotengine.godot.xr.HYBRID_APP_PANEL_FEATURE
import org.godotengine.godot.xr.XRMode
import org.godotengine.godot.xr.isHybridAppEnabled
import org.godotengine.openxr.vendors.utils.*
/**
* Drives the 'run project' window of the Godot Editor.

View File

@ -151,6 +151,7 @@ Error MultiplayerPeerExtension::get_packet(const uint8_t **r_buffer, int &r_buff
}
Error MultiplayerPeerExtension::put_packet(const uint8_t *p_buffer, int p_buffer_size) {
ERR_FAIL_COND_V(p_buffer_size < 0, ERR_INVALID_PARAMETER);
Error err;
if (GDVIRTUAL_CALL(_put_packet, p_buffer, p_buffer_size, err)) {
return err;

View File

@ -158,6 +158,7 @@ Node *SceneState::instantiate(GenEditState p_edit_state) const {
const NodeData *nd = &nodes[0];
Node **ret_nodes = (Node **)alloca(sizeof(Node *) * nc);
ret_nodes[0] = nullptr; // Sidesteps "maybe uninitialized" false-positives on GCC.
bool gen_node_path_cache = p_edit_state != GEN_EDIT_STATE_DISABLED && node_path_cache.is_empty();

View File

@ -2,8 +2,8 @@ short_name = "godot"
name = "Godot Engine"
major = 4
minor = 5
patch = 1
status = "stable"
patch = 2
status = "rc"
module_config = ""
website = "https://godotengine.org"
docs = "4.5"