XR_EXT_spatial_container
Name String
XR_EXT_spatial_container
Uzantı Türü
Örnek uzantısı
Kayıtlı Dahili Numara
811
Düzeltme
1
Onay Durumu
Onaylanmadı
Uzantı ve Sürüm Bağımlılıkları
Son Değiştirilme Tarihi
2026-08-06
IP Durumu
Bilinen bir fikri mülkiyet hak talebi yok.
Katkıda bulunanlar
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
Genel Bakış
Bu uzantı, masaüstü 2D pencere sistemlerindeki "pencereler" kavramına benzer şekilde, "uzamsal kapsayıcılar" adı verilen yeni bir görüntülenebilir öğe sınıfı tanımlar.
OpenXR 1.x'te uygulamalar, kullanıcının gördüğü her şeyi ve bunun kullanıcının gerçek veya sanal ortamıyla nasıl harmanlandığını özel olarak kontrol eder. Çalışma zamanları, kullanıcı güvenliğini sağlamak için gösterilen içerikte yalnızca küçük değişiklikler yapar. Bu uygulama modeli, kullanıcıyı tek bir deneyime dahil etmek için idealdir ancak aynı anda birden fazla deneyim sunamaz. Özellikle AR ve karma gerçeklik ortamlarında kullanıcılar genellikle aynı anda birden fazla farklı uygulamayı deneyimlemek ister.
Uzamsal kapsayıcılar, 3D'ye genişletilmiş pencereler gibidir. Kullanıcı, aynı anda birden fazla uzamsal kapsayıcı görebilir ve bunların bir alt kümesine giriş sağlar. Görünür uzamsal kapsayıcılar farklı uygulamalara ait olabilir ve çalışma zamanları, kullanıcı adına boyutlarını ve yerleşimlerini yönetebilir.
Bu uzantı, mevcut etkileyici OpenXR deneyimlerine ek olarak bu yeni mekansal sınırlı deneyim türlerini de destekler. Sınırlı OpenXR deneyimlerinde, hafif 3D içeriklere (küçük derinlik farkları olan düz paneller) veya tamamen 3D içerik barındıran hacimlere izin verilir. Sürükleyici OpenXR deneyimleri, OpenXR 1.0'dan beri desteklenen mevcut tam ekran sürükleyici uygulamalardır. Uygulamalar, isterlerse iki içerik türü arasında geçiş yapabilir.
Bu uzantı, bir uygulamanın içeriğini oluşturmak için herhangi bir yöntem tanımlamaz. İçeriğin nasıl çizileceği diğer uzantılarda tanımlanır: XR_EXT_spatial_container_self_rendering .
Uzamsal kapsayıcıları kullanma
XrSpatialContainerEXT, uzamsal kapsayıcıyı temsil eden bir herkese açık kullanıcı adıdır.
XR_DEFINE_HANDLE(XrSpatialContainerEXT)
Uygulamalar, aşağıdaki adımları uygulayarak uzamsal container aracılığıyla oluşturulmaya başlar:
- xrCreateSpatialContainerEXT ile uzamsal kapsayıcı oluşturun.
- İlk sunum için kapsayıcıdaki herhangi bir durumu (ör. sınır modu) değiştirin.
- Çalışma zamanından, kapsayıcıyı xrRequestSpatialContainerVisibleEXT ile göstermesini isteyin.
- Çalışma zamanının kapsayıcıyı göstermeye hazır olmasını bekleyin. Çalışma zamanı hazır olduğunda
visible,XR_TRUEolarak ayarlanmış bir XrEventDataSpatialContainerVisibleChangedEXT etkinliğini sıraya alır. - Üç boyutlu kapsayıcı için oluşturma işlemini başlatın.
Uzamsal kapsayıcıyı kaldırma işlemi ise şu şekildedir:
- Çalışma zamanından, xrRequestSpatialContainerVisibleEXT ile kapsayıcıyı gizlemesini isteyin.
- Çalışma zamanının kapsayıcıyı gizleme işlemini tamamlamasını bekleyin. Çalışma zamanı, kapsayıcıyı tamamen gizlediğinde
visible,XR_FALSEolarak ayarlanmış bir XrEventDataSpatialContainerVisibleChangedEXT etkinliğini sıraya alır. - Uzamsal kapsayıcı için oluşturma işlemini sonlandırır.
- xrDestroySpatialContainerEXT ile kapsayıcıyı yok edin.
Not
Bu uzantı, görünürlük ve odak yönetimini ayrı ayrı uzamsal kapsayıcılara devredecek şekilde tasarlanmıştır. Oturum bir bütün olarak artık tek bir görünür veya odaklanmış nesneyi temsil etmediğinden standart OpenXR durum makinesinden (READY, SYNCHRONIZED, VISIBLE, FOCUSED) geçmez. Bunun yerine oturum, etkin kullanım ömrü boyunca XR_SESSION_STATE_IDLE modunda kalır ve Oturum durumunda yapılan değişiklikler bölümündeki kurallar, temel OpenXR işlemlerinin bu modla nasıl eşleştiğini belirtir.
Üç boyutlu kapsayıcı oluşturma
xrCreateSpatialContainerEXT işlevi, yeni bir uzamsal kapsayıcı oluşturur.
XrResult xrCreateSpatialContainerEXT(
XrSession session,
const XrSpatialContainerCreateInfoEXT* createInfo,
XrSpatialContainerEXT* spatialContainer);
Parametre Açıklamaları
session, uzamsal kapsayıcıyı oluşturan XrSession'dır.createInfo, uzamsal kapsayıcıyı oluşturmak için parametreler içeren bir XrSpatialContainerCreateInfoEXT işaretçisidir.spatialContainer, oluşturulan XrSpatialContainerEXT'nin döndürüldüğü bir herkese açık kullanıcı adının işaretçisidir.
Yeni oluşturulan bir XrSpatialContainerEXT görünür ve etkileşim kurulabilir olmamalı ve XR_SPATIAL_CONTAINER_BOUNDS_MODE_BOUNDED_EXT sınır modunda olmalıdır. Yoğun içerik modunda başlatılacak bir uzamsal kapsayıcı isteyen uygulamalar, uzamsal kapsayıcı gösterme isteğinde bulunmadan önce XR_SPATIAL_CONTAINER_BOUNDS_MODE_IMMERSIVE_EXT sınır modunu talep edebilir.
XrSpatialContainerCreateInfoEXT :: suggestedBounds öğesinin herhangi bir boyutu negatif, sonsuz veya sayı değilse çalışma zamanları XR_ERROR_VALIDATION_FAILURE değerini döndürmelidir (zorunlu). Bir uygulama, XrSystemSpatialContainerPropertiesEXT :: maxSpatialContainerCount içinde belirtilenden daha fazla uzamsal kapsayıcı oluşturmaya çalışırsa çalışma zamanları XR_ERROR_LIMIT_REACHED değerini döndürmelidir. Bu oturum için uzamsal kapsayıcılar etkinleştirilmediyse çalışma zamanları XR_ERROR_SPATIAL_CONTAINERS_NOT_ENABLED_EXT değerini döndürmelidir.
Geçerli Kullanım (Dolaylı)
-
XR_EXT_spatial_containeruzantısı, xrCreateSpatialContainerEXT çağrılmadan önce etkinleştirilmelidir. -
sessiongeçerli bir XrSession herkese açık kullanıcı adı olmalıdır -
createInfo, geçerli bir XrSpatialContainerCreateInfoEXT yapısına işaret eden bir işaretçi olmalıdır. -
spatialContainer, bir XrSpatialContainerEXT herkese açık adına işaretçi olmalıdır.
Dönüş Kodları
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, uzamsal kapsayıcı oluşturmak için xrCreateSpatialContainerEXT'ye iletilir.
typedef struct XrSpatialContainerCreateInfoEXT {
XrStructureType type;
const void* next;
XrSpatialContainerGraphicsPresentationEXT graphicsPresentation;
XrExtent3Df suggestedBounds;
} XrSpatialContainerCreateInfoEXT;
Üye Açıklaması
type, bu yapının XrStructureType değeridir.next,NULLveya bir yapı zincirindeki sonraki yapıya işaret eden bir göstergedir. Temel OpenXR'da veya bu uzantıda bu tür yapılar tanımlanmamıştır.graphicsPresentation, bu uzamsal kapsayıcının grafikleri nasıl sunduğunu açıklayan bir XrSpatialContainerGraphicsPresentationEXT'tir.suggestedBounds, uzamsal kapsayıcının istenen boyutlarını metre cinsinden açıklayan bir XrExtent3Df'dir.
Boyut tercihi olmayan bir uygulama, suggestedBounds değerini {0, 0, 0} olarak ayarlayabilir. Çalışma zamanı, istenen suggestedBounds değerini yoksayabilir.
Uzamsal kapsayıcıların yönlendirilmiş kutular dışındaki şekillerle sınırlandırılmasına olanak tanıyan bir çalışma zamanı, diğer şekillerin etrafında sınırlayıcı kutu olarak suggestedBounds'u kullanmalıdır. Yönlendirilmiş kutular, en yaygın sınırlayıcı şekil olarak tasarlanmıştır.
Geçerli Kullanım (Dolaylı)
- XrSpatialContainerCreateInfoEXT kullanılmadan önce
XR_EXT_spatial_containeruzantısı etkinleştirilmelidir. -
typeXR_TYPE_SPATIAL_CONTAINER_CREATE_INFO_EXTolmalıdır -
next,NULLveya yapı zincirindeki bir sonraki yapıya geçerli bir işaretçi olmalıdır. -
graphicsPresentationgeçerli bir XrSpatialContainerGraphicsPresentationEXT değeri olmalıdır
Bir uzamsal kapsayıcı artık kullanılamadığında çalışma zamanları bir XrEventDataSpatialContainerClosedEXT etkinliğini sıraya almalıdır.
typedef struct XrEventDataSpatialContainerClosedEXT {
XrStructureType type;
const void* next;
XrSpatialContainerEXT spatialContainer;
} XrEventDataSpatialContainerClosedEXT;
Üye Açıklaması
type, bu yapının XrStructureType değeridir.next,NULLveya bir yapı zincirindeki sonraki yapıya işaret eden bir göstergedir. Temel OpenXR'da veya bu uzantıda bu tür yapılar tanımlanmamıştır.spatialContainer, bu etkinliğin ait olduğu XrSpatialContainerEXT'dir.
XrEventDataSpatialContainerClosedEXT etkinliğinin alınması, çalışma zamanının artık uzamsal kapsayıcı gösteremediğini gösterir. Örneğin, kullanıcı "kapat" düğmesini tıkladığında veya oturum XR_SESSION_STATE_LOSS_PENDING durumuna girdiğinde bu durum gerçekleşir.
XrEventDataSpatialContainerClosedEXT etkinliğini aldıktan sonra uygulama, ilgili uzamsal kapsayıcıyı kullanmayı bırakmalı, oluşturma döngüsü gibi ilişkili durumları kaldırmalı ve kapsayıcıyı silmelidir. Çalışma zamanları, xrDestroySpatialContainerEXT dışındaki tüm işlevlerden XR_ERROR_SPATIAL_CONTAINER_CLOSED_EXT döndürmelidir.
Çalışma zamanı bir kapatma etkinliğini sıraya aldığında uzamsal kapsayıcı görünür durumdaysa çalışma zamanları önce kapsayıcıyı görünür olmayacak şekilde değiştirmeli ve bir XrEventDataSpatialContainerVisibleChangedEXT etkinliğini sıraya almalıdır.
Geçerli Kullanım (Dolaylı)
- XrEventDataSpatialContainerClosedEXT kullanılmadan önce
XR_EXT_spatial_containeruzantısı etkinleştirilmelidir -
typeXR_TYPE_EVENT_DATA_SPATIAL_CONTAINER_CLOSED_EXTolmalıdır -
next,NULLveya yapı zincirindeki bir sonraki yapıya geçerli bir işaretçi olmalıdır.
xrDestroySpatialContainerEXT işlevi, mevcut bir uzamsal kapsayıcıyı yok eder.
XrResult xrDestroySpatialContainerEXT(
XrSpatialContainerEXT spatialContainer);
Parametre Açıklamaları
spatialContainer, daha önce xrCreateSpatialContainerEXT tarafından oluşturulmuş bir XrSpatialContainerEXT'tir.
Üç boyutlu kapsayıcı yok edildikten sonra çalışma zamanları, kapsayıcının içeriğini artık göstermemeli ve kapsayıcıyla ilgili başka etkinlikleri sıraya almamalıdır.
Uygulamalar, görünür durumdaki uzamsal kapsayıcıları yok etmemelidir. Aksi takdirde grafik kusurları oluşabilir. Bunun yerine uygulamalar, xrRequestSpatialContainerVisibleEXT ile uzamsal kapsayıcıyı gizleme isteğinde bulunmalı, XrEventDataSpatialContainerVisibleChangedEXT etkinliğini beklemeli ve ardından kapsayıcıyı yok etmelidir.
Geçerli Kullanım (Dolaylı)
-
XR_EXT_spatial_containeruzantısı, xrDestroySpatialContainerEXT çağrılmadan önce etkinleştirilmelidir. -
spatialContainergeçerli bir XrSpatialContainerEXT herkese açık kullanıcı adı olmalıdır
İleti Dizisi Güvenliği
spatialContainerve tüm alt herkese açık kullanıcı adlarına erişim harici olarak senkronize edilmelidir.
Dönüş Kodları
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_RUNTIME_FAILURE
Uzamsal kapsayıcı alanı
xrCreateSpatialContainerSpaceEXT işlevi, belirli bir uzamsal kapsayıcının uzamsal kapsayıcı alanı için bir XrSpace herkese açık kullanıcı adı oluşturur.
XrResult xrCreateSpatialContainerSpaceEXT(
XrSession session,
const XrSpatialContainerSpaceCreateInfoEXT* createInfo,
XrSpace* space);
Parametre Açıklamaları
session, alanı oluşturan XrSession'dır.createInfo, alanı oluşturmak için parametreler içeren bir XrSpatialContainerSpaceCreateInfoEXT işaretçisidir.space, oluşturulan XrSpace'in döndürüldüğü bir herkese açık kullanıcı adına işaretçidir.
Belirli bir uzamsal kapsayıcının "uzamsal kapsayıcı alanı", orijini bu uzamsal kapsayıcının sınırlarının merkezinde olan bir koordinat sistemidir. Bu alan genellikle xrLocateSpace gibi işlevler için temel alan olarak kullanılır.
+X, kapsayıcının sağ yüzünü, +Y, kapsayıcının üst yüzünü ve +Z, kapsayıcının ön yüzünü gösterir. Örneğin, bir kapsayıcı yer çekimine göre hizalanmışsa ve izleyicinin önündeyse ve izleyici LOCAL alanına göre kimlik pozundaysa çalışma zamanları, kapsayıcı alanını LOCAL alanına göre kimlik yönüyle yönlendirmelidir . Çalışma zamanları, bir kapsayıcı alanı görünür hale geldiğinde kapsayıcı alanının pozunu LOCAL alanına göre herhangi bir poza ayarlayabilir.
ext spatial container space convention
18. şekil. Üç boyutlu kapsayıcı alanının eksen kuralı
Üç boyutlu kapsayıcı alanı, dünya kilitli olmayan bir başlangıç noktasıdır. Yoğun içerik modundayken dünya kilitli kaynak isteyen uygulamalar, XR_REFERENCE_SPACE_TYPE_LOCAL gibi dünya kilitli alan kullanabilir.
Çalışma zamanları, genellikle kullanıcının uzamsal kapsayıcıyı farklı bir konuma veya rotasyona taşımasını desteklemek için uzamsal kapsayıcı alanının pozunu dilediği zaman değiştirebilir. Çalışma zamanları, XR_SPATIAL_CONTAINER_BOUNDS_MODE_BOUNDED_EXT ve XR_SPATIAL_CONTAINER_BOUNDS_MODE_IMMERSIVE_EXT sınır modları arasında geçiş yaparken de pozu değiştirebilir.
Uzamsal kapsayıcı alanı, ait olduğu uzamsal kapsayıcı xrDestroySpatialContainerEXT ile yok edilse bile geçerli bir tutma yeri olmaya devam etmelidir. Bir uzamsal kapsayıcı görünür değilken veya yok edilmişken uzamsal kapsayıcı alanı, diğer alanlara göre bulunamaz olmalıdır. XrSpaceLocation :: locationFlags ve XrViewState ::viewStateFlags 0 olur.
Geçerli Kullanım (Dolaylı)
-
XR_EXT_spatial_containeruzantısı, xrCreateSpatialContainerSpaceEXT çağrılmadan önce etkinleştirilmelidir. -
sessiongeçerli bir XrSession herkese açık kullanıcı adı olmalıdır -
createInfo, geçerli bir XrSpatialContainerSpaceCreateInfoEXT yapısına işaret eden bir işaretçi olmalıdır -
space, bir XrSpace tutamacına işaretçi olmalıdır.
Dönüş Kodları
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, XrSpace herkese açık kullanıcı adı oluşturmak için xrCreateSpatialContainerSpaceEXT ile birlikte kullanılır.
typedef struct XrSpatialContainerSpaceCreateInfoEXT {
XrStructureType type;
const void* next;
XrSpatialContainerEXT spatialContainer;
} XrSpatialContainerSpaceCreateInfoEXT;
Üye Açıklaması
type, bu yapının XrStructureType değeridir.next,NULLveya bir yapı zincirindeki sonraki yapıya işaret eden bir göstergedir. Temel OpenXR'da veya bu uzantıda bu tür yapılar tanımlanmamıştır.spatialContainer, alan oluşturulacak bir XrSpatialContainerEXT'dir.
Geçerli Kullanım (Dolaylı)
- XrSpatialContainerSpaceCreateInfoEXT kullanılmadan önce
XR_EXT_spatial_containeruzantısı etkinleştirilmelidir. -
typeXR_TYPE_SPATIAL_CONTAINER_SPACE_CREATE_INFO_EXTolmalıdır -
next,NULLveya yapı zincirindeki bir sonraki yapıya geçerli bir işaretçi olmalıdır. -
spatialContainergeçerli bir XrSpatialContainerEXT herkese açık kullanıcı adı olmalıdır
Uzamsal kapsayıcı sunma
Üç boyutlu kapsayıcı içeriklerinin görüntülenmek üzere OpenXR'a gönderilmesi diğer uzantılar tarafından gerçekleştirilir: XR_EXT_spatial_container_self_rendering .
Bu uzantı, diğer uzantıların uzamsal kapsayıcı için grafik sunum yöntemini belirtmesine olanak tanımak amacıyla XrSpatialContainerGraphicsPresentationEXT enum'unu tanımlar.
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;
Enum Açıklaması
XR_SPATIAL_CONTAINER_GRAPHICS_PRESENTATION_SELF_RENDERING_EXT
Üç boyutlu kapsayıcı, OpenXR oluşturma katmanlarını kullanır (XR_EXT_spatial_container_self_rendering uzantısı tarafından eklenir)
XR_SPATIAL_CONTAINER_GRAPHICS_PRESENTATION_CONFORMANCE_AUTOMATION_EXT
Uzamsal kapsayıcı, uygunluk testi için oluşturulur ve oluşturma yolu yoktur (XR_EXT_spatial_container_conformance_automation uzantısı tarafından eklenir).
XR_SPATIAL_CONTAINER_GRAPHICS_PRESENTATION_SYSTEM_RENDERING_EXTX1
Üç boyutlu kapsayıcı, OpenXR sistem oluşturmayı kullanır (XR_EXTX1_system_renderer uzantısı tarafından eklendi)
Uzamsal kapsayıcı durumu
Üç boyutlu kapsayıcı durumu, hem uygulama isteklerine hem de kullanıcının ihtiyaçlarına göre çalışma zamanları tarafından yönetilir. Bu nedenle, uzamsal kapsayıcı durumunun her yönü aşağıdakileri belgeler:
- Çalışma zamanlarının, uzamsal kapsayıcı durumunu değiştirmesine izin verildiğinde. Çoğu uzamsal kapsayıcı durumu için çalışma zamanları, durumu istediği zaman değiştirebilir.
- Uygulamaların durum değişikliği isteme şekli. Çalışma zamanları, uygun olduğunu düşünene kadar herhangi bir isteği erteleyebilir. Çalışma zamanları, bir istek ertelendiğinde etkinlikleri sıraya koymaz. Bu nedenle uygulamalar, alakasız mantık için böyle bir etkinliği beklememelidir.
- Mekansal kapsayıcı durumu değiştiğinde hangi etkinlik çalışma zamanlarının sıraya alınacağı. Çalışma zamanları, uygulama tarafından istenen değişiklikler ve çalışma zamanı tarafından başlatılan değişiklikler de dahil olmak üzere tüm değişiklikler için etkinlikleri sıraya alır. Çalışma zamanları, değişiklik göstermeyen durum değişikliği etkinliklerini sıraya almamalıdır. Örneğin, bir uygulama bir kapsayıcıyı gizlemek için hızlı bir şekilde iki istekte bulunursa bu etkinlikler sıraya alınmamalıdır.
- Uygulama değişikliği isteği reddedildiğinde etkinlik çalışma zamanlarının sıraya aldığı öğeler. Çalışma zamanları, genellikle yüksek kaliteli bir kullanıcı deneyimi sağlamayla ilgili sistem politikası nedeniyle herhangi bir isteği reddedebilir.
xrGetSpatialContainerStateEXT işlevi, uzamsal kapsayıcının mevcut durumunu sorgular.
XrResult xrGetSpatialContainerStateEXT(
XrSpatialContainerEXT spatialContainer,
const XrSpatialContainerStateGetInfoEXT* getInfo,
XrSpatialContainerStateEXT* state);
Parametre Açıklamaları
spatialContainer, sorgulanacak XrSpatialContainerEXT'dir.getInfo, uzamsal kapsayıcının durumunu almak için kullanılan bilgileri içeren XrSpatialContainerStateGetInfoEXT'tir.state, uzamsal kapsayıcı durumunun döndürüldüğü XrSpatialContainerStateEXT'ye işaret eder.
Geçerli Kullanım (Dolaylı)
-
XR_EXT_spatial_containeruzantısı, xrGetSpatialContainerStateEXT çağrılmadan önce etkinleştirilmelidir. -
spatialContainergeçerli bir XrSpatialContainerEXT herkese açık kullanıcı adı olmalıdır -
getInfo,NULLdeğilsegetInfo, geçerli bir XrSpatialContainerStateGetInfoEXT yapısına işaretçi olmalıdır. -
state, bir XrSpatialContainerStateEXT yapısına işaretçi olmalıdır
Dönüş Kodları
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, XrSpatialContainerStateEXT sorgulamak için xrGetSpatialContainerStateEXT ile birlikte kullanılır.
typedef struct XrSpatialContainerStateGetInfoEXT {
XrStructureType type;
const void* next;
} XrSpatialContainerStateGetInfoEXT;
Üye Açıklaması
type, bu yapının XrStructureType değeridir.next,NULLveya bir yapı zincirindeki sonraki yapıya işaret eden bir göstergedir. Temel OpenXR'da veya bu uzantıda bu tür yapılar tanımlanmamıştır.
Geçerli Kullanım (Dolaylı)
- XrSpatialContainerStateGetInfoEXT kullanılmadan önce
XR_EXT_spatial_containeruzantısı etkinleştirilmiş olmalıdır. -
typeXR_TYPE_SPATIAL_CONTAINER_STATE_GET_INFO_EXTolmalıdır -
next,NULLveya yapı zincirindeki bir sonraki yapıya geçerli bir işaretçi olmalıdır.
typedef struct XrSpatialContainerStateEXT {
XrStructureType type;
void* next;
XrBool32 visible;
XrBool32 interactable;
XrSpatialContainerBoundsModeEXT boundsMode;
} XrSpatialContainerStateEXT;
Üye Açıklaması
type, bu yapının XrStructureType değeridir.next,NULLveya bir yapı zincirindeki sonraki yapıya işaret eden bir göstergedir. Temel OpenXR'da veya bu uzantıda bu tür yapılar tanımlanmamıştır.visible, uzamsal kapsayıcının görünür olup olmadığını gösterir.interactable, bir uzamsal kapsayıcının şu anda herhangi bir giriş türünü alıp alamayacağını gösterir. Masaüstü 2D pencere sistemlerindeki "odak" özelliğine benzer. Aralarındaki fark, birden fazla uzamsal kapsayıcının aynı anda etkileşime geçirilebilir olabilmesidir.boundsMode, uzamsal kapsayıcının geçerli XrSpatialContainerBoundsModeEXT değeridir.
Uzamsal kapsayıcının durumunda yapılan değişiklikler etkinlikler aracılığıyla iletilir.
Alan Değiştirildi etkinliği
visible
XrEventDataSpatialContainerVisibleChangedEXT
interactable
XrEventDataSpatialContainerInteractableChangedEXT
boundsMode
XrEventDataSpatialContainerBoundsChangedEXT
Geçerli Kullanım (Dolaylı)
- XrSpatialContainerStateEXT kullanılmadan önce
XR_EXT_spatial_containeruzantısı etkinleştirilmelidir -
typeXR_TYPE_SPATIAL_CONTAINER_STATE_EXTolmalıdır -
next,NULLveya yapı zincirindeki bir sonraki yapıya geçerli bir işaretçi olmalıdır.
Görünürlük
Uygulamalar, xrRequestSpatialContainerVisibleEXT ile üç boyutlu kapsayıcıyı göstermeyi veya gizlemeyi ister.
XrResult xrRequestSpatialContainerVisibleEXT(
XrSpatialContainerEXT spatialContainer,
const XrSpatialContainerVisibleRequestInfoEXT* info);
Parametre Açıklamaları
spatialContainer, değişiklik talep edilecek XrSpatialContainerEXT'dir.info, istenen görünürlük durumunu içeren bir XrSpatialContainerVisibleRequestInfoEXT işaretçisidir.
Üç boyutlu kapsayıcıyı gösterme veya gizleme işlemi eşzamansızdır.
Uygulamalar, çalışma zamanlarının sorunsuz bir geçiş göstermesini sağlamak için bir uzamsal kapsayıcıyı yok etmeden önce gizlemeyi istemelidir. Çalışma zamanları, uzamsal kapsayıcıyı gizleme isteklerini yerine getirmelidir.
Çalışma zamanı, uzamsal kapsayıcı gösterme isteklerini reddedebilir. Bu durumda çalışma zamanı, XrEventDataSpatialContainerVisibleRequestDeniedEXT etkinliğini sıraya almalıdır. Örneğin, bazı çalışma zamanları, kullanıcının sistem tarafından sağlanan bir "küçültme" düğmesiyle etkileşime girerek gizlediği bir uzamsal kapsayıcıyı gösterme isteğini reddeder.
Çalışma zamanları, uygulama en az bir kez gösterme isteğinde bulunmadan önce uzamsal kapsayıcı göstermemelidir. Uygulamanın uzamsal kapsayıcı göstermeye yönelik ilk isteğinden sonra çalışma zamanları, uygulamanın isteklerinden bağımsız olarak uzamsal kapsayıcının görünürlüğünü değiştirebilir. Bu sayede uygulama, uzamsal kapsayıcının ilk durumunu ve içeriğini kontrol edebilir. Çalışma zamanları da kullanıcının hangi uzamsal kapsayıcıların görünür olacağını seçmesine olanak tanıyan görev çubuğu gibi sistem kullanıcı arayüzü sağlayabilir.
Çalışma zamanları, XrSystemSpatialContainerPropertiesEXT :: supportsBounded ve XrSystemSpatialContainerPropertiesEXT :: supportsImmersive uyarınca desteklenmeyen bir sınır modunda üç boyutlu kapsayıcı gösterme isteklerini reddetmelidir (must). Bu durum, varsayılan sınır modu XR_SPATIAL_CONTAINER_BOUNDS_MODE_BOUNDED_EXT belirli bir sistem için desteklenmediğinde ortaya çıkabilir.
Not
Bazı uygulamalarda, uzamsal kapsayıcıyı göstermek veya gizlemek için sistem hizmetleriyle iletişim kurulması gerekir ve bu işlem, kullanıcı bir sistem iletişim kutusuyla etkileşime geçene kadar ertelenebilir. Görünürlük durumu değişikliklerini istemek için asenkron tasarım, çalışma zamanlarına bu işlemlerin her ikisini de tamamlaması için zaman tanımayı amaçlar.
Geçerli Kullanım (Dolaylı)
-
XR_EXT_spatial_containeruzantısı, xrRequestSpatialContainerVisibleEXT çağrılmadan önce etkinleştirilmelidir. -
spatialContainergeçerli bir XrSpatialContainerEXT herkese açık kullanıcı adı olmalıdır -
info, geçerli bir XrSpatialContainerVisibleRequestInfoEXT yapısına işaret eden bir gösterge olmalıdır.
Dönüş Kodları
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, üç boyutlu kapsayıcının görünürlüğünü değiştirmek için xrRequestSpatialContainerVisibleEXT ile birlikte kullanılır.
typedef struct XrSpatialContainerVisibleRequestInfoEXT {
XrStructureType type;
const void* next;
XrBool32 visible;
} XrSpatialContainerVisibleRequestInfoEXT;
Üye Açıklaması
type, bu yapının XrStructureType değeridir.next,NULLveya bir yapı zincirindeki sonraki yapıya işaret eden bir göstergedir. Temel OpenXR'da veya bu uzantıda bu tür yapılar tanımlanmamıştır.visible, bir uzamsal kapsayıcının gösterilmesinin mi yoksa gizlenmesinin mi istendiğini gösterir.
Geçerli Kullanım (Dolaylı)
- XrSpatialContainerVisibleRequestInfoEXT kullanılmadan önce
XR_EXT_spatial_containeruzantısı etkinleştirilmelidir -
typeXR_TYPE_SPATIAL_CONTAINER_VISIBLE_REQUEST_INFO_EXTolmalıdır -
next,NULLveya yapı zincirindeki bir sonraki yapıya geçerli bir işaretçi olmalıdır.
Çalışma zamanı, uzamsal kapsayıcının görünürlüğünü her değiştirdiğinde yeni durumla birlikte bir XrEventDataSpatialContainerVisibleChangedEXT etkinliğini sıraya almalıdır.
typedef struct XrEventDataSpatialContainerVisibleChangedEXT {
XrStructureType type;
const void* next;
XrSpatialContainerEXT spatialContainer;
XrBool32 visible;
} XrEventDataSpatialContainerVisibleChangedEXT;
Üye Açıklaması
type, bu yapının XrStructureType değeridir.next,NULLveya bir yapı zincirindeki sonraki yapıya işaret eden bir göstergedir. Temel OpenXR'da veya bu uzantıda bu tür yapılar tanımlanmamıştır.spatialContainer, bu etkinliğin ait olduğu XrSpatialContainerEXT'dir.visible, uzamsal kapsayıcının yeni görünür durumudur.
Bu etkinlik, XR_SESSION_STATE_VISIBLE etkinliğinin yerini alır ve değerin her kapsayıcı için farklı olmasını sağlar. Uygulama tarafından istenen değişiklikler ve çalışma zamanında başlatılan değişiklikler de dahil olmak üzere tüm değişiklikler için etkinlik sıraya alınmalıdır.
Çalışma zamanı, boş bir kapsayıcı görüntülememek ve uygulamaya ilk içeriğini göndermesi için zaman tanımak amacıyla visible, XR_TRUE olarak ayarlanmış şekilde bu etkinliği sıraya aldıktan sonra bir kapsayıcının oluşturulmasını birkaç kare geciktirebilir. Bu süre boyunca XrSpatialContainerStateEXT ::visible, XR_TRUE olur. Çalışma zamanları, bir kapsayıcının oluşturulmasını 0,5 saniyeden fazla geciktirmemelidir.
Geçerli Kullanım (Dolaylı)
- XrEventDataSpatialContainerVisibleChangedEXT kullanılmadan önce
XR_EXT_spatial_containeruzantısı etkinleştirilmelidir. -
typeXR_TYPE_EVENT_DATA_SPATIAL_CONTAINER_VISIBLE_CHANGED_EXTolmalıdır -
next,NULLveya yapı zincirindeki bir sonraki yapıya geçerli bir işaretçi olmalıdır.
Çalışma zamanı, bir kapsayıcıyı gösterme isteğini her reddettiğinde bir XrEventDataSpatialContainerVisibleRequestDeniedEXT etkinliğini sıraya almalıdır.
typedef struct XrEventDataSpatialContainerVisibleRequestDeniedEXT {
XrStructureType type;
const void* next;
XrSpatialContainerEXT spatialContainer;
} XrEventDataSpatialContainerVisibleRequestDeniedEXT;
Üye Açıklaması
type, bu yapının XrStructureType değeridir.next,NULLveya bir yapı zincirindeki sonraki yapıya işaret eden bir göstergedir. Temel OpenXR'da veya bu uzantıda bu tür yapılar tanımlanmamıştır.spatialContainer, bu etkinliğin ait olduğu XrSpatialContainerEXT'dir.
Geçerli Kullanım (Dolaylı)
- XrEventDataSpatialContainerVisibleRequestDeniedEXT kullanılmadan önce
XR_EXT_spatial_containeruzantısı etkinleştirilmelidir -
typeXR_TYPE_EVENT_DATA_SPATIAL_CONTAINER_VISIBLE_REQUEST_DENIED_EXTolmalıdır -
next,NULLveya yapı zincirindeki bir sonraki yapıya geçerli bir işaretçi olmalıdır.
Etkileşimli
Uygulamalar, uzamsal kapsayıcıların etkileşimli olmasını isteyemez. Hangi uzamsal kapsayıcılarla etkileşim kurulabileceği tamamen çalışma zamanları tarafından kontrol edilir. Etkileşim kurulabilen bir uzamsal kapsayıcı da görünür olmalıdır.
Çalışma zamanı, bir uzamsal kapsayıcının etkileşimli durumunu her değiştirdiğinde yeni durumla birlikte bir XrEventDataSpatialContainerInteractableChangedEXT etkinliğini sıraya almalıdır.
typedef struct XrEventDataSpatialContainerInteractableChangedEXT {
XrStructureType type;
const void* next;
XrSpatialContainerEXT spatialContainer;
XrBool32 interactable;
} XrEventDataSpatialContainerInteractableChangedEXT;
Üye Açıklaması
type, bu yapının XrStructureType değeridir.next,NULLveya bir yapı zincirindeki sonraki yapıya işaret eden bir göstergedir. Temel OpenXR'da veya bu uzantıda bu tür yapılar tanımlanmamıştır.spatialContainer, bu etkinliğin ait olduğu XrSpatialContainerEXT'dir.interactable, üç boyutlu kapsayıcının yeni etkileşimli durumudur.
Bu etkinlik, XR_SESSION_STATE_FOCUSED etkinliğinin yerini alır ve değerin her kapsayıcı için farklı olmasını sağlar. Etkinlik, çalışma zamanında başlatılan değişiklikler de dahil olmak üzere tüm değişiklikler için sıraya alınır.
Çalışma zamanları, herhangi bir zamanda uzamsal kapsayıcıyla etkileşimi etkinleştirebilir veya devre dışı bırakabilir. Bir çalışma zamanı, aynı anda en fazla bir uzamsal kapsayıcının etkileşimli olmasını destekliyorsa çalışma zamanı, etkileşimli uzamsal kapsayıcıyı değiştirdiğinde, etkileşimli olmaya başlayan kapsayıcı ( interactable, doğru olarak ayarlanır) için etkinlikten önce etkileşimli olmayı bırakan uzamsal kapsayıcı ( interactable, yanlış olarak ayarlanır) için etkinliği sıraya koymalıdır.
Geçerli Kullanım (Dolaylı)
- XrEventDataSpatialContainerInteractableChangedEXT kullanılmadan önce
XR_EXT_spatial_containeruzantısı etkinleştirilmelidir. -
typeXR_TYPE_EVENT_DATA_SPATIAL_CONTAINER_INTERACTABLE_CHANGED_EXTolmalıdır -
next,NULLveya yapı zincirindeki bir sonraki yapıya geçerli bir işaretçi olmalıdır.
Sınırlar
Uzamsal kapsayıcıda bir sınır modu ve sınırlayıcı kutu bulunur. Üç boyutlu kapsayıcının sınır modu, sınırların nasıl davranacağını açıklar. Sınırlayıcı kutusu, uzamsal kapsayıcının içine çizim yaptığı alandır.
XrSpatialContainerBoundsModeEXT numaralandırması, uzamsal kapsayıcı sınırlarının bulunabileceği farklı modları tanımlar.
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;
Enum Açıklaması
XR_SPATIAL_CONTAINER_BOUNDS_MODE_BOUNDED_EXT
Üç boyutlu kapsayıcı sınırlıdır. Sınırlar, sonlu bir kutudur. Üç boyutlu kapsayıcı yalnızca bu bölgede görünür.
XR_SPATIAL_CONTAINER_BOUNDS_MODE_IMMERSIVE_EXT
Üç boyutlu kapsayıcı, kullanıcıyı içine çeker ve sınırsızdır. Üç boyutlu kapsayıcı, ekranın tamamında gösterilir.
Sınır modunda XR_SPATIAL_CONTAINER_BOUNDS_MODE_IMMERSIVE_EXT olan uzamsal kapsayıcılar için ek koşullar geçerlidir:
- Çalışma zamanları, bu uzamsal kapsayıcıları, uzamsal kapsayıcı kullanılmadan oluşturulan tam ekran ve kapsamlı bir uygulamayla aynı şekilde ele almalıdır. Oturum durumundaki değişiklikler bölümünde belirtilen davranış değişiklikleri bu kuralın dışındadır.
- Çalışma zamanları, çevreleyici uzamsal kapsayıcıların bu uzantı olmadan oluşturulan tam ekran ve çevreleyici uygulamalardan farklı davranmasını sağlayan ek uzantılar sağlayabilir.
- Çalışma zamanları, bu uzamsal kapsayıcılar için sonsuz sınırlar bildirmelidir.
- Çalışma zamanları, sürükleyici bir uzamsal kapsayıcı görünür durumdayken diğer uzamsal kapsayıcıları gizleyebilir. Bu durum çalışma zamanına göre farklılık gösterebileceğinden uygulamalar, üç boyutlu kapsayıcıların otomatik olarak gösterilmesi veya gizlenmesi için üç boyutlu kapsayıcı görünürlüğüne güvenmemelidir. Görünür durumdaki diğer tüm geçişlerde olduğu gibi, çalışma zamanları, sürükleyici bir kapsayıcının görünür olması nedeniyle uzamsal bir kapsayıcı gizlendiğinde bir XrEventDataSpatialContainerVisibleChangedEXT etkinliğini sıraya almalıdır.
Not
Yukarıdaki şartlar, tüm çalışma zamanlarının bu uzantı olmadan OpenXR 1.x yolunu uygulayabileceğini gösterir. Bunun için dolaylı olarak bir uzamsal kapsayıcı oluşturulur, kapsayıcının sınır modu tam ekran olarak ayarlanır ve görünür olması istenir.
Uygulamalar, xrRequestSpatialContainerBoundsModeEXT ile uzamsal kapsayıcının sınır modunu değiştirmeyi ister.
XrResult xrRequestSpatialContainerBoundsModeEXT(
XrSpatialContainerEXT spatialContainer,
const XrSpatialContainerBoundsModeRequestInfoEXT* info);
Parametre Açıklamaları
spatialContainer, değişiklik talep edilecek XrSpatialContainerEXT'dir.info, istenen sınır modunu içeren bir XrSpatialContainerBoundsModeRequestInfoEXT işaretçisidir.
Uzamsal kapsayıcının sınır modunu değiştirmek eşzamansız bir işlemdir ve çalışma zamanları, uygulama değişiklik isteğinde bulunduktan saniyeler sonra değiştirilmiş veya reddedilmiş bir etkinliği sıraya alabilir. Bu sayede çalışma zamanları, kullanıcının yoğun içerik moduna güvenli bir şekilde girmesi için gereken kullanıcı arayüzünü gösterebilir.
Çalışma zamanları, görünür olmayan bir uzamsal kapsayıcının sınır modunu değiştirme isteğini yerine getirmelidir. Çalışma zamanı, görünür olmayan bir kapsayıcı için sınır modu isteğini reddederse bunun yerine bu tür bir uzamsal kapsayıcıyı gösterme isteğini reddedebilir veya erteleyebilir. Bu, uygulamaların bir kapsayıcıyı tam ekran kapsayıcı olarak başlatmasına olanak tanır. Çalışma zamanı, görünür bir uzamsal kapsayıcının sınır modunu değiştirme isteklerini reddedebilir. Bu durumda çalışma zamanı, bir XrEventDataSpatialContainerBoundsModeRequestDeniedEXT etkinliğini sıraya almalıdır. Örneğin, bazı çalışma zamanları, kullanıcının etkin bir şekilde etkileşimde bulunmadığı görünür bir uzamsal kapsayıcının sınır modunu değiştirme isteğini reddeder.
Çalışma zamanları, bir uygulama XrSystemSpatialContainerPropertiesEXT :: supportsBounded ve XrSystemSpatialContainerPropertiesEXT :: supportsImmersive temelinde desteklenmeyen bir sınır modu isterse XR_ERROR_VALIDATION_FAILURE değerini döndürmelidir (zorunlu).
Geçerli Kullanım (Dolaylı)
-
XR_EXT_spatial_containeruzantısı, xrRequestSpatialContainerBoundsModeEXT çağrılmadan önce etkinleştirilmelidir -
spatialContainergeçerli bir XrSpatialContainerEXT herkese açık kullanıcı adı olmalıdır -
info, geçerli bir XrSpatialContainerBoundsModeRequestInfoEXT yapısına işaret eden bir işaretçi olmalıdır.
Dönüş Kodları
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, bir uzamsal kapsayıcının sınır modunu değiştirmek için xrRequestSpatialContainerBoundsModeEXT ile birlikte kullanılır.
typedef struct XrSpatialContainerBoundsModeRequestInfoEXT {
XrStructureType type;
const void* next;
XrSpatialContainerBoundsModeEXT boundsMode;
} XrSpatialContainerBoundsModeRequestInfoEXT;
Üye Açıklaması
type, bu yapının XrStructureType değeridir.next,NULLveya bir yapı zincirindeki sonraki yapıya işaret eden bir göstergedir. Temel OpenXR'da veya bu uzantıda bu tür yapılar tanımlanmamıştır.boundsMode, üç boyutlu kapsayıcı için istenen XrSpatialContainerBoundsModeEXT değeridir.
Geçerli Kullanım (Dolaylı)
- XrSpatialContainerBoundsModeRequestInfoEXT kullanılmadan önce
XR_EXT_spatial_containeruzantısı etkinleştirilmelidir -
typeXR_TYPE_SPATIAL_CONTAINER_BOUNDS_MODE_REQUEST_INFO_EXTolmalıdır -
next,NULLveya yapı zincirindeki bir sonraki yapıya geçerli bir işaretçi olmalıdır. -
boundsMode, geçerli bir XrSpatialContainerBoundsModeEXT değeri olmalıdır
Çalışma zamanı, bir uzamsal kapsayıcının sınırlarını veya sınır modunu her değiştirdiğinde yeni sınır bilgileriyle birlikte bir XrEventDataSpatialContainerBoundsChangedEXT etkinliğini sıraya almalıdır.
typedef struct XrEventDataSpatialContainerBoundsChangedEXT {
XrStructureType type;
const void* next;
XrSpatialContainerEXT spatialContainer;
XrExtent3Df bounds;
XrBool32 infiniteBounds;
XrSpatialContainerBoundsModeEXT boundsMode;
} XrEventDataSpatialContainerBoundsChangedEXT;
Üye Açıklaması
type, bu yapının XrStructureType değeridir.next,NULLveya bir yapı zincirindeki sonraki yapıya işaret eden bir göstergedir. Temel OpenXR'da veya bu uzantıda bu tür yapılar tanımlanmamıştır.spatialContainer, bu etkinliğin ait olduğu XrSpatialContainerEXT'dir.bounds, uzamsal kapsayıcı sınırlarının yeni genişliği, yüksekliği ve derinliğidir.- Kapsayıcının sınırları sonsuzsa
infiniteBoundsdoğru olur. boundsMode, uzamsal kapsayıcının yeni XrSpatialContainerBoundsModeEXT değeridir.
Etkinlik, uygulama tarafından istenen değişiklikler ve çalışma zamanında başlatılan değişiklikler de dahil olmak üzere tüm değişiklikler için sıraya alınır.
Kullanıcı, uzamsal kapsayıcıyı etkileşimli olarak yeniden boyutlandırırken çalışma zamanları aşağıdaki şekillerden birinde davranmalıdır:
- Kullanıcı, uzamsal kapsayıcıyı yeniden boyutlandırırken birçok etkinliği (büyük olasılıkla kare hızında) sıraya koyma
- Yeniden boyutlandırma işleminin sonunda tek bir etkinliği sıraya koyma
Bir çalışma zamanı, yeniden boyutlandırmanın sonunda yalnızca tek bir etkinliği sıraya alırsa bu çalışma zamanı, yeniden boyutlandırma etkinliğini sıraya alana kadar xrGetSpatialContainerBoundsEXT'ten eski sınırları bildirmeye devam etmelidir. Çalışma zamanları, sorgulanmamış birden fazla sınır değişikliği etkinliğini birleştirmelidir. Başka bir deyişle, sınırlar veya sınır modu değiştiğinde hâlâ sıraya alınmış bir XrEventDataSpatialContainerBoundsChangedEXT etkinliği varsa çalışma zamanları yalnızca gerçekleşen son sınır değişikliğini içeren tek bir etkinlik bildirmelidir. Uygulamalar, xrGetSpatialContainerBoundsEXT ile doğrudan bir uzamsal kapsayıcının sınırlarını da sorgulayabildiğinden, etkinliklerden kaynaklanan sınır değişikliklerinin sayısı, çalışma zamanında oluşturulan sınır değişikliklerinin zamanlamasına, uygulamanın xrPollEvent çağrılarına ve uygulamanın xrGetSpatialContainerBoundsEXT çağrılarına bağlı olarak sorgulamadan kaynaklanan değişikliklerin sayısından farklı olabilir.
Uzamsal kapsayıcının sınırları değiştiğinde uzamsal kapsayıcının yerel orijini de değişebilir. Örneğin, bir çalışma zamanı, kullanıcının kapsayıcının kenarlarından birini sürükleyerek uzamsal kapsayıcının sınırlarını yeniden boyutlandırmasına izin veriyorsa kullanıcı tek bir kenarı sürüklediğinde söz konusu kapsayıcının sınırları ve yerel orijini değişir. Bu gibi durumlarda çalışma zamanı, sınırları ve yerel orijini aynı anda değiştirmelidir.
Çalışma zamanları, infiniteBounds değerini XR_TRUE olarak ayarlamalı ve sonsuz sınırları temsil etmek için genişlik, yükseklik ve derinliği 0,0 olarak ayarlamalıdır. Çalışma zamanları, infiniteBounds değerini XR_FALSE olarak ayarlamalı ve genişlik, yükseklik ve derinliği sonlu sınırlar için sonlu pozitif sayılar olarak ayarlamalıdır.
Çalışma zamanları, XrSpatialContainerBoundsEXT ile aynı kurallara uyarak bounds ve infiniteBounds değerlerini ayarlamalıdır.
Geçerli Kullanım (Dolaylı)
- XrEventDataSpatialContainerBoundsChangedEXT kullanılmadan önce
XR_EXT_spatial_containeruzantısı etkinleştirilmelidir -
typeXR_TYPE_EVENT_DATA_SPATIAL_CONTAINER_BOUNDS_CHANGED_EXTolmalıdır -
next,NULLveya yapı zincirindeki bir sonraki yapıya geçerli bir işaretçi olmalıdır.
Çalışma zamanı, bir kapsayıcının sınır modunu değiştirme isteğini her reddettiğinde bir XrEventDataSpatialContainerBoundsModeRequestDeniedEXT etkinliğini sıraya koymalıdır.
typedef struct XrEventDataSpatialContainerBoundsModeRequestDeniedEXT {
XrStructureType type;
const void* next;
XrSpatialContainerEXT spatialContainer;
} XrEventDataSpatialContainerBoundsModeRequestDeniedEXT;
Üye Açıklaması
type, bu yapının XrStructureType değeridir.next,NULLveya bir yapı zincirindeki sonraki yapıya işaret eden bir göstergedir. Temel OpenXR'da veya bu uzantıda bu tür yapılar tanımlanmamıştır.spatialContainer, bu etkinliğin ait olduğu XrSpatialContainerEXT'dir.
Geçerli Kullanım (Dolaylı)
- XrEventDataSpatialContainerBoundsModeRequestDeniedEXT kullanılmadan önce
XR_EXT_spatial_containeruzantısı etkinleştirilmiş olmalıdır. -
typeXR_TYPE_EVENT_DATA_SPATIAL_CONTAINER_BOUNDS_MODE_REQUEST_DENIED_EXTolmalıdır -
next,NULLveya yapı zincirindeki bir sonraki yapıya geçerli bir işaretçi olmalıdır.
XrSpatialContainerBoundsEXT yapısı, uzamsal kapsayıcının sınırlayıcı kutusunu tanımlar.
typedef struct XrSpatialContainerBoundsEXT {
XrStructureType type;
void* next;
XrExtent3Df bounds;
XrBool32 infiniteBounds;
} XrSpatialContainerBoundsEXT;
Üye Açıklaması
type, bu yapının XrStructureType değeridir.next,NULLveya bir yapı zincirindeki sonraki yapıya işaret eden bir göstergedir. Temel OpenXR'da veya bu uzantıda bu tür yapılar tanımlanmamıştır.bounds, uzamsal kapsayıcı sınırlarının genişliği, yüksekliği ve derinliğidir. Sınırlar metre cinsindendir.- Kapsayıcının sınırları sonsuzsa
infiniteBoundsdoğru olur.
Çalışma zamanları, infiniteBounds değerini XR_TRUE olarak ayarlamalı ve sonsuz sınırları temsil etmek için genişlik, yükseklik ve derinliği 0,0 olarak ayarlamalıdır. Çalışma zamanları, infiniteBounds değerini XR_FALSE olarak ayarlamalı ve genişlik, yükseklik ve derinliği sonlu sınırlar için sonlu pozitif sayılar olarak ayarlamalıdır.
Geçerli Kullanım (Dolaylı)
- XrSpatialContainerBoundsEXT kullanılmadan önce
XR_EXT_spatial_containeruzantısı etkinleştirilmelidir -
typeXR_TYPE_SPATIAL_CONTAINER_BOUNDS_EXTolmalıdır -
next,NULLveya yapı zincirindeki bir sonraki yapıya geçerli bir işaretçi olmalıdır.
xrGetSpatialContainerBoundsEXT işlevi, uzamsal kapsayıcının mevcut sınırlarını sorgular.
XrResult xrGetSpatialContainerBoundsEXT(
XrSpatialContainerEXT spatialContainer,
const XrSpatialContainerBoundsGetInfoEXT* getInfo,
XrSpatialContainerBoundsEXT* bounds);
Parametre Açıklamaları
spatialContainer, sorgulanacak XrSpatialContainerEXT'dir.getInfo, uzamsal kapsayıcının durumunu almak için kullanılan bilgileri içeren XrSpatialContainerBoundsGetInfoEXT'tir.bounds, sınırların döndürüldüğü XrSpatialContainerBoundsEXT'ye işaret eden bir göstergedir.
Sınırlı bir uzamsal kapsayıcının sınırları sonsuz olmamalıdır, sürükleyici bir uzamsal kapsayıcının sınırları ise sonsuz olmalıdır.
Çalışma zamanları, uzamsal kapsayıcı sınırlıyken herhangi bir zamanda uzamsal kapsayıcının sınırlarını herhangi bir pozitif sonlu değere değiştirebilir. Üç boyutlu kapsayıcının sınırlarında yapılan değişiklikler XrEventDataSpatialContainerBoundsChangedEXT aracılığıyla bildirilir.
Bu uzantıyla, bir uygulama xrRequestSpatialContainerBoundsModeEXT ile sınırlı ve tam ekran arasında geçiş yapmak dışında sınırlarda değişiklik isteğinde bulunamaz. Diğer uzantılar gelecekte bu tür bir yöntem sunabilir.
Geçerli Kullanım (Dolaylı)
-
XR_EXT_spatial_containeruzantısı, xrGetSpatialContainerBoundsEXT çağrılmadan önce etkinleştirilmelidir -
spatialContainergeçerli bir XrSpatialContainerEXT herkese açık kullanıcı adı olmalıdır -
getInfo,NULLdeğilsegetInfo, geçerli bir XrSpatialContainerBoundsGetInfoEXT yapısına işaretçi olmalıdır. -
bounds, bir XrSpatialContainerBoundsEXT yapısına işaretçi olmalıdır
Dönüş Kodları
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
XrSpatialContainerBoundsGetInfoEXT yapısı, gelecekteki uzantı amaçları için mevcut olan bir giriş yapısıdır.
typedef struct XrSpatialContainerBoundsGetInfoEXT {
XrStructureType type;
const void* next;
} XrSpatialContainerBoundsGetInfoEXT;
Üye Açıklaması
type, bu yapının XrStructureType değeridir.next,NULLveya bir yapı zincirindeki sonraki yapıya işaret eden bir göstergedir. Temel OpenXR'da veya bu uzantıda bu tür yapılar tanımlanmamıştır.
Geçerli Kullanım (Dolaylı)
-
XR_EXT_spatial_containeruzantısı, XrSpatialContainerBoundsGetInfoEXT kullanılmadan önce etkinleştirilmelidir. -
typeXR_TYPE_SPATIAL_CONTAINER_BOUNDS_GET_INFO_EXTolmalıdır -
next,NULLveya yapı zincirindeki bir sonraki yapıya geçerli bir işaretçi olmalıdır.
XrSpatialContainerVolumeClippingEXT numaralandırması, uzamsal kapsayıcı için farklı hacim kırpma davranışlarını tanımlar.
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;
Enum Açıklaması
XR_SPATIAL_CONTAINER_VOLUME_CLIPPING_NONE_EXT
Hiçbir içerik, uzamsal kapsayıcının sınırlayıcı hacmine göre kırpılmaz. İçerik, uzamsal kapsayıcının sınırlarının dışına taşabilir.
XR_SPATIAL_CONTAINER_VOLUME_CLIPPING_STRICT_EXT
İçerik, uzamsal kapsayıcının sınırlayıcı hacmine göre tam olarak kırpılır.
Bu uzantıda bu numaralandırma kullanılmaz. Diğer uzantıların istenen ses kırpma davranışını belirtmesine izin verecek şekilde tanımlanır. Örneğin, bir uygulama, sınırlı bir uzamsal kapsayıcı için arka plan çizmek isteyebilir. Monoküler küp harita, arka plan belirtmek için kullanışlı bir yöntemdir ancak monoküler küp harita, kavramsal olarak kapsayıcının dışındaki sonsuzlukta konumlandırılır.
Sistem özellikleri
Uygulamalar, xrGetSystemProperties işlevini çağırırken XrSystemProperties'e bir XrSystemSpatialContainerPropertiesEXT yapısı zincirleyerek sistem özelliklerini inceleyebilir.
typedef struct XrSystemSpatialContainerPropertiesEXT {
XrStructureType type;
void* next;
uint32_t maxSpatialContainerCount;
XrBool32 supportsBounded;
XrBool32 supportsImmersive;
} XrSystemSpatialContainerPropertiesEXT;
Üye Açıklaması
type, bu yapının XrStructureType değeridir.next,NULLveya bir yapı zincirindeki sonraki yapıya işaret eden bir göstergedir. Temel OpenXR'da veya bu uzantıda bu tür yapılar tanımlanmamıştır.- Oluşturulabilecek maksimum uzamsal kapsayıcı sayısı
maxSpatialContainerCount. - Uzamsal kapsayıcılar sınırlandırılabiliyorsa
supportsBoundeddoğru değerini döndürür. - Üç boyutlu kapsayıcıların çevreleyici olmasına izin veriliyorsa
supportsImmersivedeğeri doğrudur.
Bu uzantıyı destekleyen çalışma zamanları, yalnızca bellek ayırmayla sınırlı olmak üzere birçok uzamsal kapsayıcı oluşturan bir uygulamayı desteklemelidir (should). Bir çalışma zamanında, aynı anda görüntülenen uzamsal kapsayıcıların sayısı için farklı bir sınır olabilir. Çalışma zamanı, tüm çalışan uygulamalardaki duruma göre her bir uygulamayı sınırlayabileceği için bu uzantıda aynı anda görüntülenen kapsayıcıların sayısını sorgulamanın bir yolu yoktur. Çok kısıtlı cihazlar ile daha az kısıtlı cihazların, aynı anda gösterilen kapsayıcı sayısı için farklı sınırlara sahip olacağı varsayılır. Çok kısıtlı cihazlar aynı anda yalnızca bir uzamsal kapsayıcının gösterilmesini destekleyebilir. Daha az kısıtlı cihazlar ise oluşturma işlem sınırlarına tabi olarak aynı anda çok sayıda uzamsal kapsayıcının gösterilmesini destekleyebilir.
Bu uzantıyı destekleyen çalışma zamanları, sınırlı uzamsal kapsayıcılardan veya sürükleyici uzamsal kapsayıcılardan en az birini desteklemelidir.
Geçerli Kullanım (Dolaylı)
- XrSystemSpatialContainerPropertiesEXT kullanılmadan önce
XR_EXT_spatial_containeruzantısı etkinleştirilmelidir -
typeXR_TYPE_SYSTEM_SPATIAL_CONTAINER_PROPERTIES_EXTolmalıdır -
next,NULLveya yapı zincirindeki bir sonraki yapıya geçerli bir işaretçi olmalıdır.
xrEnumerateSupportedSpatialContainerGraphicsPresentationsEXT işlevi, bir sistemde desteklenen grafik sunum yöntemlerini döndürür.
XrResult xrEnumerateSupportedSpatialContainerGraphicsPresentationsEXT(
XrInstance instance,
XrSystemId systemId,
uint32_t graphicsPresentationCapacityInput,
uint32_t* graphicsPresentationCountOutput,
XrSpatialContainerGraphicsPresentationEXT* graphicsPresentations);
Parametre Açıklamaları
instance,systemIdöğesinin alındığı XrInstance'dır.systemId, sorgulananXrSystemIddeğeridir.graphicsPresentationCapacityInput,graphicsPresentationsdizisinin kapasitesidir veya gerekli kapasiteyi alma isteğini belirtmek için 0'dır.graphicsPresentationCountOutput, yazılan grafik sunularının sayısına işaret eden bir göstergedir veyagraphicsPresentationCapacityInputdeğerinin 0 olması durumunda gerekli kapasiteye işaret eden bir göstergedir.graphicsPresentations, XrSpatialContainerGraphicsPresentationEXT değerleri dizisine işaret eden bir göstergedir ancakgraphicsPresentationCapacityInput0 ise null olabilir.- Gerekli
graphicsPresentationsboyutunu alma hakkında ayrıntılı açıklama için Arabellek Boyutu Parametreleri bölümüne bakın.
Çalışma zamanları, belirli bir systemId için ve örneğin kullanım ömrü boyunca bu numaralandırmadan her zaman aynı arabellek içeriklerini döndürmelidir.
Geçerli Kullanım (Dolaylı)
-
XR_EXT_spatial_containeruzantısı, xrEnumerateSupportedSpatialContainerGraphicsPresentationsEXT çağrılmadan önce etkinleştirilmelidir -
instancegeçerli bir XrInstance herkese açık kullanıcı adı olmalıdır -
graphicsPresentationCountOutput, biruint32_tdeğerine işaretçi olmalıdır -
graphicsPresentationCapacityInput,0değilsegraphicsPresentations,graphicsPresentationCapacityInputXrSpatialContainerGraphicsPresentationEXT değerlerinden oluşan bir diziye işaretçi olmalıdır.
Dönüş Kodları
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_RUNTIME_FAILUREXR_ERROR_SIZE_INSUFFICIENTXR_ERROR_SYSTEM_INVALIDXR_ERROR_VALIDATION_FAILURE
Oturum durumunda yapılan değişiklikler
xrCreateSession çağrılırken bir XrSessionCreateInfoSpatialContainersEXT zincirlenerek oturum için uzamsal kapsayıcı desteği etkinleştirilir.
typedef struct XrSessionCreateInfoSpatialContainersEXT {
XrStructureType type;
const void* next;
} XrSessionCreateInfoSpatialContainersEXT;
Uzamsal kapsayıcı desteği etkinleştirildiğinde XrSession farklı şekilde davranır. Bunun nedeni, uzamsal kapsayıcılar kullanılırken oturumun artık ekranlarda resim içeriği sunmaması, bunun yerine uzamsal kapsayıcıların bunu yapmasıdır. Bu nedenle, bu uzantı etkinleştirildiğinde oturum "görünmez" olur. Diğer gözetimsiz uzantıların aksine, uygulamalar uzamsal kapsayıcılar aracılığıyla görüntü verileri gönderebilir.
Üç boyutlu kapsayıcı desteğini etkinleştirmek, temel OpenXR API'lerini aşağıdaki şekilde değiştirir.
çalışma zamanı: sistem veya cihaz kaybetme
çalışma zamanı: sistem veya cihaz kaybetme
xrDestroySession
xrDestroySession
BOŞTA
(çalışıyor)
BOŞTA...
xrGetSystem
xrCreateSession
xrGetSystem...
xrCreateInstance
xrCreateIn...
xrDestroySession
xrDestroySession
LOSS_PENDING
(çalışmıyor)
KAYIP BEKLENİYOR...
xrDestroyInstance
xrDestroyInstance
uygulama: isteğe bağlı olarak
XR'ı yeniden başlatın
uygulama: isteğe bağlı olarak...
19. şekil. Yeni oturum durum makinesi
- Oturum hiçbir zaman
XR_SESSION_STATE_VISIBLE,XR_SESSION_STATE_FOCUSEDveyaXR_SESSION_STATE_EXITINGdurumlarına girmez. Çalışma zamanları bu durumlar için etkinlikleri asla sıraya almamalıdır. Bu durumların yerini sırasıyla uzamsal kapsayıcı başına etkinlikler olan XrEventDataSpatialContainerVisibleChangedEXT, XrEventDataSpatialContainerInteractableChangedEXT ve XrEventDataSpatialContainerClosedEXT alır. - Oturum hiçbir zaman
XR_SESSION_STATE_READY,XR_SESSION_STATE_SYNCHRONIZED,XR_SESSION_STATE_STOPPINGdurumlarına girmez. Çalışma zamanları bu durumlar için etkinlikleri asla sıraya almamalıdır. Bu durumların yerine geçecek başka bir durum yoktur. - Çalışma zamanları, oturumu
XR_SESSION_STATE_IDLEdurumundayken çalışıyor olarak değerlendirmelidir. - Çalışma zamanları,
XR_SESSION_STATE_IDLEdurumundayken ve etkileşim kurulabilen en az bir uzamsal kapsayıcı varken oturumu odaklanmış olarak ele almalıdır. - xrBeginSession ve xrEndSession işlevlerine artık gerek yoktur. Çalışma zamanları, bu işlevler çağrıldığında
XR_ERROR_SPATIAL_CONTAINERS_ENABLED_EXTdöndürmelidir. Diğer uzantılar bu işlevler için alternatifler sağlayabilir. - xrRequestExitSession işlevine de artık gerek yoktur. Çalışma zamanları, bu işlev çağrıldığında
XR_ERROR_SPATIAL_CONTAINERS_ENABLED_EXTdeğerini döndürmelidir. Çalışan bir oturumdan çıkmak isteyen uygulamalar, kapsayıcılarını gizlemek için xrRequestSpatialContainerVisibleEXT'yi çağırabilir ve tüm kapsayıcılar görünmez olduktan sonra oturumu sonlandırabilir. Oturum çalışmaya başladığında ek etkinlikleri sıraya alacak uzantıların artık bu etkinlikleri oturum oluşturulduktan sonra sıraya alması gerekir. Bu tür uzantılar aşağıda belirtilmiştir.
Uzantı Etkinliği
XR_EXT_user_presence
XrEventDataUserPresenceChangedEXT
XR_META_boundary_visibility
XrEventDataBoundaryVisibilityChangedMETA
- xrLocateViews işlevi, oturum için çağrılmaya uygun değil. Çalışma zamanları, xrLocateViews'dan
XR_ERROR_SPATIAL_CONTAINERS_ENABLED_EXTdeğerini döndürmelidir. Diğer uzantılar, belirli bir uzamsal kapsayıcının görünümlerini bulmanın yollarını sağlayabilir. - xrWaitFrame işlevi, XrFrameState ::
shouldRenderdeğerini her zaman false olarak ayarlamalıdır. Diğer uzantılar, belirli bir uzamsal kapsayıcının kompozisyon katmanlarını güncellemesi gerekip gerekmediğini öğrenmenin yollarını sağlayabilir. - xrEndFrame işlevi, oluşturma katmanlarını göndermek için geçerli bir yöntem değildir. Bir uygulama XrFrameEndInfo ::
layerCountdeğerini sıfır olmayan bir değere ayarlarsa çalışma zamanlarıXR_ERROR_VALIDATION_FAILUREdeğerini döndürmelidir. Diğer uzantılar, belirli bir uzamsal kapsayıcı için kompozisyon katmanları gönderme yöntemleri sağlayabilir. XR_SESSION_STATE_LOSS_PENDINGdurumuna girildiğinde tüm uzamsal kapsayıcılar da kapatılır. Çalışma zamanları,XR_SESSION_STATE_LOSS_PENDINGiçin bir oturum durumu değişikliğini sıraya almadan önce her etkin uzamsal kapsayıcı için bir XrEventDataSpatialContainerClosedEXT etkinliğini sıraya almalıdır.- xrCreateSession işlevi için artık grafik API bağlama yapısı gerekmez. Diğer uzantılar, grafik bağlama gerektirebilir. Örneğin, bir uzamsal kapsayıcının grafik API'si kullanarak oluşturulması için grafik bağlama gerekebilir.
Yukarıdaki davranış, XR_MND_headless uygulamasındaki davranıştan biraz farklıdır. Çalışma zamanları, ilgili oturum için uzamsal kapsayıcı desteği etkinleştirildiğinde XR_MND_headless üzerinden başsız oturum davranışını etkinleştirmemelidir.
Not
Uzamsal kapsayıcılar etkinleştirildiğinde oturum yalnızca iki durum arasında geçiş yapar: XR_SESSION_STATE_IDLE (çalışıyor) ve XR_SESSION_STATE_LOSS_PENDING (çalışmıyor). Bu nedenle, çalışma zamanları artık XR_ERROR_SESSION_RUNNING veya XR_ERROR_SESSION_NOT_RUNNING döndürmez. Bunun yerine, bir oturum çalışmıyorken çalışma zamanları, OpenXR çekirdeğindeki kurallara göre XR_ERROR_SESSION_LOST veya XR_SESSION_LOSS_PENDING değerini döndürür. Ayrıca, XR_ERROR_SESSION_RUNNING döndüren tek işlev olan xrBeginSession artık her zaman XR_ERROR_SPATIAL_CONTAINERS_ENABLED_EXT döndürecek.
Geçerli Kullanım (Dolaylı)
- XrSessionCreateInfoSpatialContainersEXT kullanılmadan önce
XR_EXT_spatial_containeruzantısı etkinleştirilmelidir. -
typeXR_TYPE_SESSION_CREATE_INFO_SPATIAL_CONTAINERS_EXTolmalıdır -
next,NULLveya yapı zincirindeki bir sonraki yapıya geçerli bir işaretçi olmalıdır.
Android Manifest girişleri
AOSP tabanlı çalışma zamanları, herhangi bir uygulama kodu çalıştırılmadan önce başlatılan ilk uzamsal kapsayıcı durumuna göre özel davranışlara sahip olabilir. Örneğin, çalışma zamanı, etkinlik için ayrılan kaynakları, başlatma animasyonlarını veya başlangıç ekranı görüntüsünü değiştirebilir. Bu amaçla aşağıdaki özellikler sağlanmıştır. Bu etiketler, uzamsal kapsayıcı tabanlı uygulamaların önceki AOSP tabanlı çalışma zamanlarıyla uyumluluk dışında belirtmemesi gereken <category android:name="org.khronos.openxr.intent.category.IMMERSIVE_HMD" /> etiketinin yerini alır.
<property android:name="org.khronos.openxr.PROPERTY_ACTIVITY_HINT_XR_SPATIAL_CONTAINER_USED_BOUNDS_MODES"
android:value="list of modes" />
Bu özellik, çalışma zamanlarına bir etkinliğin kullandığı sınır modlarını belirtir. Varsayılan olarak boş bir listedir. Bu, ipucu olmadığı anlamına gelir.
Bu özellik için aşağıdaki dizeler geçerlidir. Birden fazla değer | ile ayrılır (ör. "bounded|immersive").
Değer
Açıklama
"2d_panel"
Etkinlik, Android'in 2D görünüm çerçevesi kullanılarak görüntülenir.
"bounded"
Etkinlikte XR_SPATIAL_CONTAINER_BOUNDS_MODE_BOUNDED_EXT kullanılıyor.
"immersive"
Etkinlikte XR_SPATIAL_CONTAINER_BOUNDS_MODE_IMMERSIVE_EXT kullanılıyor.
<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" />
Bu özellik, çalışma zamanlarına etkinliğin ilk oluşturulduğunda ilk XrSpatialContainerBoundsModeEXT değerini belirtir. Varsayılan olarak XR_SPATIAL_CONTAINER_INITIAL_BOUNDS_MODE_UNDEFINED dizesidir. Bu dize, herhangi bir ipucu olmadığı anlamına gelir.
Çalışma zamanları, uygulamaların bu spesifikasyona göre davranması için bu özelliklere sahip olmasını gerektirmemelidir. Çalışma zamanları, bu özelliklere göre uygulamanın görünür davranışını değiştirmemelidir. Bu tür meta verilerin tümü <activity> veya <application> düzeyinde belirtilebilmelidir. <application> düzeyinde belirtilirse uygulamadaki kendi değerlerini belirtmeyen tüm etkinlikler için geçerli olur.
Örnek kod
Aşağıdaki kod, bu uzantının herhangi bir oluşturma işlemi olmadan yalnızca algılama kullanım alanları için nasıl kullanılacağını gösterir.
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));
Yeni nesne türleri
Yeni Komutlar
- xrCreateSpatialContainerEXT
- xrCreateSpatialContainerSpaceEXT
- xrDestroySpatialContainerEXT
- xrEnumerateSupportedSpatialContainerGraphicsPresentationsEXT
- xrGetSpatialContainerBoundsEXT
- xrGetSpatialContainerStateEXT
- xrRequestSpatialContainerBoundsModeEXT
- xrRequestSpatialContainerVisibleEXT
Yeni Yapılar
- XrEventDataSpatialContainerBoundsChangedEXT
- XrEventDataSpatialContainerBoundsModeRequestDeniedEXT
- XrEventDataSpatialContainerClosedEXT
- XrEventDataSpatialContainerInteractableChangedEXT
- XrEventDataSpatialContainerVisibleChangedEXT
- XrEventDataSpatialContainerVisibleRequestDeniedEXT
- XrSpatialContainerBoundsEXT
- XrSpatialContainerBoundsGetInfoEXT
- XrSpatialContainerBoundsModeRequestInfoEXT
- XrSpatialContainerCreateInfoEXT
- XrSpatialContainerSpaceCreateInfoEXT
- XrSpatialContainerStateEXT
- XrSpatialContainerStateGetInfoEXT
- XrSpatialContainerVisibleRequestInfoEXT
XrSessionCreateInfo'yu genişletme:
XrSystemProperties'i genişletme:
Yeni Enum Veri Türleri
- XrSpatialContainerBoundsModeEXT
- XrSpatialContainerGraphicsPresentationEXT
- XrSpatialContainerVolumeClippingEXT
Yeni Enum Sabitleri
XR_EXT_SPATIAL_CONTAINER_EXTENSION_NAMEXR_EXT_spatial_container_SPEC_VERSIONXrObjectType'i genişletme:
XR_OBJECT_TYPE_SPATIAL_CONTAINER_EXT
XrResult'ı genişletme:
XR_ERROR_COMPATIBLE_SPATIAL_CONTAINER_MISSING_EXTXR_ERROR_SPATIAL_CONTAINERS_ENABLED_EXTXR_ERROR_SPATIAL_CONTAINERS_NOT_ENABLED_EXTXR_ERROR_SPATIAL_CONTAINER_CLOSED_EXT
XrStructureType'ı genişletme:
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
Sayılar
Birden fazla bekleyen görünür isteği nasıl işleriz? Uygulama bir değişiklik/reddedilen geri alma işlemi mi yoksa birden fazla mı almalı? Aramalar birden fazla karede yapılıyorsa yanıt farklı olabilir. Birden fazla istek, işlem yapılmamasıyla sonuçlanırsa da yanıt farklı olabilir. Örneğin, görünür olmayan bir kapsayıcı için önce görünür, sonra görünür olmaması istenirse.
- Çözüldü. Değişiklik etkinlikleri ve reddedilen etkinlikler için farklı seçenekler. Noop istekleri bir değişiklik etkinliğini sıraya almaz. Bu, uygulama geliştirici için yalnızca gürültü oluşturur ve çalışma zamanlarının filtrelemesi kolaydır. Görünür birden fazla istek reddedilirse çalışma zamanlarının her biri, ilgili reddedilen etkinliği oluşturmalıdır.
Uygunluk otomasyonu uzantısının, politika davranışlarıyla ilgili tüm isteğe bağlı spesifikasyon metinlerinin CTS tarafından test edilebilmesi için nasıl tanımlanması beklenir?
- Çözüldü. Ayrı test uzantısı. Yalnızca CTS için bir test uzantısı çalışma zamanı uygulaması olacak ve CTS'nin tüm sistem politikasını kontrol etmesine olanak tanıyacak.
Uzamsal kapsayıcının konumu değiştiğinde bir etkinliğe ihtiyacımız var mı?
- Çözüldü. Hayır. Uzamsal kapsayıcı alanı, dünyaya kilitli değildir ve
XR_REFERENCE_SPACE_TYPE_VIEWgibi diğer alanlar değiştiğinde etkinlikler gerçekleşmez.
- Çözüldü. Hayır. Uzamsal kapsayıcı alanı, dünyaya kilitli değildir ve
Birden fazla uzamsal kapsayıcı varsa xrSyncActions nasıl çalışır?
- Çözüldü. Değişiklik yapılması gerekmez. xrSyncActions, oturumdaki tüm uzamsal kapsayıcılar için geçerli olur. Bir uygulama, giriş işlemlerini belirli bir uzamsal kapsayıcıya yönlendirmek istiyorsa hangi kapsayıcıların geçerli hedefler olduğunu seçmek için kapsayıcı başına etkileşimli duruma bakabilir. Bir uygulama yalnızca tek bir uzamsal kapsayıcı için giriş işlemi durumunu senkronize etmek istiyorsa ek bir uzantı gerekir. Ancak bunun yerine, uygulamaların tamamen etkinliğe dayalı olmasını sağlayan ve kare döngüsünde xrSyncActions çağrısı yapma ihtiyacını ortadan kaldıran bir uzantıya odaklanmayı planlıyoruz.
Seyrek güncellenen uygulamalar girişleri nasıl işler?
- Çözüldü. Herhangi bir değişiklik yapılması gerekmez. EXT_spatial_container için değerli olsa da uzamsal kapsayıcıların dışında da değerlidir. Bu durum, bir etkinlik kanalı uzantısı aracılığıyla ele alınabilir ve her iki durumda da çalışır. Tek bir uzamsal kapsayıcıdaki etkinlikleri filtrelemek için ek yöntemler ekleyeceğiz.
Giriş ve oluşturma döngüleri ayrılmış uygulamalarda giriş döngüsünün zamanlamasını kısıtlamak/kontrol etmek için beklememiz gerekir mi?
- Çözüldü. Herhangi bir değişiklik yapılması gerekmez. Bu işlemin, etkinlik kanalı ve mevcut istek uzantıları aracılığıyla gerçekleştirilmesi beklenir. Present request uzantısı, oluşturma işleminin etkinliğe dayalı olmasını ve kare döngüsünden ayrılmasını sağlar.
Üç boyutlu kapsayıcılar, diğer üç boyutlu kapsayıcılara göre konumunu alabilir mi? Burada dikkat edilmesi gereken nokta, bu teknolojinin kullanım alanının olup olmadığıdır. Öyleyse, uzamsal kapsayıcı alanları LOCAL ile nasıl bağlantı kurar?
- Çözüldü. Evet. Bu,
XR_REFERENCE_SPACE_TYPE_VIEWüzerinden aynı oturumdaki uzamsal kapsayıcılar için zaten mümkündür ve görünüme bağlı içeriğin desteklenmesi tercih edilir. Oturumlar arasında (ör. başka bir işleme) uzamsal kapsayıcı pozlarını paylaşmak için beklenen yol,XR_EXT_spatial_anchorve mevcut kalıcılık ve paylaşım kalıplarından yararlanmaktır.
- Çözüldü. Evet. Bu,
Görünür olmayan bir uzamsal kapsayıcının alanı bulunabilir mi?
- Çözüldü. Hayır. Üç boyutlu kapsayıcı görünür olmadığında üç boyutlu kapsayıcının alanı bulunamaz. Bu, uygulamanın üç boyutlu sese sahip olmadığı ve spatial_container görünür olmadığında görünüme bağlı içeriği "hazırlayamayacağı" anlamına gelir. Üç boyutlu kapsayıcı görünür olmadığında uygulamanın, bu üç boyutlu kapsayıcı için kullanılan tüm CPU/GPU yükünü durdurması beklendiğinden her iki durum da normaldir.
Üç boyutlu kapsayıcı alanının, üç boyutlu kapsayıcıda nereye yerleştirilmesi bekleniyor? Öneriler, merkez veya minimum nokta (minX, minY, minZ) olmuştur.
- Çözüldü. Ortada. Mekansal kapsayıcı yeniden boyutlandırma kullanıcı deneyiminin beklendiği çoğu şekilde (hareketli kenarlar) hareket etmeyen bir konum yoktur. Center, OpenXR'ın diğer bölümlerinde yaygın olarak kullanılır. 3D model görüntüleyiciler genellikle bu kurala uymadığından, minimum koordinatı kullanan 2D bilgi işlemdeki pencerelerle uyumlu hale getirmedik.
Çalışma zamanının, uzamsal kapsayıcının temelini oluşturan kaynakları ne zaman oluşturması beklenir? Bu işlem bazen sistem hizmetleriyle IPC'yi içerir.
- Çözüldü.
xrCreateSpatialContainerEXTkapsamında eşzamanlı olarak. IPC söz konusu olsa da bir container'ın gerçekte oluşturulmasının genellikle ucuz olması beklenir. Bazı tedarikçilerin container'ları yönetmeyle ilgili global mutex'leri vardır ancak bunların genellikle uzun bir bekleme süresi olması beklenmez. Karşılıklı dışlama çekişmesiyle ilgili sorunlar, her tedarikçi tarafından giderilmesi beklenen tedarikçiye özgü hatalardır.
- Çözüldü.
Bir XrSession'ın uzamsal kapsayıcılar oluşturacağını ve bu nedenle eski oluşturma yolunu desteklemeyeceğini belirten bir sinyale ihtiyacımız var mı?
- Çözüldü. Evet. Oturum durumu makinesini kökten değiştiriyoruz.
Sürüm Geçmişi
Düzeltme 1, 06.08.2026 (Jared Finder, Google)
- İlk uzantı açıklaması