You've already forked godot
mirror of
https://github.com/godotengine/godot.git
synced 2025-11-04 12:00:25 +00:00
Add support for OpenXR export configurations.
This commit is contained in:
@@ -751,9 +751,9 @@ void EditorExportPlatformAndroid::_get_permissions(const Ref<EditorExportPreset>
|
||||
}
|
||||
|
||||
int xr_mode_index = p_preset->get("xr_features/xr_mode");
|
||||
if (xr_mode_index == 1 /* XRMode.OVR */) {
|
||||
if (xr_mode_index == XR_MODE_OPENXR) {
|
||||
int hand_tracking_index = p_preset->get("xr_features/hand_tracking"); // 0: none, 1: optional, 2: required
|
||||
if (hand_tracking_index > 0) {
|
||||
if (hand_tracking_index > XR_HAND_TRACKING_NONE) {
|
||||
if (r_permissions.find("com.oculus.permission.HAND_TRACKING") == -1) {
|
||||
r_permissions.push_back("com.oculus.permission.HAND_TRACKING");
|
||||
}
|
||||
@@ -964,6 +964,20 @@ void EditorExportPlatformAndroid::_fix_manifest(const Ref<EditorExportPreset> &p
|
||||
}
|
||||
}
|
||||
|
||||
if (tname == "meta-data" && attrname == "name" && value == "xr_mode_metadata_name") {
|
||||
// Update the meta-data 'android:name' attribute based on the selected XR mode.
|
||||
if (xr_mode_index == XR_MODE_OPENXR) {
|
||||
string_table.write[attr_value] = "com.samsung.android.vr.application.mode";
|
||||
}
|
||||
}
|
||||
|
||||
if (tname == "meta-data" && attrname == "value" && value == "xr_mode_metadata_value") {
|
||||
// Update the meta-data 'android:value' attribute based on the selected XR mode.
|
||||
if (xr_mode_index == XR_MODE_OPENXR) {
|
||||
string_table.write[attr_value] = "vr_only";
|
||||
}
|
||||
}
|
||||
|
||||
iofs += 20;
|
||||
}
|
||||
|
||||
@@ -978,7 +992,7 @@ void EditorExportPlatformAndroid::_fix_manifest(const Ref<EditorExportPreset> &p
|
||||
Vector<bool> feature_required_list;
|
||||
Vector<int> feature_versions;
|
||||
|
||||
if (xr_mode_index == 1 /* XRMode.OVR */) {
|
||||
if (xr_mode_index == XR_MODE_OPENXR) {
|
||||
// Set degrees of freedom
|
||||
feature_names.push_back("android.hardware.vr.headtracking");
|
||||
feature_required_list.push_back(true);
|
||||
@@ -986,11 +1000,19 @@ void EditorExportPlatformAndroid::_fix_manifest(const Ref<EditorExportPreset> &p
|
||||
|
||||
// Check for hand tracking
|
||||
int hand_tracking_index = p_preset->get("xr_features/hand_tracking"); // 0: none, 1: optional, 2: required
|
||||
if (hand_tracking_index > 0) {
|
||||
if (hand_tracking_index > XR_HAND_TRACKING_NONE) {
|
||||
feature_names.push_back("oculus.software.handtracking");
|
||||
feature_required_list.push_back(hand_tracking_index == 2);
|
||||
feature_required_list.push_back(hand_tracking_index == XR_HAND_TRACKING_REQUIRED);
|
||||
feature_versions.push_back(-1); // no version attribute should be added.
|
||||
}
|
||||
|
||||
// Check for passthrough
|
||||
int passthrough_mode = p_preset->get("xr_features/passthrough");
|
||||
if (passthrough_mode > XR_PASSTHROUGH_NONE) {
|
||||
feature_names.push_back("com.oculus.feature.PASSTHROUGH");
|
||||
feature_required_list.push_back(passthrough_mode == XR_PASSTHROUGH_REQUIRED);
|
||||
feature_versions.push_back(-1);
|
||||
}
|
||||
}
|
||||
|
||||
if (feature_names.size() > 0) {
|
||||
@@ -1669,8 +1691,9 @@ void EditorExportPlatformAndroid::get_export_options(List<ExportOption> *r_optio
|
||||
|
||||
r_options->push_back(ExportOption(PropertyInfo(Variant::BOOL, "graphics/opengl_debug"), false));
|
||||
|
||||
r_options->push_back(ExportOption(PropertyInfo(Variant::INT, "xr_features/xr_mode", PROPERTY_HINT_ENUM, "Regular,Oculus Mobile VR"), 0));
|
||||
r_options->push_back(ExportOption(PropertyInfo(Variant::INT, "xr_features/xr_mode", PROPERTY_HINT_ENUM, "Regular,OpenXR"), 0));
|
||||
r_options->push_back(ExportOption(PropertyInfo(Variant::INT, "xr_features/hand_tracking", PROPERTY_HINT_ENUM, "None,Optional,Required"), 0));
|
||||
r_options->push_back(ExportOption(PropertyInfo(Variant::INT, "xr_features/passthrough", PROPERTY_HINT_ENUM, "None,Optional,Required"), 0));
|
||||
|
||||
r_options->push_back(ExportOption(PropertyInfo(Variant::BOOL, "screen/immersive_mode"), true));
|
||||
r_options->push_back(ExportOption(PropertyInfo(Variant::BOOL, "screen/support_small"), true));
|
||||
@@ -2137,10 +2160,17 @@ bool EditorExportPlatformAndroid::can_export(const Ref<EditorExportPreset> &p_pr
|
||||
// Validate the Xr features are properly populated
|
||||
int xr_mode_index = p_preset->get("xr_features/xr_mode");
|
||||
int hand_tracking = p_preset->get("xr_features/hand_tracking");
|
||||
if (xr_mode_index != /* XRMode.OVR*/ 1) {
|
||||
if (hand_tracking > 0) {
|
||||
int passthrough_mode = p_preset->get("xr_features/passthrough");
|
||||
if (xr_mode_index != XR_MODE_OPENXR) {
|
||||
if (hand_tracking > XR_HAND_TRACKING_NONE) {
|
||||
valid = false;
|
||||
err += TTR("\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\".");
|
||||
err += TTR("\"Hand Tracking\" is only valid when \"Xr Mode\" is \"OpenXR\".");
|
||||
err += "\n";
|
||||
}
|
||||
|
||||
if (passthrough_mode > XR_PASSTHROUGH_NONE) {
|
||||
valid = false;
|
||||
err += TTR("\"Passthrough\" is only valid when \"Xr Mode\" is \"OpenXR\".");
|
||||
err += "\n";
|
||||
}
|
||||
}
|
||||
@@ -2202,8 +2232,8 @@ void EditorExportPlatformAndroid::get_command_line_flags(const Ref<EditorExportP
|
||||
}
|
||||
|
||||
int xr_mode_index = p_preset->get("xr_features/xr_mode");
|
||||
if (xr_mode_index == 1) {
|
||||
command_line_strings.push_back("--xr_mode_ovr");
|
||||
if (xr_mode_index == XR_MODE_OPENXR) {
|
||||
command_line_strings.push_back("--xr_mode_openxr");
|
||||
} else { // XRMode.REGULAR is the default.
|
||||
command_line_strings.push_back("--xr_mode_regular");
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user