XR_ANDROID_recommended_settings
Name String
XR_ANDROID_recommended_settings
擴充功能類型
執行個體擴充功能
擴充功能註冊編號
455
修訂版本
1
批准狀態
未批准
擴充功能和版本依附元件
上次修改日期
2026-03-16
著作人
Google 的 Spencer Quin
Google 的 Jared Finder
Google 的 Kevin Moule
Google 的 Nihav Jain
Google 的 Levana Chen
Google 的 Alvin Shi
Google 的 Salar Khan
總覽
使用者的預設環境可以處於多種狀態,具體取決於混合模式和輸入模式的組合。這項擴充功能會根據使用者在啟動應用程式前的預設環境狀態,提供建議設定,確保轉換過程順暢。
結構體和列舉
XrInputModalityFlagsANDROID 位元會識別「可能」使用的不同輸入模式。
typedef XrFlags64 XrInputModalityFlagsANDROID;
XrInputModalityFlagsANDROID 的有效位元由 XrInputModalityFlagBitsANDROID 定義,具體如下:
// Flag bits for XrInputModalityFlagsANDROID
static const XrInputModalityFlagsANDROID XR_INPUT_MODALITY_HEAD_BIT_ANDROID = 0x00000001;
static const XrInputModalityFlagsANDROID XR_INPUT_MODALITY_CONTROLLER_BIT_ANDROID = 0x00000002;
static const XrInputModalityFlagsANDROID XR_INPUT_MODALITY_HANDS_BIT_ANDROID = 0x00000004;
static const XrInputModalityFlagsANDROID XR_INPUT_MODALITY_MOUSE_BIT_ANDROID = 0x00000008;
static const XrInputModalityFlagsANDROID XR_INPUT_MODALITY_GAZE_AND_GESTURE_BIT_ANDROID = 0x00000010;
旗標說明
XR_INPUT_MODALITY_HEAD_BIT_ANDROID:表示使用頭部追蹤功能的輸入模式。XR_INPUT_MODALITY_CONTROLLER_BIT_ANDROID:表示使用任何 XR 控制器輸入的輸入模式。XR_INPUT_MODALITY_HANDS_BIT_ANDROID:表示使用手勢追蹤的輸入模式。XR_INPUT_MODALITY_MOUSE_BIT_ANDROID:表示使用滑鼠輸入的輸入模式。XR_INPUT_MODALITY_GAZE_AND_GESTURE_BIT_ANDROID:表示結合眼動追蹤和手勢追蹤的輸入模式。
XrRecommendedSettingsANDROID 結構定義如下:
typedef struct XrRecommendedSettingsANDROID {
XrStructureType type;
void* next;
XrEnvironmentBlendMode blendMode;
float passthroughOpacity;
XrInputModalityFlagsANDROID activeInputModalities;
} XrRecommendedSettingsANDROID;
成員說明
type是這個結構的 XrStructureType。next是NULL,或指向結構鏈中下一個結構的指標。核心 OpenXR 或這個擴充功能中未定義這類結構。blendMode是 XrEnvironmentBlendMode,表示應用程式啟動前的預設環境混合模式。passthroughOpacity是float,表示應用程式啟動前,預設環境的透視不透明度。如果是 OST 裝置,執行階段必須將這個值設為 (1.0 - dimming_value)。activeInputModalities是 XrInputModalityFlagsANDROID 的位元遮罩,表示應用程式啟動前,預設環境中使用的輸入模式。
有效用途 (隱含)
- 必須先啟用
XR_ANDROID_recommended_settings擴充功能,才能使用 XrRecommendedSettingsANDROID -
type「必須」為XR_TYPE_RECOMMENDED_SETTINGS_ANDROID -
next「必須」為NULL,或指向結構鏈中下一個結構的有效指標 -
blendMode「必須」是有效的 XrEnvironmentBlendMode 值 -
activeInputModalities「必須」是 XrInputModalityFlagBitsANDROID 值的有效組合 -
activeInputModalities「不得」為0
列舉支援的環境狀態
應用程式可以判斷系統支援哪些混合模式和輸入型態狀態,方法是使用 xrEnumerateEnvironmentBlendModes,並在呼叫 xrGetSystemProperties 時,使用 XrSystemInputModalityPropertiesANDROID 結構擴充 XrSystemProperties。
XrSystemInputModalityPropertiesANDROID 結構定義如下:
typedef struct XrSystemInputModalityPropertiesANDROID {
XrStructureType type;
void* next;
XrInputModalityFlagsANDROID supportedInputModalities;
} XrSystemInputModalityPropertiesANDROID;
成員說明
type是這個結構的 XrStructureType。next是NULL,或指向結構鏈中下一個結構的指標。核心 OpenXR 或這個擴充功能中未定義這類結構。supportedInputModalities是一或多個 XrInputModalityFlagsANDROID,表示系統支援的輸入型態。
有效用途 (隱含)
- 必須先啟用
XR_ANDROID_recommended_settings擴充功能,才能使用 XrSystemInputModalityPropertiesANDROID -
type「必須」為XR_TYPE_SYSTEM_INPUT_MODALITY_PROPERTIES_ANDROID -
next「必須」為NULL,或指向結構鏈中下一個結構的有效指標
取得建議設定 (預先啟動預設環境狀態)
XrResult xrGetRecommendedSettingsANDROID(
XrInstance instance,
XrSystemId systemId,
XrRecommendedSettingsANDROID* output);
參數說明
instance是先前使用 xrCreateInstance 建立的 XrInstance 控制代碼。systemId是先前從 xrGetSystem 擷取的XrSystemId。output是 XrRecommendedSettingsANDROID 結構體的指標,會與預設環境狀態一起輸出。
有效用途 (隱含)
- 必須先啟用
XR_ANDROID_recommended_settings擴充功能,才能呼叫 xrGetRecommendedSettingsANDROID -
instance「必須」是有效的 XrInstance 控制代碼 -
output「必須」是指向 XrRecommendedSettingsANDROID 結構的指標
傳回代碼
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_RUNTIME_FAILUREXR_ERROR_SYSTEM_INVALID
建議設定的程式碼範例
以下程式碼範例示範如何取得支援的輸入模式、取得建議設定,並確認系統支援回報的設定。
XrInstance instance; // Created at app startup
XrSystemId systemId; // previously initialized from xrGetSystem
XrViewConfigurationType viewType; // previously initialized to select desired view configuration
// The function pointers are previously initialized using xrGetInstanceProcAddr.
PFN_xrGetRecommendedSettingsANDROID xrGetRecommendedSettingsANDROID; // previously initialized
XrSystemInputModalityPropertiesANDROID props = {
.type = XR_TYPE_SYSTEM_INPUT_MODALITY_PROPERTIES_ANDROID
};
XrSystemProperties base = {
.type = XR_TYPE_SYSTEM_PROPERTIES,
.next = &props
};
CHK_XR(xrGetSystemProperties(instance, systemId, &base));
uint32_t blendModeCount = 0;
CHK_XR(
xrEnumerateEnvironmentBlendModes(instance, systemId, viewType, 0, &blendModeCount, nullptr));
std::vector<XrEnvironmentBlendMode> supportedBlendModes(blendModeCount);
CHK_XR(
xrEnumerateEnvironmentBlendModes(
instance, systemId, viewType, blendModeCount, &blendModeCount, supportedBlendModes.data()));
XrRecommendedSettingsANDROID output = {
.type = XR_TYPE_RECOMMENDED_SETTINGS_ANDROID
};
XrResult result = xrGetRecommendedSettingsANDROID(instance, systemId, &output);
if (result == XR_SUCCESS) {
// We now know the current state of the default environment as recommended settings
bool correctBlendMode = false;
for(XrEnvironmentBlendMode blendMode : supportedBlendModes) {
if (blendMode == output.blendMode) {
correctBlendMode = true;
break;
}
}
assert(correctBlendMode);
assert((~props.supportedInputModalities & output.activeInputModalities) == 0);
}
新指令
新結構
新列舉
新位元遮罩
新列舉常數
XR_ANDROID_RECOMMENDED_SETTINGS_EXTENSION_NAMEXR_ANDROID_recommended_settings_SPEC_VERSION擴充 XrStructureType:
XR_TYPE_RECOMMENDED_SETTINGS_ANDROIDXR_TYPE_SYSTEM_INPUT_MODALITY_PROPERTIES_ANDROID
問題
版本記錄
修訂版本 3,2026-03-16 (Salar Khan)
- 升級為公開、將輸入模態設為標記位元,並將擴充功能名稱變更為
XR_ANDROID_recommended_settings。
- 升級為公開、將輸入模態設為標記位元,並將擴充功能名稱變更為
修訂版本 2,2025 年 3 月 28 日 (Salar Khan)
- 變更為 ANDROIDX,並加入 passthroughOpacity。
修訂版本 1,2025-02-18 (Salar Khan)
- 初始版本。