XR_ANDROID_recommended_settings
名称字符串
XR_ANDROID_recommended_settings
扩展程序类型
实例扩展程序
已注册的扩展程序编号
455
修订版本
1
批准状态
未批准
扩展程序和版本依赖项
上次修改日期
2026-03-16
创作贡献者
Spencer Quin,Google
Jared Finder,Google
Kevin Moule,Google
Nihav Jain,Google
Levana Chen,Google
Alvin Shi,Google
Salar Khan,Google
概览
用户的默认环境可以通过混合模式和输入模态的组合处于各种状态。此扩展程序会为用户提供建议的设置,这些设置对应于应用启动前用户默认环境的状态,以确保顺利过渡。
结构体和枚举
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 年 3 月 16 日 (Salar Khan)
- 已升级为公开,将输入模态设为标志位,并将扩展名称更改为
XR_ANDROID_recommended_settings。
- 已升级为公开,将输入模态设为标志位,并将扩展名称更改为
修订版 2,2025 年 3 月 28 日 (Salar Khan)
- 更改为 ANDROIDX 并添加了 passthroughOpacity。
修订版 1,2025-02-18 (Salar Khan)
- 初始版本。