XR_EXT_spatial_container
Name String
XR_EXT_spatial_container
Loại tiện ích
Phần mở rộng thực thể
Số máy lẻ đã đăng ký
811
Bản sửa đổi
1
Trạng thái phê chuẩn
Chưa được phê chuẩn
Phần phụ thuộc của tiện ích và phiên bản
Ngày sửa đổi gần đây nhất
2026-08-06
Trạng thái IP
Không có tuyên bố nào về tài sản trí tuệ.
Cộng tác viên
Jared Finder, Google
Andreas Loeve Selvik, Meta Platforms
Lachlan Ford, Google
Cass Everitt, Meta Platforms
Adam Gousetis, Meta Platforms
Ankur Agrawal, Unity Technologies
Bjorn Swenson, LÖVR
Denny Rönngren, Varjo Technologies
Fredia Huya-Kouadio, Godot Engine
Guodong Rong, Meta Platforms
Jakob Bornecrantz, NVIDIA
Jian Zhang, ByteDance
John Kearney, Meta Platforms
Jonathan Wright, Meta Platforms
Junfeng She, ByteDance
Kenny Vercaemer, Google
Kurtis Eveleigh, Qualcomm
Mauricio Narvaez, Meta Platforms
Nathan Nuber, Valve Corporation
Nihav Jain, Google
Nikita Lutsenko, Meta Platforms
Praveen Babu J D, ByteDance
Rylie Pavlik, Collabora
Salar Khan, Google
Shuai Liu, ByteDance
Walter Luh, Meta Platforms
Yin Li, Microsoft
Zhipeng Liu, ByteDance
Tổng quan
Tiện ích này xác định một lớp thực thể mới có thể hiển thị, được gọi là "vùng chứa không gian", tương tự như khái niệm "cửa sổ" trong hệ thống cửa sổ 2D trên máy tính.
Trong OpenXR 1.x, ứng dụng có quyền kiểm soát riêng đối với tất cả những gì người dùng nhìn thấy và cách nội dung đó được kết hợp với môi trường thực hoặc ảo của người dùng. Môi trường thời gian chạy chỉ thực hiện những thay đổi nhỏ đối với nội dung hiển thị để đảm bảo an toàn cho người dùng. Mô hình ứng dụng này phù hợp để người dùng đắm chìm trong một trải nghiệm duy nhất, nhưng không mở rộng cho nhiều trải nghiệm đồng thời. Cụ thể, trong môi trường thực tế tăng cường (AR) và thực tế hỗn hợp, người dùng thường muốn trải nghiệm nhiều ứng dụng cùng một lúc.
Vùng chứa không gian giống như cửa sổ được mở rộng sang không gian 3D. Người dùng có thể xem nhiều vùng chứa không gian cùng một lúc và cung cấp dữ liệu đầu vào cho một số vùng chứa trong số đó. Các vùng chứa không gian hiển thị có thể thuộc về nhiều ứng dụng và thời gian chạy khác nhau, quản lý kích thước và vị trí của chúng thay mặt cho người dùng.
Tiện ích này hỗ trợ các loại trải nghiệm mới có giới hạn về không gian, ngoài các trải nghiệm OpenXR sống động hiện có. Trải nghiệm OpenXR có giới hạn được phép có nội dung 3D nhẹ (bảng điều khiển phẳng có độ lệch chiều sâu nhỏ) hoặc các khối chứa nội dung 3D hoàn toàn. Trải nghiệm OpenXR sống động là các ứng dụng sống động toàn màn hình hiện có được hỗ trợ kể từ OpenXR 1.0. Ứng dụng có thể chuyển đổi giữa hai loại nội dung nếu muốn.
Tiện ích này không xác định bất kỳ phương thức nào để ứng dụng hiển thị nội dung của tiện ích. Cách vẽ nội dung được xác định trong các tiện ích khác: XR_EXT_spatial_container_self_rendering .
Sử dụng vùng chứa không gian
XrSpatialContainerEXT là một handle đại diện cho vùng chứa không gian.
XR_DEFINE_HANDLE(XrSpatialContainerEXT)
Ứng dụng bắt đầu kết xuất thông qua một vùng chứa không gian theo các bước sau:
- Tạo vùng chứa không gian bằng xrCreateSpatialContainerEXT .
- Sửa đổi mọi trạng thái trên vùng chứa cho bản trình bày ban đầu, chẳng hạn như chế độ ranh giới.
- Yêu cầu thời gian chạy hiển thị vùng chứa bằng xrRequestSpatialContainerVisibleEXT .
- Chờ thời gian chạy sẵn sàng hiển thị vùng chứa. Khi thời gian chạy đã sẵn sàng, thời gian chạy sẽ đưa sự kiện XrEventDataSpatialContainerVisibleChangedEXT vào hàng đợi với
visibleđược đặt thànhXR_TRUE. - Bắt đầu kết xuất cho vùng chứa không gian.
Và việc chia nhỏ vùng chứa không gian như sau:
- Yêu cầu thời gian chạy ẩn vùng chứa bằng xrRequestSpatialContainerVisibleEXT .
- Chờ thời gian chạy hoàn tất việc ẩn vùng chứa. Khi thời gian chạy đã ẩn hoàn toàn vùng chứa, thời gian chạy sẽ đưa sự kiện XrEventDataSpatialContainerVisibleChangedEXT vào hàng đợi, trong đó
visibleđược đặt thànhXR_FALSE. - Kết thúc quá trình kết xuất cho vùng chứa không gian.
- Huỷ vùng chứa bằng xrDestroySpatialContainerEXT .
Lưu ý
Theo thiết kế, tiện ích này uỷ quyền quản lý chế độ hiển thị và tiêu điểm cho từng vùng chứa không gian. Vì toàn bộ phiên không còn đại diện cho một đối tượng hiển thị hoặc đối tượng được lấy tiêu điểm, nên phiên này không chuyển đổi thông qua máy trạng thái OpenXR tiêu chuẩn (READY, SYNCHRONIZED, VISIBLE, FOCUSED). Thay vào đó, phiên vẫn ở trạng thái XR_SESSION_STATE_IDLE trong suốt thời gian hoạt động và các quy tắc trong phần Thay đổi đối với trạng thái phiên chỉ định cách các thao tác cốt lõi của OpenXR liên kết với chế độ này.
Tạo vùng chứa không gian
Hàm xrCreateSpatialContainerEXT tạo một vùng chứa không gian mới.
XrResult xrCreateSpatialContainerEXT(
XrSession session,
const XrSpatialContainerCreateInfoEXT* createInfo,
XrSpatialContainerEXT* spatialContainer);
Nội dung mô tả về tham số
sessionlà XrSession tạo vùng chứa không gian.createInfolà con trỏ đến XrSpatialContainerCreateInfoEXT chứa các tham số để tạo vùng chứa không gian.spatialContainerlà con trỏ đến một tay điều khiển mà trong đó XrSpatialContainerEXT đã tạo được trả về.
XrSpatialContainerEXT mới tạo phải không hiển thị, không tương tác được và ở chế độ ranh giới XR_SPATIAL_CONTAINER_BOUNDS_MODE_BOUNDED_EXT . Một ứng dụng muốn vùng chứa không gian bắt đầu ở chế độ hiển thị tối đa có thể yêu cầu chế độ ranh giới XR_SPATIAL_CONTAINER_BOUNDS_MODE_IMMERSIVE_EXT trước khi yêu cầu hiển thị vùng chứa không gian.
Thời gian chạy phải trả về XR_ERROR_VALIDATION_FAILURE nếu bất kỳ chiều nào của XrSpatialContainerCreateInfoEXT :: suggestedBounds là số âm, vô hạn hoặc không phải là số. Môi trường thời gian chạy phải trả về XR_ERROR_LIMIT_REACHED nếu một ứng dụng cố gắng tạo nhiều vùng chứa không gian hơn mức được chỉ định trong XrSystemSpatialContainerPropertiesEXT :: maxSpatialContainerCount . Nếu vùng chứa không gian không được bật cho phiên này , thì thời gian chạy phải trả về XR_ERROR_SPATIAL_CONTAINERS_NOT_ENABLED_EXT .
Cách sử dụng hợp lệ (Ngầm ẩn)
- Tiện ích
XR_EXT_spatial_containerphải được bật trước khi gọi xrCreateSpatialContainerEXT -
sessionphải là một tên người dùng XrSession hợp lệ -
createInfophải là con trỏ đến cấu trúc XrSpatialContainerCreateInfoEXT hợp lệ -
spatialContainerphải là một con trỏ đến một tay điều khiển XrSpatialContainerEXT
Mã trả về
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_LIMIT_REACHEDXR_ERROR_OUT_OF_MEMORYXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_SPATIAL_CONTAINERS_NOT_ENABLED_EXTXR_ERROR_VALIDATION_FAILURE
XrSpatialContainerCreateInfoEXT được truyền đến xrCreateSpatialContainerEXT để tạo vùng chứa không gian.
typedef struct XrSpatialContainerCreateInfoEXT {
XrStructureType type;
const void* next;
XrSpatialContainerGraphicsPresentationEXT graphicsPresentation;
XrExtent3Df suggestedBounds;
} XrSpatialContainerCreateInfoEXT;
Nội dung mô tả về thành viên
typelà XrStructureType của cấu trúc này.nextlàNULLhoặc con trỏ trỏ đến cấu trúc tiếp theo trong chuỗi cấu trúc. Không có cấu trúc nào như vậy được xác định trong OpenXR cốt lõi hoặc tiện ích này.graphicsPresentationlà một XrSpatialContainerGraphicsPresentationEXT mô tả cách vùng chứa không gian này trình bày đồ hoạ.suggestedBoundslà một XrExtent3Df mô tả kích thước được yêu cầu của vùng chứa không gian (tính bằng mét).
Một ứng dụng không có lựa chọn ưu tiên về kích thước có thể đặt suggestedBounds thành {0, 0, 0}. Thời gian chạy có thể bỏ qua suggestedBounds được yêu cầu.
Môi trường thời gian chạy cho phép các vùng chứa không gian được giới hạn bằng các hình dạng khác ngoài hộp định hướng phải sử dụng suggestBounds làm hộp giới hạn xung quanh các hình dạng khác. Hộp định hướng là hình dạng giới hạn phổ biến nhất.
Cách sử dụng hợp lệ (Ngầm ẩn)
- Tiện ích
XR_EXT_spatial_containerphải được bật trước khi sử dụng XrSpatialContainerCreateInfoEXT -
typephải làXR_TYPE_SPATIAL_CONTAINER_CREATE_INFO_EXT -
nextphải làNULLhoặc một con trỏ hợp lệ đến cấu trúc tiếp theo trong chuỗi cấu trúc -
graphicsPresentationphải là một giá trị XrSpatialContainerGraphicsPresentationEXT hợp lệ
Khi vùng chứa không gian không còn sử dụng được nữa, thời gian chạy phải đưa sự kiện XrEventDataSpatialContainerClosedEXT vào hàng đợi.
typedef struct XrEventDataSpatialContainerClosedEXT {
XrStructureType type;
const void* next;
XrSpatialContainerEXT spatialContainer;
} XrEventDataSpatialContainerClosedEXT;
Nội dung mô tả về thành viên
typelà XrStructureType của cấu trúc này.nextlàNULLhoặc con trỏ trỏ đến cấu trúc tiếp theo trong chuỗi cấu trúc. Không có cấu trúc nào như vậy được xác định trong OpenXR cốt lõi hoặc tiện ích này.spatialContainerlà XrSpatialContainerEXT mà sự kiện này dành cho.
Việc nhận được sự kiện XrEventDataSpatialContainerClosedEXT cho biết rằng thời gian chạy không còn có thể hiển thị vùng chứa không gian nữa, ví dụ: do người dùng nhấp vào nút "đóng" hoặc phiên chuyển sang trạng thái XR_SESSION_STATE_LOSS_PENDING.
Sau khi nhận được sự kiện XrEventDataSpatialContainerClosedEXT, ứng dụng nên ngừng sử dụng vùng chứa không gian đó, huỷ mọi trạng thái liên quan (chẳng hạn như vòng lặp kết xuất) và huỷ vùng chứa. Môi trường thời gian chạy phải trả về XR_ERROR_SPATIAL_CONTAINER_CLOSED_EXT từ tất cả hàm hoạt động trên vùng chứa đó, ngoại trừ xrDestroySpatialContainerEXT .
Nếu một vùng chứa không gian hiển thị khi thời gian chạy đưa sự kiện đóng vào hàng đợi, thì thời gian chạy phải thay đổi vùng chứa thành không hiển thị trước rồi đưa sự kiện XrEventDataSpatialContainerVisibleChangedEXT vào hàng đợi.
Cách sử dụng hợp lệ (Ngầm ẩn)
- Bạn phải bật tiện ích
XR_EXT_spatial_containertrước khi sử dụng XrEventDataSpatialContainerClosedEXT -
typephải làXR_TYPE_EVENT_DATA_SPATIAL_CONTAINER_CLOSED_EXT -
nextphải làNULLhoặc một con trỏ hợp lệ đến cấu trúc tiếp theo trong chuỗi cấu trúc
Hàm xrDestroySpatialContainerEXT huỷ một vùng chứa không gian hiện có.
XrResult xrDestroySpatialContainerEXT(
XrSpatialContainerEXT spatialContainer);
Nội dung mô tả về tham số
spatialContainerlà một XrSpatialContainerEXT được tạo trước đó bằng xrCreateSpatialContainerEXT .
Sau khi vùng chứa không gian bị huỷ, thời gian chạy không được hiển thị nội dung của vùng chứa nữa và không được đưa thêm bất kỳ sự kiện nào về vùng chứa vào hàng đợi.
Ứng dụng không nên huỷ một vùng chứa không gian đang hiển thị vì việc này có thể dẫn đến các cấu phần phần mềm đồ hoạ. Thay vào đó, ứng dụng nên yêu cầu ẩn vùng chứa không gian bằng xrRequestSpatialContainerVisibleEXT, chờ sự kiện XrEventDataSpatialContainerVisibleChangedEXT rồi huỷ vùng chứa.
Cách sử dụng hợp lệ (Ngầm ẩn)
- Tiện ích
XR_EXT_spatial_containerphải được bật trước khi gọi xrDestroySpatialContainerEXT -
spatialContainerphải là một tên người dùng XrSpatialContainerEXT hợp lệ
Độ an toàn cho chuỗi
- Quyền truy cập vào
spatialContainervà mọi tay điều khiển con phải được đồng bộ hoá bên ngoài
Mã trả về
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_RUNTIME_FAILURE
Không gian vùng chứa không gian
Hàm xrCreateSpatialContainerSpaceEXT tạo một tay điều khiển XrSpace cho không gian vùng chứa không gian của một vùng chứa không gian cụ thể.
XrResult xrCreateSpatialContainerSpaceEXT(
XrSession session,
const XrSpatialContainerSpaceCreateInfoEXT* createInfo,
XrSpace* space);
Nội dung mô tả về tham số
sessionlà XrSession tạo không gian.createInfolà con trỏ đến XrSpatialContainerSpaceCreateInfoEXT chứa các tham số để tạo không gian.spacelà con trỏ đến một tên người dùng mà XrSpace đã tạo được trả về.
"Không gian vùng chứa không gian" cho bất kỳ vùng chứa không gian nào là một hệ toạ độ có gốc ở giữa ranh giới của vùng chứa không gian đó. Không gian này thường được dùng làm không gian cơ sở cho các hàm như xrLocateSpace .
+X trỏ đến mặt bên phải của vùng chứa, +Y trỏ đến mặt trên của vùng chứa và +Z trỏ đến mặt trước của vùng chứa. Ví dụ: nếu một vùng chứa được căn chỉnh theo trọng lực, ở phía trước người xem và người xem đang ở tư thế nhận dạng so với không gian LOCAL, thì thời gian chạy phải định hướng không gian vùng chứa theo hướng nhận dạng so với không gian LOCAL . Thời gian chạy có thể đặt tư thế của không gian vùng chứa tương ứng với không gian LOCAL thành bất kỳ tư thế tuỳ ý nào khi vùng chứa đó xuất hiện.
quy ước không gian vùng chứa không gian bên ngoài
Hình 18. Quy ước trục của không gian vùng chứa không gian
Không gian vùng chứa không gian là một gốc không bị khoá trong thế giới. Những ứng dụng muốn có gốc toạ độ cố định trong không gian khi ở chế độ hiển thị tối đa có thể sử dụng không gian cố định trong không gian như XR_REFERENCE_SPACE_TYPE_LOCAL .
Môi trường thời gian chạy có thể thay đổi tư thế của không gian vùng chứa không gian bất cứ lúc nào, thường là để hỗ trợ người dùng di chuyển vùng chứa không gian đến một vị trí hoặc chế độ xoay khác. Môi trường thời gian chạy cũng có thể thay đổi tư thế khi chuyển đổi giữa các chế độ ranh giới XR_SPATIAL_CONTAINER_BOUNDS_MODE_BOUNDED_EXT và XR_SPATIAL_CONTAINER_BOUNDS_MODE_IMMERSIVE_EXT.
Không gian vùng chứa không gian phải tiếp tục là một tay điều khiển hợp lệ ngay cả khi vùng chứa không gian mà không gian đó dành cho bị huỷ bằng xrDestroySpatialContainerEXT . Khi vùng chứa không gian không hiển thị hoặc bị huỷ, không gian của vùng chứa không gian phải không thể định vị được so với các không gian khác. XrSpaceLocation :: locationFlags và XrViewState ::viewStateFlags sẽ là 0.
Cách sử dụng hợp lệ (Ngầm ẩn)
- Tiện ích
XR_EXT_spatial_containerphải được bật trước khi gọi xrCreateSpatialContainerSpaceEXT -
sessionphải là một tên người dùng XrSession hợp lệ -
createInfophải là một con trỏ đến cấu trúc XrSpatialContainerSpaceCreateInfoEXT hợp lệ -
spacephải là con trỏ đến một tay điều khiển XrSpace
Mã trả về
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_LIMIT_REACHEDXR_ERROR_OUT_OF_MEMORYXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_SPATIAL_CONTAINER_CLOSED_EXTXR_ERROR_VALIDATION_FAILURE
XrSpatialContainerSpaceCreateInfoEXT được dùng với xrCreateSpatialContainerSpaceEXT để tạo một tay điều khiển XrSpace.
typedef struct XrSpatialContainerSpaceCreateInfoEXT {
XrStructureType type;
const void* next;
XrSpatialContainerEXT spatialContainer;
} XrSpatialContainerSpaceCreateInfoEXT;
Nội dung mô tả về thành viên
typelà XrStructureType của cấu trúc này.nextlàNULLhoặc con trỏ trỏ đến cấu trúc tiếp theo trong chuỗi cấu trúc. Không có cấu trúc nào như vậy được xác định trong OpenXR cốt lõi hoặc tiện ích này.spatialContainerlà một XrSpatialContainerEXT để tạo không gian.
Cách sử dụng hợp lệ (Ngầm ẩn)
- Tiện ích
XR_EXT_spatial_containerphải được bật trước khi sử dụng XrSpatialContainerSpaceCreateInfoEXT -
typephải làXR_TYPE_SPATIAL_CONTAINER_SPACE_CREATE_INFO_EXT -
nextphải làNULLhoặc một con trỏ hợp lệ đến cấu trúc tiếp theo trong chuỗi cấu trúc -
spatialContainerphải là một tên người dùng XrSpatialContainerEXT hợp lệ
Trình bày vùng chứa không gian
Việc gửi nội dung của vùng chứa không gian đến OpenXR để hiển thị sẽ do các tiện ích khác xử lý: XR_EXT_spatial_container_self_rendering .
Để cho phép các tiện ích khác chỉ định phương thức trình bày đồ hoạ cho vùng chứa không gian, tiện ích này xác định enum XrSpatialContainerGraphicsPresentationEXT.
typedef enum XrSpatialContainerGraphicsPresentationEXT {
XR_SPATIAL_CONTAINER_GRAPHICS_PRESENTATION_SELF_RENDERING_EXT = 1000813000,
XR_SPATIAL_CONTAINER_GRAPHICS_PRESENTATION_CONFORMANCE_AUTOMATION_EXT = 1000814000,
XR_SPATIAL_CONTAINER_GRAPHICS_PRESENTATION_SYSTEM_RENDERING_EXTX1 = 1000815000,
XR_SPATIAL_CONTAINER_GRAPHICS_PRESENTATION_MAX_ENUM_EXT = 0x7FFFFFFF
} XrSpatialContainerGraphicsPresentationEXT;
Nội dung mô tả enum
XR_SPATIAL_CONTAINER_GRAPHICS_PRESENTATION_SELF_RENDERING_EXT
Vùng chứa không gian sử dụng các lớp kết hợp OpenXR (Do tiện ích XR_EXT_spatial_container_self_rendering thêm vào)
XR_SPATIAL_CONTAINER_GRAPHICS_PRESENTATION_CONFORMANCE_AUTOMATION_EXT
Vùng chứa không gian được tạo để kiểm tra tính tuân thủ và không có đường dẫn kết xuất (Do tiện ích XR_EXT_spatial_container_conformance_automation thêm vào)
XR_SPATIAL_CONTAINER_GRAPHICS_PRESENTATION_SYSTEM_RENDERING_EXTX1
Vùng chứa không gian sử dụng tính năng kết xuất hệ thống OpenXR (Do tiện ích XR_EXTX1_system_renderer thêm vào)
Trạng thái vùng chứa không gian
Trạng thái vùng chứa không gian được quản lý theo thời gian chạy dựa trên cả yêu cầu của ứng dụng và nhu cầu của người dùng. Do đó, mỗi khía cạnh của trạng thái vùng chứa không gian đều ghi lại những điều sau:
- Khi môi trường thời gian chạy được phép thay đổi trạng thái vùng chứa không gian. Đối với hầu hết trạng thái vùng chứa không gian, thời gian chạy có thể thay đổi trạng thái bất cứ lúc nào.
- Cách ứng dụng yêu cầu thay đổi trạng thái. Môi trường thời gian chạy có thể trì hoãn mọi yêu cầu cho đến khi cho rằng yêu cầu đó phù hợp. Môi trường thời gian chạy không đưa các sự kiện vào hàng đợi khi một yêu cầu bị trì hoãn, vì vậy, ứng dụng không nên chờ một sự kiện như vậy cho logic không liên quan.
- Thời gian chạy sự kiện nào sẽ được đưa vào hàng đợi khi trạng thái vùng chứa không gian thay đổi. Môi trường thời gian chạy sẽ đưa các sự kiện vào hàng đợi cho tất cả thay đổi, bao gồm cả thay đổi do ứng dụng yêu cầu và thay đổi do môi trường thời gian chạy khởi tạo. Môi trường thời gian chạy không được đưa các sự kiện thay đổi trạng thái không cho thấy sự thay đổi vào hàng đợi, chẳng hạn như khi một ứng dụng đưa ra hai yêu cầu ẩn vùng chứa liên tiếp nhanh chóng.
- Thời gian chạy sự kiện nào sẽ được đưa vào hàng đợi khi từ chối yêu cầu thay đổi ứng dụng. Môi trường thời gian chạy có thể từ chối yêu cầu vì bất kỳ lý do nào, thường là do chính sách hệ thống liên quan đến việc duy trì trải nghiệm người dùng chất lượng cao.
Hàm xrGetSpatialContainerStateEXT truy vấn trạng thái hiện tại của vùng chứa không gian.
XrResult xrGetSpatialContainerStateEXT(
XrSpatialContainerEXT spatialContainer,
const XrSpatialContainerStateGetInfoEXT* getInfo,
XrSpatialContainerStateEXT* state);
Nội dung mô tả về tham số
spatialContainerlà XrSpatialContainerEXT cần truy vấn.getInfolà XrSpatialContainerStateGetInfoEXT có thông tin dùng để lấy trạng thái của vùng chứa không gian.statelà con trỏ đến XrSpatialContainerStateEXT, trong đó trạng thái vùng chứa không gian được trả về.
Cách sử dụng hợp lệ (Ngầm ẩn)
- Phải bật tiện ích
XR_EXT_spatial_containertrước khi gọi xrGetSpatialContainerStateEXT -
spatialContainerphải là một tên người dùng XrSpatialContainerEXT hợp lệ - Nếu
getInfokhông phải làNULL, thìgetInfophải là con trỏ đến cấu trúc XrSpatialContainerStateGetInfoEXT hợp lệ -
statephải là con trỏ đến cấu trúc XrSpatialContainerStateEXT
Mã trả về
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_SPATIAL_CONTAINER_CLOSED_EXTXR_ERROR_VALIDATION_FAILURE
XrSpatialContainerStateGetInfoEXT được dùng với xrGetSpatialContainerStateEXT để truy vấn XrSpatialContainerStateEXT .
typedef struct XrSpatialContainerStateGetInfoEXT {
XrStructureType type;
const void* next;
} XrSpatialContainerStateGetInfoEXT;
Nội dung mô tả về thành viên
typelà XrStructureType của cấu trúc này.nextlàNULLhoặc con trỏ trỏ đến cấu trúc tiếp theo trong chuỗi cấu trúc. Không có cấu trúc nào như vậy được xác định trong OpenXR cốt lõi hoặc tiện ích này.
Cách sử dụng hợp lệ (Ngầm ẩn)
- Bạn phải bật tiện ích
XR_EXT_spatial_containertrước khi sử dụng XrSpatialContainerStateGetInfoEXT -
typephải làXR_TYPE_SPATIAL_CONTAINER_STATE_GET_INFO_EXT -
nextphải làNULLhoặc một con trỏ hợp lệ đến cấu trúc tiếp theo trong chuỗi cấu trúc
typedef struct XrSpatialContainerStateEXT {
XrStructureType type;
void* next;
XrBool32 visible;
XrBool32 interactable;
XrSpatialContainerBoundsModeEXT boundsMode;
} XrSpatialContainerStateEXT;
Nội dung mô tả về thành viên
typelà XrStructureType của cấu trúc này.nextlàNULLhoặc con trỏ trỏ đến cấu trúc tiếp theo trong chuỗi cấu trúc. Không có cấu trúc nào như vậy được xác định trong OpenXR cốt lõi hoặc tiện ích này.visiblecho biết vùng chứa không gian có hiển thị hay không.interactablecho biết liệu một vùng chứa không gian hiện có thể nhận bất kỳ loại dữ liệu đầu vào nào hay không. Tính năng này tương tự như "tiêu điểm" đối với hệ thống cửa sổ 2D trên máy tính, nhưng điểm khác biệt là nhiều vùng chứa không gian có thể tương tác cùng một lúc.boundsModelà XrSpatialContainerBoundsModeEXT hiện tại của vùng chứa không gian.
Các thay đổi đối với trạng thái của vùng chứa không gian được thông báo qua các sự kiện.
Sự kiện Field Changed (Trường đã thay đổi)
visible
XrEventDataSpatialContainerVisibleChangedEXT
interactable
XrEventDataSpatialContainerInteractableChangedEXT
boundsMode
XrEventDataSpatialContainerBoundsChangedEXT
Cách sử dụng hợp lệ (Ngầm ẩn)
- Bạn phải bật tiện ích
XR_EXT_spatial_containertrước khi sử dụng XrSpatialContainerStateEXT -
typephải làXR_TYPE_SPATIAL_CONTAINER_STATE_EXT -
nextphải làNULLhoặc một con trỏ hợp lệ đến cấu trúc tiếp theo trong chuỗi cấu trúc
Chế độ hiển thị
Ứng dụng yêu cầu hiện hoặc ẩn vùng chứa không gian bằng xrRequestSpatialContainerVisibleEXT .
XrResult xrRequestSpatialContainerVisibleEXT(
XrSpatialContainerEXT spatialContainer,
const XrSpatialContainerVisibleRequestInfoEXT* info);
Nội dung mô tả về tham số
spatialContainerlà XrSpatialContainerEXT để yêu cầu thay đổi.infolà con trỏ đến XrSpatialContainerVisibleRequestInfoEXT chứa trạng thái hiển thị được yêu cầu.
Việc hiện hoặc ẩn vùng chứa không gian là một thao tác không đồng bộ.
Ứng dụng nên yêu cầu ẩn vùng chứa không gian trước khi huỷ vùng chứa đó, cho phép thời gian chạy hiển thị hiệu ứng chuyển đổi mượt mà. Môi trường thời gian chạy nên tuân thủ các yêu cầu ẩn vùng chứa không gian.
Thời gian chạy có thể từ chối yêu cầu hiển thị vùng chứa không gian. Trong trường hợp này, thời gian chạy phải đưa sự kiện XrEventDataSpatialContainerVisibleRequestDeniedEXT vào hàng đợi. Ví dụ: một số môi trường thời gian chạy sẽ từ chối yêu cầu hiển thị vùng chứa không gian mà người dùng đã ẩn bằng cách tương tác với nút "thu nhỏ" do hệ thống cung cấp.
Môi trường thời gian chạy không được hiển thị vùng chứa không gian trước khi ứng dụng yêu cầu hiển thị vùng chứa không gian đó ít nhất một lần. Sau yêu cầu đầu tiên của ứng dụng về việc hiển thị vùng chứa không gian, thời gian chạy có thể thay đổi chế độ hiển thị của vùng chứa không gian đó độc lập với các yêu cầu của ứng dụng. Điều này cho phép ứng dụng kiểm soát trạng thái ban đầu và nội dung của vùng chứa không gian, đồng thời cho phép thời gian chạy cung cấp giao diện người dùng hệ thống như thanh tác vụ, cho phép người dùng chọn vùng chứa không gian nào hiển thị.
Môi trường thời gian chạy phải từ chối yêu cầu hiển thị vùng chứa không gian ở chế độ ranh giới không được hỗ trợ dựa trên XrSystemSpatialContainerPropertiesEXT :: supportsBounded và XrSystemSpatialContainerPropertiesEXT :: supportsImmersive . Điều này có thể xảy ra khi chế độ ranh giới mặc định, XR_SPATIAL_CONTAINER_BOUNDS_MODE_BOUNDED_EXT , không được hỗ trợ cho một hệ thống nhất định.
Lưu ý
Trong một số trường hợp triển khai, việc hiện hoặc ẩn vùng chứa không gian yêu cầu giao tiếp với các dịch vụ hệ thống và có thể bị trì hoãn cho đến khi người dùng tương tác với hộp thoại hệ thống. Thiết kế không đồng bộ để yêu cầu thay đổi trạng thái hiển thị nhằm giúp thời gian chạy có thời gian hoàn tất cả hai thao tác này.
Cách sử dụng hợp lệ (Ngầm ẩn)
- Bạn phải bật tiện ích
XR_EXT_spatial_containertrước khi gọi xrRequestSpatialContainerVisibleEXT -
spatialContainerphải là một tên người dùng XrSpatialContainerEXT hợp lệ -
infophải là con trỏ đến cấu trúc XrSpatialContainerVisibleRequestInfoEXT hợp lệ
Mã trả về
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_SPATIAL_CONTAINER_CLOSED_EXTXR_ERROR_VALIDATION_FAILURE
XrSpatialContainerVisibleRequestInfoEXT được dùng với xrRequestSpatialContainerVisibleEXT để thay đổi chế độ hiển thị của vùng chứa không gian.
typedef struct XrSpatialContainerVisibleRequestInfoEXT {
XrStructureType type;
const void* next;
XrBool32 visible;
} XrSpatialContainerVisibleRequestInfoEXT;
Nội dung mô tả về thành viên
typelà XrStructureType của cấu trúc này.nextlàNULLhoặc con trỏ trỏ đến cấu trúc tiếp theo trong chuỗi cấu trúc. Không có cấu trúc nào như vậy được xác định trong OpenXR cốt lõi hoặc tiện ích này.visiblecho biết liệu vùng chứa không gian được yêu cầu hiển thị hay ẩn.
Cách sử dụng hợp lệ (Ngầm ẩn)
- Bạn phải bật tiện ích
XR_EXT_spatial_containertrước khi sử dụng XrSpatialContainerVisibleRequestInfoEXT -
typephải làXR_TYPE_SPATIAL_CONTAINER_VISIBLE_REQUEST_INFO_EXT -
nextphải làNULLhoặc một con trỏ hợp lệ đến cấu trúc tiếp theo trong chuỗi cấu trúc
Mỗi khi thời gian chạy thay đổi chế độ hiển thị của vùng chứa không gian, thời gian chạy phải đưa sự kiện XrEventDataSpatialContainerVisibleChangedEXT vào hàng đợi với trạng thái mới.
typedef struct XrEventDataSpatialContainerVisibleChangedEXT {
XrStructureType type;
const void* next;
XrSpatialContainerEXT spatialContainer;
XrBool32 visible;
} XrEventDataSpatialContainerVisibleChangedEXT;
Nội dung mô tả về thành viên
typelà XrStructureType của cấu trúc này.nextlàNULLhoặc con trỏ trỏ đến cấu trúc tiếp theo trong chuỗi cấu trúc. Không có cấu trúc nào như vậy được xác định trong OpenXR cốt lõi hoặc tiện ích này.spatialContainerlà XrSpatialContainerEXT mà sự kiện này dành cho.visiblelà trạng thái hiển thị mới cho vùng chứa không gian.
Sự kiện này thay thế XR_SESSION_STATE_VISIBLE , cho phép giá trị khác nhau theo vùng chứa. Sự kiện phải được đưa vào hàng đợi cho tất cả các thay đổi, bao gồm cả thay đổi do ứng dụng yêu cầu và thay đổi do thời gian chạy bắt đầu.
Môi trường thời gian chạy có thể trì hoãn việc kết xuất vùng chứa trong một vài khung hình sau khi đưa sự kiện này vào hàng đợi với visible được đặt thành XR_TRUE để tránh hiển thị vùng chứa trống và cho ứng dụng thời gian gửi nội dung ban đầu. Trong thời gian này, XrSpatialContainerStateEXT ::visible sẽ là XR_TRUE . Thời gian chạy không nên trì hoãn việc hiển thị vùng chứa quá 0,5 giây.
Cách sử dụng hợp lệ (Ngầm ẩn)
- Bạn phải bật tiện ích
XR_EXT_spatial_containertrước khi sử dụng XrEventDataSpatialContainerVisibleChangedEXT -
typephải làXR_TYPE_EVENT_DATA_SPATIAL_CONTAINER_VISIBLE_CHANGED_EXT -
nextphải làNULLhoặc một con trỏ hợp lệ đến cấu trúc tiếp theo trong chuỗi cấu trúc
Mỗi khi môi trường thời gian chạy từ chối yêu cầu hiển thị vùng chứa, môi trường thời gian chạy phải đưa sự kiện XrEventDataSpatialContainerVisibleRequestDeniedEXT vào hàng đợi.
typedef struct XrEventDataSpatialContainerVisibleRequestDeniedEXT {
XrStructureType type;
const void* next;
XrSpatialContainerEXT spatialContainer;
} XrEventDataSpatialContainerVisibleRequestDeniedEXT;
Nội dung mô tả về thành viên
typelà XrStructureType của cấu trúc này.nextlàNULLhoặc con trỏ trỏ đến cấu trúc tiếp theo trong chuỗi cấu trúc. Không có cấu trúc nào như vậy được xác định trong OpenXR cốt lõi hoặc tiện ích này.spatialContainerlà XrSpatialContainerEXT mà sự kiện này dành cho.
Cách sử dụng hợp lệ (Ngầm ẩn)
- Bạn phải bật tiện ích
XR_EXT_spatial_containertrước khi sử dụng XrEventDataSpatialContainerVisibleRequestDeniedEXT -
typephải làXR_TYPE_EVENT_DATA_SPATIAL_CONTAINER_VISIBLE_REQUEST_DENIED_EXT -
nextphải làNULLhoặc một con trỏ hợp lệ đến cấu trúc tiếp theo trong chuỗi cấu trúc
Có thể tương tác
Ứng dụng không thể yêu cầu vùng chứa không gian có thể tương tác. Vùng chứa không gian nào có thể tương tác được hoàn toàn do thời gian chạy kiểm soát. Vùng chứa không gian có thể tương tác cũng phải hiển thị được.
Mỗi khi thời gian chạy thay đổi trạng thái có thể tương tác của vùng chứa không gian, thời gian chạy phải đưa sự kiện XrEventDataSpatialContainerInteractableChangedEXT vào hàng đợi với trạng thái mới.
typedef struct XrEventDataSpatialContainerInteractableChangedEXT {
XrStructureType type;
const void* next;
XrSpatialContainerEXT spatialContainer;
XrBool32 interactable;
} XrEventDataSpatialContainerInteractableChangedEXT;
Nội dung mô tả về thành viên
typelà XrStructureType của cấu trúc này.nextlàNULLhoặc con trỏ trỏ đến cấu trúc tiếp theo trong chuỗi cấu trúc. Không có cấu trúc nào như vậy được xác định trong OpenXR cốt lõi hoặc tiện ích này.spatialContainerlà XrSpatialContainerEXT mà sự kiện này dành cho.interactablelà trạng thái có thể tương tác mới cho vùng chứa không gian.
Sự kiện này thay thế XR_SESSION_STATE_FOCUSED , cho phép giá trị khác nhau theo vùng chứa. Sự kiện này được đưa vào hàng đợi cho tất cả các thay đổi, bao gồm cả các thay đổi do thời gian chạy khởi tạo.
Môi trường thời gian chạy có thể bật hoặc tắt tính năng tương tác với vùng chứa không gian bất cứ lúc nào. Nếu một môi trường thời gian chạy chỉ hỗ trợ tối đa một vùng chứa không gian có thể tương tác tại một thời điểm, thì khi môi trường thời gian chạy thay đổi vùng chứa không gian có thể tương tác, môi trường thời gian chạy phải đưa sự kiện vào hàng đợi cho vùng chứa không gian ngừng tương tác ( interactable được đặt thành false) trước sự kiện cho vùng chứa bắt đầu tương tác ( interactable được đặt thành true).
Cách sử dụng hợp lệ (Ngầm ẩn)
- Bạn phải bật tiện ích
XR_EXT_spatial_containertrước khi sử dụng XrEventDataSpatialContainerInteractableChangedEXT -
typephải làXR_TYPE_EVENT_DATA_SPATIAL_CONTAINER_INTERACTABLE_CHANGED_EXT -
nextphải làNULLhoặc một con trỏ hợp lệ đến cấu trúc tiếp theo trong chuỗi cấu trúc
Ranh giới
Vùng chứa không gian có chế độ ranh giới và hộp giới hạn. Chế độ ranh giới của vùng chứa không gian mô tả cách hoạt động của ranh giới. Hộp giới hạn là nơi vùng chứa không gian vẽ bên trong.
Bảng liệt kê XrSpatialContainerBoundsModeEXT xác định các chế độ khác nhau mà ranh giới của vùng chứa không gian có thể áp dụng.
typedef enum XrSpatialContainerBoundsModeEXT {
XR_SPATIAL_CONTAINER_BOUNDS_MODE_BOUNDED_EXT = 1,
XR_SPATIAL_CONTAINER_BOUNDS_MODE_IMMERSIVE_EXT = 2,
XR_SPATIAL_CONTAINER_BOUNDS_MODE_MAX_ENUM_EXT = 0x7FFFFFFF
} XrSpatialContainerBoundsModeEXT;
Nội dung mô tả enum
XR_SPATIAL_CONTAINER_BOUNDS_MODE_BOUNDED_EXT
Vùng chứa không gian bị giới hạn. Các ranh giới là một hộp hữu hạn. Vùng chứa không gian sẽ chỉ xuất hiện ở khu vực này.
XR_SPATIAL_CONTAINER_BOUNDS_MODE_IMMERSIVE_EXT
Vùng chứa không gian mang tính sống động và có ranh giới vô hạn. Vùng chứa không gian được hiển thị trên toàn màn hình.
Vùng chứa không gian ở chế độ ranh giới XR_SPATIAL_CONTAINER_BOUNDS_MODE_IMMERSIVE_EXT có các yêu cầu bổ sung:
- Môi trường thời gian chạy phải xử lý các vùng chứa không gian này giống như một ứng dụng toàn màn hình và sống động được tạo mà không sử dụng vùng chứa không gian, ngoại trừ các thay đổi về hành vi được nêu trong phần Thay đổi đối với trạng thái phiên .
- Môi trường thời gian chạy có thể cung cấp các tiện ích bổ sung cho phép vùng chứa không gian sống động hoạt động khác với các ứng dụng toàn màn hình và sống động được tạo mà không có tiện ích này.
- Thời gian chạy phải báo cáo các giới hạn vô hạn cho các vùng chứa không gian này.
- Môi trường thời gian chạy có thể ẩn các vùng chứa không gian khác trong khi vùng chứa không gian sống động hiển thị. Vì điều này có thể khác nhau tuỳ theo thời gian chạy, nên các ứng dụng không nên dựa vào việc vùng chứa không gian được tự động hiện hoặc ẩn dựa trên chế độ hiển thị vùng chứa không gian sống động. Giống như tất cả các quá trình chuyển đổi trạng thái hiển thị khác, thời gian chạy phải đưa sự kiện XrEventDataSpatialContainerVisibleChangedEXT vào hàng đợi khi một vùng chứa không gian bị ẩn do một vùng chứa sống động đang hiển thị.
Lưu ý
Các yêu cầu nêu trên ngụ ý rằng tất cả thời gian chạy đều có thể triển khai đường dẫn OpenXR 1.x mà không cần tiện ích này bằng cách ngầm tạo vùng chứa không gian, đặt chế độ ranh giới của vùng chứa thành chế độ hiển thị sống động và yêu cầu hiển thị vùng chứa đó.
Ứng dụng yêu cầu thay đổi chế độ ranh giới của vùng chứa không gian bằng xrRequestSpatialContainerBoundsModeEXT .
XrResult xrRequestSpatialContainerBoundsModeEXT(
XrSpatialContainerEXT spatialContainer,
const XrSpatialContainerBoundsModeRequestInfoEXT* info);
Nội dung mô tả về tham số
spatialContainerlà XrSpatialContainerEXT để yêu cầu thay đổi.infolà con trỏ đến XrSpatialContainerBoundsModeRequestInfoEXT chứa chế độ ranh giới được yêu cầu.
Việc thay đổi chế độ ranh giới của vùng chứa không gian là một thao tác không đồng bộ và thời gian chạy có thể đưa một sự kiện đã thay đổi hoặc bị từ chối vào hàng đợi nhiều giây sau khi ứng dụng yêu cầu thay đổi. Điều này cho phép thời gian chạy bật lên giao diện người dùng cần thiết để cho phép người dùng vào chế độ hiển thị tối đa một cách an toàn.
Môi trường thời gian chạy phải tuân thủ yêu cầu thay đổi chế độ ranh giới cho vùng chứa không gian không hiển thị. Nếu thời gian chạy từ chối yêu cầu chế độ ranh giới cho một vùng chứa không hiển thị, thì thời gian chạy có thể từ chối hoặc trì hoãn yêu cầu hiển thị vùng chứa không gian đó. Điều này cho phép các ứng dụng khởi động một vùng chứa dưới dạng vùng chứa sống động. Thời gian chạy có thể từ chối yêu cầu thay đổi chế độ ranh giới của vùng chứa không gian hiển thị. Trong trường hợp này, thời gian chạy phải đưa sự kiện XrEventDataSpatialContainerBoundsModeRequestDeniedEXT vào hàng đợi. Ví dụ: một số môi trường thời gian chạy sẽ từ chối yêu cầu thay đổi chế độ ranh giới của một vùng chứa không gian hiển thị mà người dùng không chủ động tương tác.
Môi trường thời gian chạy phải trả về XR_ERROR_VALIDATION_FAILURE nếu một ứng dụng yêu cầu chế độ ranh giới không được hỗ trợ dựa trên XrSystemSpatialContainerPropertiesEXT :: supportsBounded và XrSystemSpatialContainerPropertiesEXT :: supportsImmersive .
Cách sử dụng hợp lệ (Ngầm ẩn)
- Bạn phải bật tiện ích
XR_EXT_spatial_containertrước khi gọi xrRequestSpatialContainerBoundsModeEXT -
spatialContainerphải là một tên người dùng XrSpatialContainerEXT hợp lệ -
infophải là con trỏ đến cấu trúc XrSpatialContainerBoundsModeRequestInfoEXT hợp lệ
Mã trả về
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_SPATIAL_CONTAINER_CLOSED_EXTXR_ERROR_VALIDATION_FAILURE
XrSpatialContainerBoundsModeRequestInfoEXT được dùng với xrRequestSpatialContainerBoundsModeEXT để thay đổi chế độ ranh giới của vùng chứa không gian.
typedef struct XrSpatialContainerBoundsModeRequestInfoEXT {
XrStructureType type;
const void* next;
XrSpatialContainerBoundsModeEXT boundsMode;
} XrSpatialContainerBoundsModeRequestInfoEXT;
Nội dung mô tả về thành viên
typelà XrStructureType của cấu trúc này.nextlàNULLhoặc con trỏ trỏ đến cấu trúc tiếp theo trong chuỗi cấu trúc. Không có cấu trúc nào như vậy được xác định trong OpenXR cốt lõi hoặc tiện ích này.boundsModelà XrSpatialContainerBoundsModeEXT mong muốn cho vùng chứa không gian.
Cách sử dụng hợp lệ (Ngầm ẩn)
- Bạn phải bật tiện ích
XR_EXT_spatial_containertrước khi sử dụng XrSpatialContainerBoundsModeRequestInfoEXT -
typephải làXR_TYPE_SPATIAL_CONTAINER_BOUNDS_MODE_REQUEST_INFO_EXT -
nextphải làNULLhoặc một con trỏ hợp lệ đến cấu trúc tiếp theo trong chuỗi cấu trúc -
boundsModephải là một giá trị XrSpatialContainerBoundsModeEXT hợp lệ
Mỗi khi thời gian chạy thay đổi ranh giới hoặc chế độ ranh giới của vùng chứa không gian, thời gian chạy phải đưa sự kiện XrEventDataSpatialContainerBoundsChangedEXT vào hàng đợi cùng với thông tin ranh giới mới.
typedef struct XrEventDataSpatialContainerBoundsChangedEXT {
XrStructureType type;
const void* next;
XrSpatialContainerEXT spatialContainer;
XrExtent3Df bounds;
XrBool32 infiniteBounds;
XrSpatialContainerBoundsModeEXT boundsMode;
} XrEventDataSpatialContainerBoundsChangedEXT;
Nội dung mô tả về thành viên
typelà XrStructureType của cấu trúc này.nextlàNULLhoặc con trỏ trỏ đến cấu trúc tiếp theo trong chuỗi cấu trúc. Không có cấu trúc nào như vậy được xác định trong OpenXR cốt lõi hoặc tiện ích này.spatialContainerlà XrSpatialContainerEXT mà sự kiện này dành cho.boundslà chiều rộng, chiều cao và chiều sâu mới của ranh giới vùng chứa không gian.infiniteBoundslà true nếu vùng chứa có giới hạn vô hạn.boundsModelà XrSpatialContainerBoundsModeEXT mới của vùng chứa không gian.
Sự kiện này được đưa vào hàng đợi cho tất cả các thay đổi, bao gồm cả thay đổi do ứng dụng yêu cầu và thay đổi do thời gian chạy bắt đầu.
Trong khi người dùng đang đổi kích thước vùng chứa không gian theo cách tương tác, thời gian chạy phải hoạt động theo một trong những cách sau:
- Thêm nhiều sự kiện vào hàng đợi, có thể là theo tốc độ khung hình, khi người dùng đang đổi kích thước vùng chứa không gian
- đưa một sự kiện vào hàng đợi khi kết thúc việc đổi kích thước
Nếu một môi trường thời gian chạy chỉ đưa một sự kiện vào hàng đợi khi kết thúc việc đổi kích thước, thì môi trường thời gian chạy đó phải tiếp tục báo cáo các giới hạn cũ từ xrGetSpatialContainerBoundsEXT cho đến khi môi trường thời gian chạy đưa một sự kiện đổi kích thước vào hàng đợi. Thời gian chạy phải kết hợp nhiều sự kiện thay đổi ranh giới chưa được thăm dò ý kiến. Nói cách khác, nếu ranh giới hoặc chế độ ranh giới thay đổi trong khi sự kiện XrEventDataSpatialContainerBoundsChangedEXT vẫn đang được đưa vào hàng đợi, thì thời gian chạy phải chỉ báo cáo một sự kiện duy nhất chứa thay đổi ranh giới gần đây nhất đã xảy ra. Vì ứng dụng cũng có thể thăm dò trực tiếp ranh giới của vùng chứa không gian bằng xrGetSpatialContainerBoundsEXT, nên số lượng thay đổi về ranh giới từ các sự kiện có thể khác với số lượng thay đổi từ việc thăm dò dựa trên thời gian của các thay đổi về ranh giới do thời gian chạy tạo ra, lệnh gọi ứng dụng đến xrPollEvent và lệnh gọi ứng dụng đến xrGetSpatialContainerBoundsEXT .
Khi ranh giới của vùng chứa không gian thay đổi, gốc cục bộ của vùng chứa không gian cũng có thể thay đổi. Ví dụ: nếu thời gian chạy cho phép người dùng đổi kích thước ranh giới của vùng chứa không gian bằng cách kéo một trong các cạnh của vùng chứa, thì ranh giới và gốc cục bộ của vùng chứa đó sẽ thay đổi khi người dùng kéo một cạnh. Trong những trường hợp như vậy, thời gian chạy phải thay đổi đồng thời các giới hạn và gốc cục bộ.
Môi trường thời gian chạy phải đặt infiniteBounds thành XR_TRUE và đặt chiều rộng, chiều cao và chiều sâu thành 0.0 để thể hiện ranh giới vô hạn. Môi trường thời gian chạy phải đặt infiniteBounds thành XR_FALSE, đồng thời đặt chiều rộng, chiều cao và chiều sâu thành số dương hữu hạn cho các giới hạn hữu hạn.
Thời gian chạy phải đặt bounds và infiniteBounds theo cùng quy tắc như đối với XrSpatialContainerBoundsEXT .
Cách sử dụng hợp lệ (Ngầm ẩn)
- Bạn phải bật tiện ích
XR_EXT_spatial_containertrước khi sử dụng XrEventDataSpatialContainerBoundsChangedEXT -
typephải làXR_TYPE_EVENT_DATA_SPATIAL_CONTAINER_BOUNDS_CHANGED_EXT -
nextphải làNULLhoặc một con trỏ hợp lệ đến cấu trúc tiếp theo trong chuỗi cấu trúc
Mỗi khi thời gian chạy từ chối yêu cầu thay đổi chế độ ranh giới của vùng chứa, thời gian chạy phải đưa sự kiện XrEventDataSpatialContainerBoundsModeRequestDeniedEXT vào hàng đợi.
typedef struct XrEventDataSpatialContainerBoundsModeRequestDeniedEXT {
XrStructureType type;
const void* next;
XrSpatialContainerEXT spatialContainer;
} XrEventDataSpatialContainerBoundsModeRequestDeniedEXT;
Nội dung mô tả về thành viên
typelà XrStructureType của cấu trúc này.nextlàNULLhoặc con trỏ trỏ đến cấu trúc tiếp theo trong chuỗi cấu trúc. Không có cấu trúc nào như vậy được xác định trong OpenXR cốt lõi hoặc tiện ích này.spatialContainerlà XrSpatialContainerEXT mà sự kiện này dành cho.
Cách sử dụng hợp lệ (Ngầm ẩn)
- Bạn phải bật tiện ích
XR_EXT_spatial_containertrước khi sử dụng XrEventDataSpatialContainerBoundsModeRequestDeniedEXT -
typephải làXR_TYPE_EVENT_DATA_SPATIAL_CONTAINER_BOUNDS_MODE_REQUEST_DENIED_EXT -
nextphải làNULLhoặc một con trỏ hợp lệ đến cấu trúc tiếp theo trong chuỗi cấu trúc
Cấu trúc XrSpatialContainerBoundsEXT mô tả hộp giới hạn của vùng chứa không gian.
typedef struct XrSpatialContainerBoundsEXT {
XrStructureType type;
void* next;
XrExtent3Df bounds;
XrBool32 infiniteBounds;
} XrSpatialContainerBoundsEXT;
Nội dung mô tả về thành viên
typelà XrStructureType của cấu trúc này.nextlàNULLhoặc con trỏ trỏ đến cấu trúc tiếp theo trong chuỗi cấu trúc. Không có cấu trúc nào như vậy được xác định trong OpenXR cốt lõi hoặc tiện ích này.boundslà chiều rộng, chiều cao và chiều sâu của ranh giới vùng chứa không gian. Ranh giới được tính bằng mét.infiniteBoundslà true nếu vùng chứa có giới hạn vô hạn.
Môi trường thời gian chạy phải đặt infiniteBounds thành XR_TRUE và đặt chiều rộng, chiều cao và chiều sâu thành 0.0 để thể hiện ranh giới vô hạn. Thời gian chạy phải đặt infiniteBounds thành XR_FALSE và đặt chiều rộng, chiều cao và chiều sâu thành số dương hữu hạn cho các giới hạn hữu hạn.
Cách sử dụng hợp lệ (Ngầm ẩn)
- Bạn phải bật tiện ích
XR_EXT_spatial_containertrước khi sử dụng XrSpatialContainerBoundsEXT -
typephải làXR_TYPE_SPATIAL_CONTAINER_BOUNDS_EXT -
nextphải làNULLhoặc một con trỏ hợp lệ đến cấu trúc tiếp theo trong chuỗi cấu trúc
Hàm xrGetSpatialContainerBoundsEXT truy vấn ranh giới hiện tại của vùng chứa không gian.
XrResult xrGetSpatialContainerBoundsEXT(
XrSpatialContainerEXT spatialContainer,
const XrSpatialContainerBoundsGetInfoEXT* getInfo,
XrSpatialContainerBoundsEXT* bounds);
Nội dung mô tả về tham số
spatialContainerlà XrSpatialContainerEXT cần truy vấn.getInfolà XrSpatialContainerBoundsGetInfoEXT có thông tin dùng để lấy trạng thái của vùng chứa không gian.boundslà con trỏ đến XrSpatialContainerBoundsEXT mà ranh giới được trả về.
Mặc dù vùng chứa không gian bị giới hạn, nhưng vùng chứa đó không được có giới hạn vô hạn, trong khi vùng chứa không gian sống động phải có giới hạn vô hạn.
Môi trường thời gian chạy có thể thay đổi giới hạn của vùng chứa không gian thành bất kỳ giá trị hữu hạn dương nào bất cứ lúc nào trong khi vùng chứa không gian bị giới hạn. Các thay đổi đối với ranh giới của vùng chứa không gian được thông báo qua XrEventDataSpatialContainerBoundsChangedEXT .
Với tiện ích này, ứng dụng không thể yêu cầu thay đổi ranh giới ngoài việc thay đổi giữa ranh giới và không gian sống động bằng xrRequestSpatialContainerBoundsModeEXT . Các tiện ích khác có thể cung cấp cách thức như vậy trong tương lai.
Cách sử dụng hợp lệ (Ngầm ẩn)
- Bạn phải bật tiện ích
XR_EXT_spatial_containertrước khi gọi xrGetSpatialContainerBoundsEXT -
spatialContainerphải là một tên người dùng XrSpatialContainerEXT hợp lệ - Nếu
getInfokhông phải làNULL, thìgetInfophải là con trỏ đến cấu trúc XrSpatialContainerBoundsGetInfoEXT hợp lệ -
boundsphải là con trỏ đến cấu trúc XrSpatialContainerBoundsEXT
Mã trả về
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_SPATIAL_CONTAINER_CLOSED_EXTXR_ERROR_VALIDATION_FAILURE
Cấu trúc XrSpatialContainerBoundsGetInfoEXT là một cấu trúc đầu vào tồn tại cho mục đích mở rộng trong tương lai.
typedef struct XrSpatialContainerBoundsGetInfoEXT {
XrStructureType type;
const void* next;
} XrSpatialContainerBoundsGetInfoEXT;
Nội dung mô tả về thành viên
typelà XrStructureType của cấu trúc này.nextlàNULLhoặc con trỏ trỏ đến cấu trúc tiếp theo trong chuỗi cấu trúc. Không có cấu trúc nào như vậy được xác định trong OpenXR cốt lõi hoặc tiện ích này.
Cách sử dụng hợp lệ (Ngầm ẩn)
- Bạn phải bật tiện ích
XR_EXT_spatial_containertrước khi sử dụng XrSpatialContainerBoundsGetInfoEXT -
typephải làXR_TYPE_SPATIAL_CONTAINER_BOUNDS_GET_INFO_EXT -
nextphải làNULLhoặc một con trỏ hợp lệ đến cấu trúc tiếp theo trong chuỗi cấu trúc
Phép liệt kê XrSpatialContainerVolumeClippingEXT xác định hành vi cắt bớt âm lượng khác nhau cho vùng chứa không gian.
typedef enum XrSpatialContainerVolumeClippingEXT {
XR_SPATIAL_CONTAINER_VOLUME_CLIPPING_NONE_EXT = 0,
XR_SPATIAL_CONTAINER_VOLUME_CLIPPING_STRICT_EXT = 1,
XR_SPATIAL_CONTAINER_VOLUME_CLIPPING_MAX_ENUM_EXT = 0x7FFFFFFF
} XrSpatialContainerVolumeClippingEXT;
Nội dung mô tả enum
XR_SPATIAL_CONTAINER_VOLUME_CLIPPING_NONE_EXT
Không có nội dung nào bị cắt bớt theo thể tích giới hạn của vùng chứa không gian. Nội dung có thể hiển thị bên ngoài ranh giới của vùng chứa không gian.
XR_SPATIAL_CONTAINER_VOLUME_CLIPPING_STRICT_EXT
Nội dung bị cắt bớt nghiêm ngặt theo thể tích giới hạn của vùng chứa không gian.
Không có cách sử dụng kiểu liệt kê này trong tiện ích này. Hàm này được xác định để cho phép các tiện ích khác chỉ định hành vi cắt âm lượng mong muốn. Ví dụ: một ứng dụng có thể muốn vẽ nền cho một vùng chứa không gian có giới hạn. Bản đồ khối đơn sắc là một cách thuận tiện để chỉ định nền, tuy nhiên, bản đồ khối đơn sắc được định vị theo khái niệm ở vô cực, nằm ngoài vùng chứa.
Tính năng của hệ thống
Ứng dụng có thể kiểm tra các chức năng của hệ thống bằng cách liên kết cấu trúc XrSystemSpatialContainerPropertiesEXT với XrSystemProperties khi gọi xrGetSystemProperties .
typedef struct XrSystemSpatialContainerPropertiesEXT {
XrStructureType type;
void* next;
uint32_t maxSpatialContainerCount;
XrBool32 supportsBounded;
XrBool32 supportsImmersive;
} XrSystemSpatialContainerPropertiesEXT;
Nội dung mô tả về thành viên
typelà XrStructureType của cấu trúc này.nextlàNULLhoặc con trỏ trỏ đến cấu trúc tiếp theo trong chuỗi cấu trúc. Không có cấu trúc nào như vậy được xác định trong OpenXR cốt lõi hoặc tiện ích này.maxSpatialContainerCountlà số lượng vùng chứa không gian tối đa có thể tạo.supportsBoundedlà true nếu có thể giới hạn vùng chứa không gian.supportsImmersivelà true nếu vùng chứa không gian được phép hiển thị ở chế độ hiển thị tối đa.
Môi trường thời gian chạy hỗ trợ tiện ích này nên hỗ trợ một ứng dụng tạo nhiều vùng chứa không gian, chỉ bị giới hạn bởi việc phân bổ bộ nhớ. Môi trường thời gian chạy có thể có giới hạn khác về số lượng vùng chứa không gian hiển thị đồng thời. Không có cách nào để truy vấn số lượng vùng chứa được hiển thị đồng thời trong tiện ích này vì thời gian chạy có thể giới hạn từng ứng dụng dựa trên trạng thái của tất cả ứng dụng đang chạy. Giả định là các thiết bị có nhiều hạn chế và các thiết bị có ít hạn chế hơn sẽ có giới hạn khác nhau về số lượng vùng chứa được hiển thị đồng thời; các thiết bị có nhiều hạn chế có thể chỉ hỗ trợ hiển thị một vùng chứa không gian tại một thời điểm và các thiết bị có ít hạn chế hơn có thể hỗ trợ hiển thị đồng thời một số lượng lớn vùng chứa không gian, tuỳ thuộc vào giới hạn tính toán kết xuất.
Môi trường thời gian chạy hỗ trợ tiện ích này phải hỗ trợ ít nhất một trong các vùng chứa không gian có giới hạn hoặc vùng chứa không gian sống động.
Cách sử dụng hợp lệ (Ngầm ẩn)
- Bạn phải bật tiện ích
XR_EXT_spatial_containertrước khi sử dụng XrSystemSpatialContainerPropertiesEXT -
typephải làXR_TYPE_SYSTEM_SPATIAL_CONTAINER_PROPERTIES_EXT -
nextphải làNULLhoặc một con trỏ hợp lệ đến cấu trúc tiếp theo trong chuỗi cấu trúc
Hàm xrEnumerateSupportedSpatialContainerGraphicsPresentationsEXT trả về các phương thức trình bày đồ hoạ được hỗ trợ trên một hệ thống.
XrResult xrEnumerateSupportedSpatialContainerGraphicsPresentationsEXT(
XrInstance instance,
XrSystemId systemId,
uint32_t graphicsPresentationCapacityInput,
uint32_t* graphicsPresentationCountOutput,
XrSpatialContainerGraphicsPresentationEXT* graphicsPresentations);
Nội dung mô tả về tham số
instancelà XrInstance mà từ đósystemIdđược truy xuất.systemIdlàXrSystemIdđang được truy vấn.graphicsPresentationCapacityInputlà dung lượng của mảnggraphicsPresentationshoặc 0 để cho biết yêu cầu truy xuất dung lượng cần thiết.graphicsPresentationCountOutputlà con trỏ đến số lượng bản trình bày đồ hoạ được ghi hoặc con trỏ đến dung lượng bắt buộc trong trường hợpgraphicsPresentationCapacityInputlà 0.graphicsPresentationslà con trỏ đến một mảng các giá trị XrSpatialContainerGraphicsPresentationEXT, nhưng có thể rỗng nếugraphicsPresentationCapacityInputlà 0.- Hãy xem phần Tham số dung lượng bộ nhớ đệm để biết nội dung mô tả chi tiết về cách truy xuất kích thước
graphicsPresentationscần thiết.
Môi trường thời gian chạy phải luôn trả về nội dung vùng đệm giống hệt nhau từ bản liệt kê này cho systemId đã cho và cho thời gian hoạt động của thực thể.
Cách sử dụng hợp lệ (Ngầm ẩn)
- Tiện ích
XR_EXT_spatial_containerphải được bật trước khi gọi xrEnumerateSupportedSpatialContainerGraphicsPresentationsEXT -
instancephải là một tên người dùng XrInstance hợp lệ -
graphicsPresentationCountOutputphải là con trỏ đến giá trịuint32_t - Nếu
graphicsPresentationCapacityInputkhông phải là0, thìgraphicsPresentationsphải là một con trỏ đến một mảng các giá trịgraphicsPresentationCapacityInputXrSpatialContainerGraphicsPresentationEXT
Mã trả về
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_RUNTIME_FAILUREXR_ERROR_SIZE_INSUFFICIENTXR_ERROR_SYSTEM_INVALIDXR_ERROR_VALIDATION_FAILURE
Thay đổi đối với trạng thái phiên
Tính năng hỗ trợ vùng chứa không gian được bật cho một phiên bằng cách liên kết XrSessionCreateInfoSpatialContainersEXT khi gọi xrCreateSession .
typedef struct XrSessionCreateInfoSpatialContainersEXT {
XrStructureType type;
const void* next;
} XrSessionCreateInfoSpatialContainersEXT;
Khi bạn bật tính năng hỗ trợ vùng chứa không gian, XrSession sẽ hoạt động theo cách khác. Điều này là do khi sử dụng vùng chứa không gian, phiên không còn hiển thị nội dung hình ảnh trên(các) màn hình nữa, mà vùng chứa không gian sẽ làm việc đó. Do đó, khi tiện ích này được bật, một phiên sẽ có hiệu lực "không có giao diện người dùng". Không giống như các tiện ích không có giao diện người dùng khác, ứng dụng có thể gửi dữ liệu hình ảnh thông qua vùng chứa không gian.
Việc bật tính năng hỗ trợ vùng chứa không gian sẽ thay đổi các API OpenXR cốt lõi theo cách sau.
thời gian chạy: mất hệ thống hoặc thiết bị
thời gian chạy: mất hệ thống hoặc thiết bị
xrDestroySession
xrDestroySession
IDLE
(đang chạy)
KHÔNG HOẠT ĐỘNG...
xrGetSystem
xrCreateSession
xrGetSystem...
xrCreateInstance
xrCreateIn...
xrDestroySession
xrDestroySession
LOSS_PENDING
(không chạy)
LOSS_PENDING...
xrDestroyInstance
xrDestroyInstance
ứng dụng: tuỳ ý
chạy lại XR
ứng dụng: không bắt buộc...
Hình 19. Máy trạng thái phiên mới
- Phiên không bao giờ chuyển sang trạng thái
XR_SESSION_STATE_VISIBLE,XR_SESSION_STATE_FOCUSEDhoặcXR_SESSION_STATE_EXITING. Môi trường thời gian chạy không được đưa các sự kiện vào hàng đợi cho những trạng thái này. Các trạng thái này được thay thế bằng các sự kiện vùng chứa không gian riêng lẻ XrEventDataSpatialContainerVisibleChangedEXT , XrEventDataSpatialContainerInteractableChangedEXT và XrEventDataSpatialContainerClosedEXT . - Phiên cũng không bao giờ chuyển sang trạng thái
XR_SESSION_STATE_READY,XR_SESSION_STATE_SYNCHRONIZED,XR_SESSION_STATE_STOPPING. Môi trường thời gian chạy không được đưa các sự kiện vào hàng đợi cho những trạng thái này. Không có trạng thái thay thế cho các trạng thái này. - Thời gian chạy phải coi phiên là đang chạy khi phiên ở trạng thái
XR_SESSION_STATE_IDLE. - Môi trường thời gian chạy phải coi phiên là đang được lấy tiêu điểm khi phiên ở trạng thái
XR_SESSION_STATE_IDLEvà có ít nhất một vùng chứa không gian có thể tương tác. - Bạn không cần dùng các hàm xrBeginSession và xrEndSession nữa. Môi trường thời gian chạy phải trả về
XR_ERROR_SPATIAL_CONTAINERS_ENABLED_EXTkhi các hàm này được gọi. Các tiện ích khác có thể cung cấp các hàm thay thế cho những hàm này. - Hàm xrRequestExitSession cũng không còn cần thiết nữa. Môi trường thời gian chạy phải trả về
XR_ERROR_SPATIAL_CONTAINERS_ENABLED_EXTkhi hàm này được gọi. Các ứng dụng muốn thoát khỏi một phiên đang chạy có thể gọi xrRequestSpatialContainerVisibleEXT để ẩn vùng chứa và huỷ phiên sau khi tất cả vùng chứa không còn xuất hiện nữa. Các tiện ích sẽ đưa các sự kiện bổ sung vào hàng đợi khi phiên bắt đầu chạy hiện phải đưa các sự kiện đó vào hàng đợi sau khi tạo phiên. Các tiện ích như vậy được nêu bên dưới.
Sự kiện của tiện ích
XR_EXT_user_presence
XrEventDataUserPresenceChangedEXT
XR_META_boundary_visibility
XrEventDataBoundaryVisibilityChangedMETA
- Hàm xrLocateViews không hợp lệ để gọi cho phiên. Thời gian chạy phải trả về
XR_ERROR_SPATIAL_CONTAINERS_ENABLED_EXTtừ xrLocateViews . Các tiện ích khác có thể cung cấp cách tìm khung hiển thị cho một vùng chứa không gian cụ thể. - Hàm xrWaitFrame phải luôn đặt XrFrameState ::
shouldRenderthành false. Các tiện ích khác có thể cung cấp cách để biết liệu một vùng chứa không gian cụ thể có nên cập nhật các lớp thành phần hay không. - Hàm xrEndFrame không phải là cách hợp lệ để gửi các lớp kết hợp. Nếu một ứng dụng đặt XrFrameEndInfo ::
layerCountthành một giá trị khác 0, thì thời gian chạy phải trả vềXR_ERROR_VALIDATION_FAILURE. Các tiện ích khác có thể cung cấp cách gửi các lớp thành phần cho một vùng chứa không gian cụ thể. - Khi chuyển sang trạng thái
XR_SESSION_STATE_LOSS_PENDING, tất cả vùng chứa không gian cũng sẽ đóng lại. Môi trường thời gian chạy phải đưa sự kiện XrEventDataSpatialContainerClosedEXT vào hàng đợi cho mỗi vùng chứa không gian đang hoạt động trước khi đưa thay đổi về trạng thái phiên vào hàng đợi choXR_SESSION_STATE_LOSS_PENDING. - Hàm xrCreateSession không còn cần cấu trúc liên kết API đồ hoạ nữa. Các tiện ích khác có thể yêu cầu liên kết đồ hoạ, chẳng hạn như để vùng chứa không gian kết xuất bằng API đồ hoạ.
Hành vi trên hơi khác so với hành vi trong XR_MND_headless . Môi trường thời gian chạy không được bật hành vi phiên không có giao diện người dùng từ XR_MND_headless khi tính năng hỗ trợ vùng chứa không gian được bật cho phiên đó.
Lưu ý
Khi vùng chứa không gian được bật, một phiên chỉ chuyển đổi giữa hai trạng thái: XR_SESSION_STATE_IDLE (đang chạy) và XR_SESSION_STATE_LOSS_PENDING (không chạy). Do đó, thời gian chạy không còn trả về XR_ERROR_SESSION_RUNNING hoặc XR_ERROR_SESSION_NOT_RUNNING nữa. Thay vào đó, khi một phiên không chạy, thời gian chạy sẽ trả về XR_ERROR_SESSION_LOST hoặc XR_SESSION_LOSS_PENDING theo các quy tắc trong lõi OpenXR. Hơn nữa, xrBeginSession (hàm duy nhất trả về XR_ERROR_SESSION_RUNNING) giờ đây sẽ luôn trả về XR_ERROR_SPATIAL_CONTAINERS_ENABLED_EXT .
Cách sử dụng hợp lệ (Ngầm ẩn)
- Tiện ích
XR_EXT_spatial_containerphải được bật trước khi sử dụng XrSessionCreateInfoSpatialContainersEXT -
typephải làXR_TYPE_SESSION_CREATE_INFO_SPATIAL_CONTAINERS_EXT -
nextphải làNULLhoặc một con trỏ hợp lệ đến cấu trúc tiếp theo trong chuỗi cấu trúc
Các mục trong tệp kê khai Android
Môi trường thời gian chạy dựa trên AOSP có thể có hành vi tuỳ chỉnh dựa trên trạng thái vùng chứa không gian ban đầu được khởi động trước khi chạy bất kỳ mã ứng dụng nào. Ví dụ: thời gian chạy có thể thay đổi tài nguyên được phân bổ cho hoạt động, ảnh động khởi chạy hoặc màn hình chờ. Các thuộc tính sau đây được cung cấp cho mục đích này. Các thẻ này thay thế thẻ <category android:name="org.khronos.openxr.intent.category.IMMERSIVE_HMD" /> mà các ứng dụng dựa trên vùng chứa không gian không nên chỉ định, ngoại trừ khả năng tương thích với các môi trường thời gian chạy dựa trên AOSP trước đó.
<property android:name="org.khronos.openxr.PROPERTY_ACTIVITY_HINT_XR_SPATIAL_CONTAINER_USED_BOUNDS_MODES"
android:value="list of modes" />
Thuộc tính này gợi ý cho thời gian chạy về các chế độ ranh giới mà một hoạt động sử dụng. Theo mặc định, đây là danh sách trống, tức là không có gợi ý.
Các chuỗi sau đây là giá trị hợp lệ cho thuộc tính này. Nhiều giá trị được phân tách bằng | , chẳng hạn như "bounded|immersive" .
Giá trị
Mô tả
"2d_panel"
Hoạt động này hiển thị bằng khung hiển thị 2D của Android.
"bounded"
Hoạt động này sử dụng XR_SPATIAL_CONTAINER_BOUNDS_MODE_BOUNDED_EXT .
"immersive"
Hoạt động này sử dụng XR_SPATIAL_CONTAINER_BOUNDS_MODE_IMMERSIVE_EXT .
<property android:name="org.khronos.openxr.PROPERTY_ACTIVITY_HINT_XR_SPATIAL_CONTAINER_INITIAL_BOUNDS_MODE"
android:value="XR_SPATIAL_CONTAINER_INITIAL_BOUNDS_MODE_BOUNDED|
XR_SPATIAL_CONTAINER_INITIAL_BOUNDS_MODE_IMMERSIVE|
XR_SPATIAL_CONTAINER_INITIAL_BOUNDS_MODE_UNDEFINED" />
Thuộc tính này gợi ý cho thời gian chạy XrSpatialContainerBoundsModeEXT ban đầu của hoạt động khi hoạt động được tạo lần đầu tiên. Theo mặc định, đây là chuỗi XR_SPATIAL_CONTAINER_INITIAL_BOUNDS_MODE_UNDEFINED, nghĩa là không có gợi ý.
Môi trường thời gian chạy không được yêu cầu ứng dụng phải có các thuộc tính này để hoạt động theo thông số kỹ thuật này. Môi trường thời gian chạy không được thay đổi hành vi hiển thị của ứng dụng dựa trên các thuộc tính này. Tất cả siêu dữ liệu như vậy phải được chỉ định ở cấp <activity> hoặc cấp <application>. Nếu được chỉ định ở cấp <application>, thì thuộc tính này sẽ áp dụng cho tất cả hoạt động trong ứng dụng không chỉ định giá trị riêng.
Mã ví dụ
Đoạn mã sau đây cho biết cách sử dụng tiện ích này cho các trường hợp sử dụng chỉ nhận thức mà không có bất kỳ hoạt động kết xuất nào.
XrInstance instance; // Already initialized
// Create the session with spatial containers enabled
XrSession session;
XrSessionCreateInfoSpatialContainersEXT spatialContainerCreateInfo {
.type = XR_TYPE_SESSION_CREATE_INFO_SPATIAL_CONTAINERS_EXT,
};
XrSessionCreateInfo sessionCreateInfo {
.type = XR_TYPE_SESSION_CREATE_INFO,
.next = &spatialContainerCreateInfo, // Enable spatial containers
};
(void)sessionCreateInfo.systemId; // Other create fields set in usual way
CHK_XR(xrCreateSession(instance, &sessionCreateInfo, &session));
// Because spatial containers are enabled, the session is considered
// running. App is able to query perception data such as head poses and hand
// poses.
// Based on app logic or when a system lost event happens, destroy the
// session
CHK_XR(xrDestroySession(session));
Các loại đối tượng mới
Lệnh mới
- xrCreateSpatialContainerEXT
- xrCreateSpatialContainerSpaceEXT
- xrDestroySpatialContainerEXT
- xrEnumerateSupportedSpatialContainerGraphicsPresentationsEXT
- xrGetSpatialContainerBoundsEXT
- xrGetSpatialContainerStateEXT
- xrRequestSpatialContainerBoundsModeEXT
- xrRequestSpatialContainerVisibleEXT
Cấu trúc mới
- XrEventDataSpatialContainerBoundsChangedEXT
- XrEventDataSpatialContainerBoundsModeRequestDeniedEXT
- XrEventDataSpatialContainerClosedEXT
- XrEventDataSpatialContainerInteractableChangedEXT
- XrEventDataSpatialContainerVisibleChangedEXT
- XrEventDataSpatialContainerVisibleRequestDeniedEXT
- XrSpatialContainerBoundsEXT
- XrSpatialContainerBoundsGetInfoEXT
- XrSpatialContainerBoundsModeRequestInfoEXT
- XrSpatialContainerCreateInfoEXT
- XrSpatialContainerSpaceCreateInfoEXT
- XrSpatialContainerStateEXT
- XrSpatialContainerStateGetInfoEXT
- XrSpatialContainerVisibleRequestInfoEXT
Mở rộng XrSessionCreateInfo :
Mở rộng XrSystemProperties :
Enum mới
- XrSpatialContainerBoundsModeEXT
- XrSpatialContainerGraphicsPresentationEXT
- XrSpatialContainerVolumeClippingEXT
Hằng số enum mới
XR_EXT_SPATIAL_CONTAINER_EXTENSION_NAMEXR_EXT_spatial_container_SPEC_VERSIONMở rộng XrObjectType :
XR_OBJECT_TYPE_SPATIAL_CONTAINER_EXT
Mở rộng XrResult :
XR_ERROR_COMPATIBLE_SPATIAL_CONTAINER_MISSING_EXTXR_ERROR_SPATIAL_CONTAINERS_ENABLED_EXTXR_ERROR_SPATIAL_CONTAINERS_NOT_ENABLED_EXTXR_ERROR_SPATIAL_CONTAINER_CLOSED_EXT
Mở rộng XrStructureType :
XR_TYPE_EVENT_DATA_SPATIAL_CONTAINER_BOUNDS_CHANGED_EXTXR_TYPE_EVENT_DATA_SPATIAL_CONTAINER_BOUNDS_MODE_REQUEST_DENIED_EXTXR_TYPE_EVENT_DATA_SPATIAL_CONTAINER_CLOSED_EXTXR_TYPE_EVENT_DATA_SPATIAL_CONTAINER_INTERACTABLE_CHANGED_EXTXR_TYPE_EVENT_DATA_SPATIAL_CONTAINER_VISIBLE_CHANGED_EXTXR_TYPE_EVENT_DATA_SPATIAL_CONTAINER_VISIBLE_REQUEST_DENIED_EXTXR_TYPE_SESSION_CREATE_INFO_SPATIAL_CONTAINERS_EXTXR_TYPE_SPATIAL_CONTAINER_BOUNDS_EXTXR_TYPE_SPATIAL_CONTAINER_BOUNDS_GET_INFO_EXTXR_TYPE_SPATIAL_CONTAINER_BOUNDS_MODE_REQUEST_INFO_EXTXR_TYPE_SPATIAL_CONTAINER_CREATE_INFO_EXTXR_TYPE_SPATIAL_CONTAINER_SPACE_CREATE_INFO_EXTXR_TYPE_SPATIAL_CONTAINER_STATE_EXTXR_TYPE_SPATIAL_CONTAINER_STATE_GET_INFO_EXTXR_TYPE_SPATIAL_CONTAINER_VISIBLE_REQUEST_INFO_EXTXR_TYPE_SYSTEM_SPATIAL_CONTAINER_PROPERTIES_EXT
Vấn đề
Làm cách nào để xử lý nhiều yêu cầu hiển thị chưa được giải quyết? Ứng dụng có nên nhận được một thay đổi/từ chối hay nhiều thay đổi/từ chối? Câu trả lời có thể khác nếu các lệnh gọi nằm trên nhiều khung hình. Câu trả lời cũng có thể khác nếu nhiều yêu cầu dẫn đến một thao tác không hoạt động, tức là yêu cầu một vùng chứa không gian hiển thị, sau đó không hiển thị cho một vùng chứa bắt đầu không hiển thị.
- Đã giải quyết. Các lựa chọn khác nhau cho sự kiện thay đổi và sự kiện bị từ chối. Yêu cầu Noop không đưa sự kiện thay đổi vào hàng đợi, điều này chỉ tạo ra sự can thiệp cho nhà phát triển ứng dụng và dễ dàng cho thời gian chạy để lọc ra. Nếu nhiều yêu cầu hiển thị bị từ chối, thì mỗi môi trường thời gian chạy phải tạo một sự kiện bị từ chối tương ứng.
Tiện ích tự động hoá việc tuân thủ dự kiến sẽ được xác định như thế nào để CTS vẫn có thể kiểm thử tất cả văn bản thông số kỹ thuật không bắt buộc cho các hành vi chính sách?
- Đã giải quyết. Tiện ích thử nghiệm riêng biệt. Sẽ có một thời gian chạy tiện ích thử nghiệm chỉ dành cho CTS, cho phép CTS kiểm soát tất cả chính sách hệ thống.
Chúng ta có cần một sự kiện khi vị trí của vùng chứa không gian thay đổi không?
- Đã giải quyết. Không. Không gian vùng chứa không gian không bị khoá theo thế giới và các không gian khác như vậy, chẳng hạn như
XR_REFERENCE_SPACE_TYPE_VIEW, không có sự kiện khi thay đổi.
- Đã giải quyết. Không. Không gian vùng chứa không gian không bị khoá theo thế giới và các không gian khác như vậy, chẳng hạn như
xrSyncActions hoạt động như thế nào nếu có nhiều vùng chứa không gian?
- Đã giải quyết. Không cần thay đổi. xrSyncActions sẽ áp dụng cho tất cả vùng chứa không gian trong phiên. Nếu muốn chuyển hướng các hành động nhập đến một vùng chứa không gian cụ thể, ứng dụng có thể xem xét trạng thái có thể tương tác của từng vùng chứa để chọn vùng chứa nào là mục tiêu hợp lệ. Nếu một ứng dụng chỉ muốn đồng bộ hoá trạng thái hành động đầu vào cho một vùng chứa không gian duy nhất, thì ứng dụng đó sẽ cần thêm một tiện ích bổ sung. Tuy nhiên, chúng tôi dự kiến sẽ tập trung vào một tiện ích cho phép các ứng dụng hoàn toàn dựa trên sự kiện và tránh việc phải gọi xrSyncActions trong vòng lặp khung.
Các ứng dụng không thường xuyên cập nhật xử lý dữ liệu đầu vào như thế nào?
- Đã giải quyết. Không cần thay đổi. Mặc dù có giá trị đối với EXT_spatial_container, nhưng thuộc tính này cũng có giá trị bên ngoài vùng chứa không gian. Bạn có thể xử lý vấn đề này thông qua một tiện ích kênh sự kiện và tiện ích này hoạt động trong cả hai trường hợp. Đối với vùng chứa không gian, chúng tôi sẽ bổ sung các cách lọc sự kiện cho một vùng chứa không gian.
Chúng ta có cần chờ để điều tiết/kiểm soát thời gian của vòng lặp đầu vào cho các ứng dụng có vòng lặp đầu vào và kết xuất tách biệt không?
- Đã giải quyết. Không cần thay đổi. Việc này dự kiến sẽ được xử lý thông qua kênh sự kiện và các tiện ích yêu cầu hiện tại. Tiện ích yêu cầu hiển thị cho phép kết xuất dựa trên sự kiện và tách biệt khỏi vòng lặp khung.
Vùng chứa không gian có thể lấy tư thế của nó so với các vùng chứa không gian khác không? Những suy nghĩ chính ở đây: Chúng ta có trường hợp sử dụng cho việc này không? Và nếu có, thì không gian vùng chứa không gian kết nối với LOCAL như thế nào?
- Đã giải quyết. Có. Bạn đã có thể thực hiện việc này cho các vùng chứa không gian trong cùng một phiên bằng cách chuyển qua
XR_REFERENCE_SPACE_TYPE_VIEWvà hỗ trợ nội dung phụ thuộc vào chế độ xem. Để chia sẻ tư thế của vùng chứa không gian giữa các phiên (như với một quy trình khác), bạn nên tận dụngXR_EXT_spatial_anchorcũng như các mẫu chia sẻ và lưu trữ hiện có của lớp này.
- Đã giải quyết. Có. Bạn đã có thể thực hiện việc này cho các vùng chứa không gian trong cùng một phiên bằng cách chuyển qua
Không gian của vùng chứa không gian có thể định vị được nếu không hiển thị không?
- Đã giải quyết. Không. Không thể định vị không gian của vùng chứa không gian khi vùng chứa không gian không hiển thị. Điều này có nghĩa là ứng dụng không có âm thanh không gian và cũng không thể "làm nóng" nội dung phụ thuộc vào chế độ xem khi spatial_container không hiển thị. Cả hai đều ổn vì khi không nhìn thấy vùng chứa không gian, ứng dụng sẽ dừng mọi tải CPU/GPU được dùng cho vùng chứa không gian đó.
Không gian vùng chứa không gian dự kiến sẽ được đặt ở đâu trong vùng chứa không gian? Các đề xuất là điểm trung tâm hoặc điểm tối thiểu (minX, minY, minZ).
- Đã giải quyết. Ở giữa. Không có vị trí nào không di chuyển theo hầu hết các cách mà trải nghiệm người dùng về việc đổi kích thước vùng chứa không gian dự kiến (di chuyển các cạnh). Trung tâm thường được dùng trong các phần khác của OpenXR. Chúng tôi không căn chỉnh với các cửa sổ trong điện toán 2D (sử dụng toạ độ tối thiểu) vì trình xem mô hình 3D thường không tuân theo quy ước này.
Khi nào thì thời gian chạy dự kiến sẽ tạo tài nguyên bên dưới vùng chứa không gian? Điều này đôi khi liên quan đến IPC với các dịch vụ hệ thống.
- Đã giải quyết. Đồng bộ trong
xrCreateSpatialContainerEXT. Mặc dù có thể có IPC liên quan, nhưng việc tạo vùng chứa thực tế thường được cho là không tốn kém. Một số nhà cung cấp có mutex chung để quản lý vùng chứa, nhưng thường thì bạn không phải chờ đợi lâu. Vấn đề về tranh chấp mutex là lỗi dành riêng cho nhà cung cấp và dự kiến sẽ được từng nhà cung cấp giải quyết.
- Đã giải quyết. Đồng bộ trong
Chúng ta có cần một tín hiệu cho biết XrSession sẽ tạo vùng chứa không gian và do đó không hỗ trợ đường dẫn kết xuất cũ không?
- Đã giải quyết. Có. Chúng tôi thay đổi máy trạng thái phiên theo cách cơ bản.
Danh sách phiên bản
Bản sửa đổi 1, ngày 6 tháng 8 năm 2026 (Jared Finder, Google)
- Nội dung mô tả ban đầu về tiện ích