XR_ANDROID_spatial_annotation_tracking
Name String
XR_ANDROID_spatial_annotation_tracking
Uzantı Türü
Örnek uzantısı
Kayıtlı Uzantı Numarası
795
Düzeltme
1
Onay Durumu
Onaylanmadı
Uzantı ve Sürüm Bağımlılıkları
XR_EXT_spatial_entity
ve
XR_EXT_spatial_image_tracking
Son Değiştirilme Tarihi
2026-01-12
IP Durumu
Bilinen IP hak talebi yok.
Katkıda bulunanlar
Levana Chen, Google
Christopher Feil, Google
Martin Sundermeyer, Google
David Joseph Tan, Google
Jared Finder, Google
Nihav Jain, Google
Genel Bakış
Bu uzantı, sahnedeki çeşitli ek açıklamaları izlemek için XR_EXT_spatial_entity uzantısına ek açıklama izleme özelliği sağlar. Bu API, uygulamaların çalışma zamanı referanslarıyla tanımlanan fiziksel veya sanal nesnelerin üzerine yer paylaşımları koymasına olanak tanır.
Bu uzantı, tam olarak 4 kenarı olan bir çokgen (yani dışbükey dörtgen) olan ve çalışma zamanı referansında genelleştirilmiş bir 2D sınırlayıcı kutuyu temsil eden "Dörtgen" adlı temel bir ek açıklama türü sağlar. İzlenen dörtgen not, aşağıdaki bileşenlere sahip bir uzamsal öğe olarak gösterilir:
XR_SPATIAL_COMPONENT_TYPE_ANNOTATION_QUAD_ANDROID
Uygulamalar genellikle aşağıdaki desenlerde uzamsal açıklama izleme uzantısını kullanabilir:
- Bir uygulama önce XrSpatialReferenceCacheANDROID tutacını oluşturur. Bu tutaç, belirtilen kaynaktan çalışma zamanı referanslarını kaydetmeye başlar.
- Uygulama daha sonra XrSpatialReferenceImageEXT için bir çalışma zamanı referansı yakalar ve referans önbelleğinin zaman aralığı içinde referansta istenen bir ek açıklamayı tanımlar.
- Uygulama daha sonra XrSpatialCapabilityConfigurationAnnotationTrackingANDROID tarafından verilen XrSpatialReferenceImageEXT temelinde bir XrSpatialContextEXT tutma yeri oluşturur .
- Uygulama, bellek kullanımını azaltmak için çalışma zamanı referanslarının kaydedilmesini durdurmak üzere XrSpatialReferenceCacheANDROID tanıtıcısını kaldırabilir veya başlatma sonucunu onaylamak için
XR_TYPE_EVENT_DATA_SPATIAL_ANNOTATION_TRACKING_ANDROIDetkinliğini bekleyebilir. - Uygulama daha sonra, açıklamanın başlatma sonucunu onaylamak için
XR_TYPE_EVENT_DATA_SPATIAL_ANNOTATION_TRACKING_ANDROIDetkinliğini çeker. - Başlatma işlemi başarılı olursa uygulama, ek açıklamayı izlemek için
XR_TYPE_EVENT_DATA_SPATIAL_DISCOVERY_RECOMMENDED_EXTetkinliğini çekebilir. - Başlatma işlemi başarısız olursa uygulama, başarısızlık nedenini belirlemek için etkinlikte döndürülen hata kodunu kullanabilir ve yeni bir ek açıklama başlatmak için mevcut XrSpatialContextEXT tanıtıcısını kaldırabilir.
- Başlatma sonucundan bağımsız olarak uygulama, etkinliği aldıktan sonra bellek kullanımını azaltmak için görüntü arabelleğini serbest bırakabilir.
- Uygulama, uzamsal öğe erişim kalıplarına göre ek açıklamaları keşfeder ve sorgular.
- Uygulama, geçerli bir XrSpatialReferenceCacheANDROID zaman aralığında yeni bir referanstaki ek açıklamaları izlemek için ek XrSpatialContextEXT tutacağı oluşturabilir .
- Uygulama, çalışma zamanında algılanabilir ve izlenebilir ek açıklamalar kümesini dinamik olarak azaltmak için XrSpatialContextEXT tutamaçlarını yok edebilir.
Çalışma Zamanı Desteği
Bir çalışma zamanı, aşağıdaki özelliği listeleyerek xrEnumerateSpatialCapabilitiesEXT kullanarak açıklama izleme özelliğini desteklediğini reklamla duyurmalıdır:
XR_SPATIAL_CAPABILITY_ANNOTATION_TRACKING_ANDROID
Çalışma zamanı, ek açıklama izleme özelliğini desteklediğinde:
- xrEnumerateSpatialCapabilityComponentTypesEXT aracılığıyla desteklenen açıklama bileşenlerini listeleyerek en az bir açıklama bileşenini desteklemesi gerekir .
capabilityayarıXR_SPATIAL_CAPABILITY_ANNOTATION_TRACKING_ANDROIDolacak şekilde xrEnumerateSpatialReferenceImageFormatsEXT ile desteklenen referans biçimlerini listeleyerek XrSpatialReferenceImageFormatEXT biçimlerinden en az birini desteklemelidir.capabilityayarıXR_SPATIAL_CAPABILITY_ANNOTATION_TRACKING_ANDROIDolarak belirlenmiş şekilde xrEnumerateSpatialAnnotationReferenceSourcesANDROID aracılığıyla desteklenen referans kaynaklarını listeleyerek XrSpatialAnnotationReferenceSourceANDROID'den en az birini desteklemelidir .
xrEnumerateSpatialAnnotationReferenceSourcesANDROID işlevi şu şekilde tanımlanır:
XrResult xrEnumerateSpatialAnnotationReferenceSourcesANDROID(
XrInstance instance,
XrSystemId systemId,
XrSpatialCapabilityEXT capability,
uint32_t sourceCapacityInput,
uint32_t* sourceCountOutput,
XrSpatialAnnotationReferenceSourceANDROID* sources);
Parametre Açıklamaları
instance, XrInstance için bir tutamaktır .systemId, referans kaynakları numaralandırılacak olanXrSystemId'dır.capability, referans kaynaklarının numaralandırılacağı XrSpatialCapabilityEXT'dir.sourceCapacityInput,sourcesdizisinin kapasitesidir veya gerekli kapasitenin alınması için istek olduğunu belirtmek üzere 0'dır.sourceCountOutput, kaynak sayısıdır veyasourceCapacityInputyetersizse gereken kapasitedir.sources, XrSpatialAnnotationReferenceSourceANDROID dizisidir .sourceCapacityInput0 ise sonuçNULLolabilir.- Gerekli
sourcesboyutunun alınmasıyla ilgili ayrıntılı açıklama için Arabellek Boyutu Parametreleri bölümüne bakın.
Uygulama, xrEnumerateSpatialAnnotationReferenceSourcesANDROID kullanarak belirli bir XrSystemId tarafından desteklenen referans kaynaklarının listesini numaralandırabilir .
Çalışma zamanı, uzantısı instance için etkinleştirilmemiş referans kaynaklarını numaralandırmamalıdır.
Geçerli Kullanım (Dolaylı)
- xrEnumerateSpatialAnnotationReferenceSourcesANDROID çağrılmadan önce
XR_ANDROID_spatial_annotation_trackinguzantısı etkinleştirilmelidir. -
instancegeçerli bir XrInstance işleyeni olmalıdır. -
capabilitygeçerli bir XrSpatialCapabilityEXT değeri olmalıdır. -
sourceCountOutput,uint32_tdeğerine yönelik bir işaretçi olmalıdır. -
sourceCapacityInputdeğeri0değilsesources,sourceCapacityInputXrSpatialAnnotationReferenceSourceANDROID değerlerinden oluşan bir dizinin işaretçisi 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_SPATIAL_CAPABILITY_UNSUPPORTED_EXTXR_ERROR_SYSTEM_INVALIDXR_ERROR_VALIDATION_FAILURE
typedef enum XrSpatialAnnotationReferenceSourceANDROID {
XR_SPATIAL_ANNOTATION_REFERENCE_SOURCE_CAMERA_ANDROID = 0,
XR_SPATIAL_ANNOTATION_REFERENCE_SOURCE_MEDIA_PROJECTION_ANDROID = 1,
XR_SPATIAL_ANNOTATION_REFERENCE_SOURCE_MAX_ENUM_ANDROID = 0x7FFFFFFF
} XrSpatialAnnotationReferenceSourceANDROID;
XrSpatialAnnotationReferenceSourceANDROID numaralandırması, bir ek açıklama için meta verileri sağlayan referansın kaynağını açıklar.
Numaralandırılmış değerler aşağıdaki anlamlara gelir:
Enum Açıklaması
XR_SPATIAL_ANNOTATION_REFERENCE_SOURCE_CAMERA_ANDROID
Referans görsel, bir Android kamera API'sinden alınan kırpılmamış bir resimdir. Örneğin, Camera2 CameraDevice ile ilişkili bir ImageReader'dan alınan bir Image veya CameraX ile ilişkili bir ImageAnalysis'ten alınan bir ImageProxy. Bu genellikle öne bakan RGB kameralardan biridir.
XR_SPATIAL_ANNOTATION_REFERENCE_SOURCE_MEDIA_PROJECTION_ANDROID
Referans görsel, Android MediaProjection API'den elde edilen kırpılmamış bir resimdir. Örneğin, MediaProjection sanal ekranıyla ilişkili bir ImageReader'dan alınan bir resim. Sanal ve gerçek içerikler bu kapsamda yer alabilir.
XrSystemSpatialAnnotationPropertiesANDROID yapısı şu şekilde tanımlanır:
typedef struct XrSystemSpatialAnnotationPropertiesANDROID {
XrStructureType type;
void* next;
uint32_t referenceCacheTimespan;
uint32_t maxReferencePixelWidth;
uint32_t maxReferencePixelHeight;
uint32_t maxReferenceCount;
uint32_t maxAnnotationCount;
} XrSystemSpatialAnnotationPropertiesANDROID;
Üye Açıklamaları
type, bu yapının XrStructureType'ıdır.next,NULLveya bir yapı zincirindeki sonraki yapının işaretçisidir.referenceCacheTimespan, geçerli bir XrSpatialReferenceCacheANDROID tutma yerinin saniye cinsinden zaman aralığını gösterir.maxReferencePixelWidth, referans resimlerin kenarının piksel cinsinden maksimum genişliğini gösterir.maxReferencePixelHeight, referans resimlerin kenarının piksel cinsinden maksimum yüksekliğini gösterir.maxReferenceCount, aynı anda ayrılacak maksimum referans resmi sayısını gösterir.maxAnnotationCount, aynı anda izlenecek maksimum açıklama sayısını gösterir.
Çalışma zamanı, ek açıklama izleme özelliğini desteklediğinde bir uygulama, xrGetSystemProperties çağrılırken XrSystemSpatialAnnotationPropertiesANDROID yapısını XrSystemProperties'e zincirleyerek ilgili sistem özelliklerini inceleyebilir .
XrSpatialReferenceImageEXT :: width from XrSpatialCapabilityConfigurationAnnotationTrackingANDROID :: reference değeri maxReferencePixelWidth değerini aşarsa çalışma zamanı , xrCreateSpatialContextAsyncEXT çağrıldığında XR_ERROR_VALIDATION_FAILURE değerini döndürmelidir .
XrSpatialReferenceImageEXT :: height from XrSpatialCapabilityConfigurationAnnotationTrackingANDROID :: reference değeri maxReferencePixelHeight değerini aşarsa çalışma zamanı , xrCreateSpatialContextAsyncEXT çağrıldığında XR_ERROR_VALIDATION_FAILURE değerini döndürmelidir .
XrSpatialCapabilityConfigurationAnnotationTrackingANDROID :: time , XrSpatialReferenceCacheANDROID :: cache zaman aralığının dışındaysa çalışma zamanı, xrCreateSpatialContextAsyncEXT çağrıldığında XR_ERROR_TIME_INVALID değerini döndürmelidir . Uygulama, XrSpatialReferenceCacheANDROID zaman aralığında yeni bir referansla XrSpatialContextEXT tutamacını yeniden oluşturabilir .
Ayrılan referans resim sayısı maxReferenceCount değerini aşarsa çalışma zamanı XR_ERROR_LIMIT_REACHED değerini döndürmeli ve XrEventDataSpatialAnnotationTrackingANDROID :: initializationResult aracılığıyla başlatma hatasını belirtmelidir. Uygulama, XrSpatialContextEXT tanıtıcısını kaldırabilir ve bekleyen ilk kullanıma hazırlama işlemi tamamlandıktan sonra tekrar deneyebilir.
Etkin ek açıklamaların sayısı maxAnnotationCount değerini aşarsa çalışma zamanı , xrCreateSpatialContextAsyncEXT çağrıldığında XR_ERROR_VALIDATION_FAILURE değerini döndürmelidir.
Geçerli Kullanım (Dolaylı)
-
XR_ANDROID_spatial_annotation_trackinguzantısı, XrSystemSpatialAnnotationPropertiesANDROID kullanılmadan önce etkinleştirilmelidir. -
typeXR_TYPE_SYSTEM_SPATIAL_ANNOTATION_PROPERTIES_ANDROIDolmalıdır. -
nextmust beNULLor a valid pointer to the next structure in a structure chain
Çalışma zamanı referans önbelleği
XR_DEFINE_HANDLE(XrSpatialReferenceCacheANDROID)
XrSpatialReferenceCacheANDROID işleyici, belirli bir kaynaktan kaydedilen çalışma zamanı referanslarının önbelleğini temsil eder.
xrCreateSpatialReferenceCacheAsyncANDROID işlevi şu şekilde tanımlanır:
XrResult xrCreateSpatialReferenceCacheAsyncANDROID(
XrSession session,
const XrSpatialReferenceCacheCreateInfoANDROID* createInfo,
XrFutureEXT* future);
Parametre Açıklamaları
session, referans önbelleğinin etkin olacağı bir XrSession'dır.createInfo, referans önbellek parametrelerini belirtmek için kullanılan bir XrSpatialReferenceCacheCreateInfoANDROID işaretçisidir.future,XrFutureEXTçıkış tutamacının işaretçisidir .
Uygulama, xrCreateSpatialReferenceCacheAsyncANDROID işlevini çağırarak XrSpatialReferenceCacheANDROID tutacını oluşturabilir . Çalışma zamanının izleme hizmetlerini başlatması biraz zaman alabilir. Uygulama daha sonra bu eşzamansız işlemin tamamlanıp tamamlanmadığını kontrol etmek için xrCreateSpatialReferenceCacheCompleteANDROID'i tekrar tekrar çağırabilir.
Çalışma zamanı, xrEnumerateSpatialCapabilitiesEXT tarafından XrSpatialReferenceCacheCreateInfoANDROID :: capability listelenmiyorsa XR_ERROR_SPATIAL_CAPABILITY_UNSUPPORTED_EXT değerini döndürmelidir.
Çalışma zamanı, xrEnumerateSpatialAnnotationReferenceSourcesANDROID tarafından belirli bir özellik için XrSpatialReferenceCacheCreateInfoANDROID :: source listelenmiyorsa XR_ERROR_FEATURE_UNSUPPORTED döndürmelidir.
Uygulama, belirli bir özellik için kaynak başına yalnızca bir tanıtıcı oluşturabilir. Aksi takdirde, çalışma zamanı XR_ERROR_LIMIT_REACHED döndürmelidir .
Uygulama, yeni bir XrSpatialContextEXT işleyicisi yapılandırmak için XrSpatialReferenceCacheANDROID işleyicisinin zaman aralığı boyunca çalışma zamanı referanslarını yakalayabilir.
Geçerli Kullanım (Dolaylı)
- xrCreateSpatialReferenceCacheAsyncANDROID çağrılmadan önce
XR_ANDROID_spatial_annotation_trackinguzantısı etkinleştirilmelidir. -
sessiongeçerli bir XrSession işleyeni olmalıdır. -
createInfogeçerli bir XrSpatialReferenceCacheCreateInfoANDROID yapısına yönelik bir işaretçi olmalıdır. -
future,XrFutureEXTdeğerine yönelik bir işaretçi olmalıdır.
Dönüş Kodları
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FEATURE_UNSUPPORTEDXR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_LIMIT_REACHEDXR_ERROR_OUT_OF_MEMORYXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_SPATIAL_CAPABILITY_UNSUPPORTED_EXTXR_ERROR_VALIDATION_FAILURE
XrSpatialReferenceCacheCreateInfoANDROID yapısı şu şekilde tanımlanır:
typedef struct XrSpatialReferenceCacheCreateInfoANDROID {
XrStructureType type;
const void* next;
XrSpatialCapabilityEXT capability;
XrSpatialAnnotationReferenceSourceANDROID source;
} XrSpatialReferenceCacheCreateInfoANDROID;
Üye Açıklamaları
type, bu yapının XrStructureType'ıdır.next,NULLveya bir yapı zincirindeki sonraki yapının işaretçisidir. Temel OpenXR'de veya bu uzantıda bu tür yapılar tanımlanmamıştır.capability, referans önbelleğinin hangi özellik için oluşturulduğunu açıklayan bir XrSpatialCapabilityEXT'dir.source, referans önbelleğin kaynağını açıklayan bir XrSpatialAnnotationReferenceSourceANDROID'dir.
XrSpatialReferenceCacheCreateInfoANDROID yapısı, XrSpatialReferenceCacheANDROID tutacını oluşturmak için gereken bilgileri açıklar.
Geçerli Kullanım (Dolaylı)
-
XR_ANDROID_spatial_annotation_trackinguzantısı, XrSpatialReferenceCacheCreateInfoANDROID kullanılmadan önce etkinleştirilmelidir. -
typeXR_TYPE_SPATIAL_REFERENCE_CACHE_CREATE_INFO_ANDROIDolmalıdır. -
nextmust beNULLor a valid pointer to the next structure in a structure chain -
capabilitygeçerli bir XrSpatialCapabilityEXT değeri olmalıdır. -
sourcegeçerli bir must XrSpatialAnnotationReferenceSourceANDROID değeri olmalıdır.
xrCreateSpatialReferenceCacheCompleteANDROID işlevi şu şekilde tanımlanır:
XrResult xrCreateSpatialReferenceCacheCompleteANDROID(
XrSession session,
XrFutureEXT future,
XrCreateSpatialReferenceCacheCompletionANDROID* completion);
Parametre Açıklamaları
session, daha önce xrCreateSpatialReferenceCacheAsyncANDROID ::session'a iletilen XrSession'dır .future, xrCreateSpatialReferenceCacheAsyncANDROID ::futuretarafından alınanXrFutureEXT'dir .completion, XrCreateSpatialReferenceCacheCompletionANDROID öğesinin işaretçisidir .
Uygulama, xrCreateSpatialReferenceCacheAsyncANDROID tarafından başlatılan eşzamansız işlemin tamamlanmasını beklemek için xrCreateSpatialReferenceCacheCompleteANDROID'i çağırabilir .
Çalışma zamanı, future hazır durumda değilse XR_ERROR_FUTURE_PENDING_EXT değerini döndürmelidir. Çalışma zamanı, future zaten tamamlanmış veya iptal edilmişse XR_ERROR_FUTURE_INVALID_EXT değerini döndürmelidir.
Geçerli Kullanım (Dolaylı)
- xrCreateSpatialReferenceCacheCompleteANDROID çağrılmadan önce
XR_ANDROID_spatial_annotation_trackinguzantısı etkinleştirilmelidir. -
sessiongeçerli bir XrSession işleyeni olmalıdır. -
completionXrCreateSpatialReferenceCacheCompletionANDROID yapısına işaretçi olmalıdır.
Dönüş Kodları
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FEATURE_UNSUPPORTEDXR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_FUTURE_INVALID_EXTXR_ERROR_FUTURE_PENDING_EXTXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_LIMIT_REACHEDXR_ERROR_OUT_OF_MEMORYXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_VALIDATION_FAILURE
XrCreateSpatialReferenceCacheCompletionANDROID yapısı şu şekilde tanımlanır:
typedef struct XrCreateSpatialReferenceCacheCompletionANDROID {
XrStructureType type;
void* next;
XrResult futureResult;
XrSpatialReferenceCacheANDROID referenceCache;
} XrCreateSpatialReferenceCacheCompletionANDROID;
Üye Açıklamaları
type, bu yapının XrStructureType'ıdır.next,NULLveya bir yapı zincirindeki sonraki yapının işaretçisidir. Temel OpenXR'de veya bu uzantıda bu tür yapılar tanımlanmamıştır.futureResult, referans önbelleği oluşturma işleminin XrResult'ıdır.referenceCache, işlem başarılı olursa XrSpatialReferenceCacheANDROID tutma yeridir.
Gelecekteki İade Kodları
futureResult değerleri:
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FEATURE_UNSUPPORTEDXR_ERROR_RUNTIME_FAILUREXR_ERROR_INSTANCE_LOSTXR_ERROR_SESSION_LOSTXR_ERROR_OUT_OF_MEMORYXR_ERROR_LIMIT_REACHED
futureResult bir başarı koduysa çalışma zamanı geçerli bir referenceCache işleyeni döndürmelidir. referenceCache geçerliyse yalnızca xrCreateSpatialReferenceCacheAsyncANDROID :: session'nin kullanım ömrü boyunca veya uygulama, tutma yerini xrDestroySpatialReferenceCacheANDROID ile yok edene kadar geçerli kalır.
referenceCache geçerli olduğunda XrSystemSpatialAnnotationPropertiesANDROID :: referenceCacheTimespan içindeki önbellekleri kaydeder .
Geçerli Kullanım (Dolaylı)
-
XR_ANDROID_spatial_annotation_trackinguzantısı, XrCreateSpatialReferenceCacheCompletionANDROID kullanılmadan önce etkinleştirilmelidir. -
typeXR_TYPE_CREATE_SPATIAL_REFERENCE_CACHE_COMPLETION_ANDROIDolmalıdır. -
nextmust beNULLor a valid pointer to the next structure in a structure chain -
futureResultgeçerli bir XrResult değeri olmalıdır. -
referenceCachegeçerli bir XrSpatialReferenceCacheANDROID tutma yeri olmalıdır.
xrDestroySpatialReferenceCacheANDROID işlevi şu şekilde tanımlanır:
XrResult xrDestroySpatialReferenceCacheANDROID(
XrSpatialReferenceCacheANDROID cacheHandle);
Parametre Açıklamaları
cacheHandle, daha önce xrCreateSpatialReferenceCacheAsyncANDROID tarafından oluşturulan bir XrSpatialReferenceCacheANDROID'dir .
Uygulama, uzamsal bağlam oluşturma işlemi tamamlandığında cacheHandle tutamacını ve temel kaynakları serbest bırakmak için xrDestroySpatialReferenceCacheANDROID işlevini çağırabilir.
Geçerli Kullanım (Dolaylı)
-
XR_ANDROID_spatial_annotation_trackinguzantısı, xrDestroySpatialReferenceCacheANDROID çağrılmadan önce etkinleştirilmelidir. -
cacheHandlegeçerli bir XrSpatialReferenceCacheANDROID tutma yeri olmalıdır.
Thread Safety
cacheHandleve tüm alt tanıtıcılarına erişim, harici olarak senkronize edilmelidir.
Dönüş Kodları
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALID
Yapılandırma
XrSpatialCapabilityConfigurationAnnotationTrackingANDROID yapısı şu şekilde tanımlanır:
typedef struct XrSpatialCapabilityConfigurationAnnotationTrackingANDROID {
XrStructureType type;
const void* next;
XrSpatialCapabilityEXT capability;
uint32_t enabledComponentCount;
const XrSpatialComponentTypeEXT* enabledComponents;
XrSpatialReferenceCacheANDROID cache;
XrTime time;
XrSpatialReferenceImageEXT reference;
} XrSpatialCapabilityConfigurationAnnotationTrackingANDROID;
Üye Açıklamaları
type, bu yapının XrStructureType'ıdır.next,NULLveya bir yapı zincirindeki sonraki yapının işaretçisidir.capability, XrSpatialCapabilityEXT'dir ve zorunlu olarakXR_SPATIAL_CAPABILITY_ANNOTATION_TRACKING_ANDROIDolmalıdır .enabledComponentCount,enabledComponentsdizisindeki öğelerin sayısını açıklayan biruint32_t'dir.enabledComponents, XrSpatialComponentTypeEXT dizisine yönelik bir işaretçidir .cache,referenceyapılandırması için çalışma zamanı referanslarını kaydetmek üzere daha önce oluşturulmuş bir XrSpatialReferenceCacheANDROID'dir.time,referenceöğesinin yakalandığıXrTime'dır.reference, bir sonraki işaretçisine zincirlenmiş ek açıklamaları olan bir XrSpatialReferenceImageEXT'dir.
Uygulamalar, XrSpatialContextCreateInfoEXT :: capabilityConfigs içinde XrSpatialCapabilityConfigurationAnnotationTrackingANDROID yapısına bir işaretçi ekleyerek XR_SPATIAL_CAPABILITY_ANNOTATION_TRACKING_ANDROID uzamsal özelliğini etkinleştirebilir .
Çalışma zamanı, capability değeri XR_SPATIAL_CAPABILITY_ANNOTATION_TRACKING_ANDROID değilse XR_ERROR_VALIDATION_FAILURE değerini döndürmelidir .
Çalışma zamanı, reference herhangi bir ek açıklama içermiyorsa XR_ERROR_SPATIAL_CAPABILITY_CONFIGURATION_INVALID_EXT değerini döndürmelidir.
Çalışma zamanı, ek açıklama bileşeni enabledComponents içinde listeleniyorsa ancak reference ile ilişkili karşılık gelen ek açıklamalar yoksa XR_ERROR_SPATIAL_CAPABILITY_CONFIGURATION_INVALID_EXT değerini döndürmelidir.
Çalışma zamanı, cache öğesi xrCreateSpatialContextAsyncEXT işlevine iletilen aynı XrSession tarafından sahiplenilmiyorsa XR_ERROR_VALIDATION_FAILURE değerini döndürmelidir.
Çalışma zamanı, time, cache zaman aralığının dışındaysa XR_ERROR_TIME_INVALID değerini döndürmelidir.
Geçerli Kullanım (Dolaylı)
- XrSpatialCapabilityConfigurationAnnotationTrackingANDROID kullanılmadan önce
XR_ANDROID_spatial_annotation_trackinguzantısı etkinleştirilmelidir. -
typeXR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_ANNOTATION_TRACKING_ANDROIDolmalıdır. -
nextmust beNULLor a valid pointer to the next structure in a structure chain -
capabilitygeçerli bir XrSpatialCapabilityEXT değeri olmalıdır. -
enabledComponentsenabledComponentCountgeçerli XrSpatialComponentTypeEXT değerlerinden oluşan bir dizinin işaretçisi olmalıdır. -
cachegeçerli bir XrSpatialReferenceCacheANDROID tutma yeri olmalıdır. -
referencegeçerli bir XrSpatialReferenceImageEXT yapısı olmalıdır. -
enabledComponentCountparametresi0değerinden büyük olmalıdır.
Ek açıklama izleme etkinlikleri
XrEventDataSpatialAnnotationTrackingANDROID yapısı şu şekilde tanımlanır:
typedef struct XrEventDataSpatialAnnotationTrackingANDROID {
XrStructureType type;
const void* next;
XrSpatialContextEXT spatialContext;
uint32_t annotationIndex;
XrResult initializationResult;
} XrEventDataSpatialAnnotationTrackingANDROID;
Üye Açıklamaları
type, bu yapının XrStructureType'ıdır.next,NULLveya bir yapı zincirindeki sonraki yapının işaretçisidir.spatialContext, açıklama izlemenin etkinleştirildiği XrSpatialContextEXT'dir.annotationIndex, XrSpatialCapabilityConfigurationAnnotationTrackingANDROID ::referenceile ilişkili açıklama dizisindeki dizine eşlenir .initializationResult, ek açıklamanın başlatma sonucunu gösterir. Bu değerXR_SUCCESSdeğilse uygulama, ek açıklamayı yeniden başlatmak için XrSpatialContextEXT tanıtıcısını kaldırıp yeniden oluşturabilir veya diğer ek açıklamaları takip etmek içinspatialContextkullanmaya devam edebilir.
Geçerli Kullanım (Dolaylı)
- XrEventDataSpatialAnnotationTrackingANDROID kullanılmadan önce
XR_ANDROID_spatial_annotation_trackinguzantısı etkinleştirilmelidir. -
typeXR_TYPE_EVENT_DATA_SPATIAL_ANNOTATION_TRACKING_ANDROIDolmalıdır. -
nextmust beNULLor a valid pointer to the next structure in a structure chain
Çalışma zamanı, başlatma işleminin tamamlandığını belirtmek için her bir açıklama için XrEventDataSpatialAnnotationTrackingANDROID öğesini doldurmalıdır. Başlatma sonucundan bağımsız olarak, uygulama etkinliği aldıktan sonra bellek kullanımını azaltmak için görüntü arabelleğini serbest bırakabilir.
Not başarıyla başlatılırsa çalışma zamanı , initializationResult öğesini XR_SUCCESS ile doldurmalıdır. Uygulama, ek açıklamayı izlemek için XR_TYPE_EVENT_DATA_SPATIAL_DISCOVERY_RECOMMENDED_EXT etkinliğini çekebilir.
Aksi takdirde, çalışma zamanı, hata nedenini belirtmek için initializationResult öğesini uygun bir hata koduyla doldurmalıdır. Uygulama, yeni bir ek açıklama başlatmak veya diğer ek açıklamaları takip etmek için spatialContext öğesini kullanmaya devam etmek üzere XrSpatialContextEXT tanıtıcısını kaldırabilir.
Dörtlü Ek Açıklama
Bir çalışma zamanı, aşağıdaki bileşen türünü listeleyerek xrEnumerateSpatialCapabilityComponentTypesEXT kullanarak dörtlü ek açıklamaları desteklediğini bildirmelidir:
XR_SPATIAL_COMPONENT_TYPE_ANNOTATION_QUAD_ANDROID
Dörtlü Referans
XrSpatialAnnotationQuadReferenceANDROID yapısı şu şekilde tanımlanır:
typedef struct XrSpatialAnnotationQuadReferenceANDROID {
XrStructureType type;
const void* next;
uint32_t quadCount;
const XrSpatialAnnotationQuadANDROID* quads;
} XrSpatialAnnotationQuadReferenceANDROID;
Üye Açıklamaları
type, bu yapının XrStructureType'ıdır.next,NULLveya bir yapı zincirindeki sonraki yapının işaretçisidir.quadCount,quadsdizisindeki öğelerin sayısını açıklayan biruint32_t'dir.quads, XrSpatialAnnotationQuadANDROID dizisine yönelik bir işaretçidir .
Çalışma zamanı dörtlü ek açıklamaları desteklediğinde, bir uygulama XrSpatialAnnotationQuadReferenceANDROID yapısını XrSpatialReferenceImageEXT :: next ile zincirleyerek ek açıklamaları yapılandırabilir ve XrSpatialContextEXT işleyeni oluştururken XrSpatialCapabilityConfigurationAnnotationTrackingANDROID :: reference içinde referansı ayarlayabilir.
Çalışma zamanı, quadCount 0 ise xrCreateSpatialContextAsyncEXT işlevinden XR_ERROR_SPATIAL_CAPABILITY_CONFIGURATION_INVALID_EXT değerini döndürmelidir.
Geçerli Kullanım (Dolaylı)
-
XR_ANDROID_spatial_annotation_trackinguzantısı, XrSpatialAnnotationQuadReferenceANDROID kullanılmadan önce etkinleştirilmelidir. -
typeXR_TYPE_SPATIAL_ANNOTATION_QUAD_REFERENCE_ANDROIDolmalıdır. -
nextmust beNULLor a valid pointer to the next structure in a structure chain -
quadsquadCountgeçerli XrSpatialAnnotationQuadANDROID yapılarının dizisine yönelik bir işaretçi olmalıdır. -
quadCountparametresi0değerinden büyük olmalıdır.
XrSpatialAnnotationQuadANDROID yapısı şu şekilde tanımlanır:
typedef struct XrSpatialAnnotationQuadANDROID {
XrSpatialAnnotationQuadAlignmentANDROID alignment;
XrVector2f upperLeft;
XrVector2f upperRight;
XrVector2f lowerRight;
XrVector2f lowerLeft;
} XrSpatialAnnotationQuadANDROID;
Üye Açıklamaları
alignment, dörtgenin XrSpatialAnnotationQuadAlignmentANDROID'idir.upperLeft, orijinle ilgili dörtgenin sol üst köşesinin koordinatını açıklayan bir XrVector2f'dir.upperRight, orijinle ilişkili dörtgenin sağ üst köşesinin koordinatını açıklayan bir XrVector2f'dir.lowerRight, orijinle ilgili dörtgenin sağ alt köşesinin koordinatını açıklayan bir XrVector2f'dir.lowerLeft, orijinle ilişkili dörtgenin sol alt köşesinin koordinatını açıklayan bir XrVector2f'dir.
2D uzaydaki bir dörtgen, saat yönünde sıralanmış dışbükey bir dörtgendir. 4 köşenin değeri, dörtgenin ilişkilendirildiği kaynakla (0, 0) ilgilidir.
- XrSpatialReferenceImageEXT ile ilişkilendirildiğinde kaynak, resmin sol üst köşesidir. Burada X, genişlikteki piksele, Y ise yükseklikteki piksele karşılık gelir.
- XrSpatialAnnotationQuadDataANDROID ile ilişkilendirildiğinde kaynak , XrSpatialAnnotationQuadDataANDROID ::
originöğesinin XrSpaceLocationData ::poseile gösterilir .
Geçerli Kullanım (Dolaylı)
- XrSpatialAnnotationQuadANDROID kullanılmadan önce
XR_ANDROID_spatial_annotation_trackinguzantısı etkinleştirilmelidir. -
alignmentgeçerli bir XrSpatialAnnotationQuadAlignmentANDROID değeri olmalıdır.
typedef enum XrSpatialAnnotationQuadAlignmentANDROID {
XR_SPATIAL_ANNOTATION_QUAD_ALIGNMENT_SCREEN_ANDROID = 0,
XR_SPATIAL_ANNOTATION_QUAD_ALIGNMENT_OBJECT_ANDROID = 1,
XR_SPATIAL_ANNOTATION_QUAD_ALIGNMENT_MAX_ENUM_ANDROID = 0x7FFFFFFF
} XrSpatialAnnotationQuadAlignmentANDROID;
XrSpatialAnnotationQuadAlignmentANDROID numaralandırması, dörtlü notun hizalamasını açıklar.
Numaralandırılmış değerler aşağıdaki anlamlara gelir:
Enum Açıklaması
XR_SPATIAL_ANNOTATION_QUAD_ALIGNMENT_SCREEN_ANDROID
Açıklama dörtlüsü ekran düzlemine paraleldir. Düzlem içi döndürmesi ise yer çekimine kilitlenmiş olarak kalır. Çıktı, normal ve dik bir sınırlayıcı kutu olarak görünür.
XR_SPATIAL_ANNOTATION_QUAD_ALIGNMENT_OBJECT_ANDROID
Ek açıklama dörtgeni, doğrudan nesneye sabitlenir ve referans resimde tanımlanan hizalamayla eşleşir. Çıkış, nesnenin perspektifine uyacak şekilde şeklini ayarlayan dışbükey bir dörtgendir.
Quad Components
XrSpatialAnnotationQuadDataANDROID yapısı şu şekilde tanımlanır:
typedef struct XrSpatialAnnotationQuadDataANDROID {
uint32_t annotationIndex;
XrSpaceLocationData origin;
XrSpatialAnnotationQuadANDROID quad;
} XrSpatialAnnotationQuadDataANDROID;
Üye Açıklamaları
annotationIndex, XrSpatialCapabilityConfigurationAnnotationTrackingANDROID ::referencetarafından iletilen referansla ilişkili XrSpatialAnnotationQuadReferenceANDROID ::quadsdizisine eşlenen dizindir .origin, dörtgenin kök saldığı 2D düzlemin başlangıcını açıklayan bir XrSpaceLocationData'dır. Çalışma zamanı, başlangıç pozunun geçerli bitlerini belirtmek için XrSpaceLocationData ::locationFlagsdeğerini ayarlamalıdır.quad, yerel uzaydaki dörtgeni temsil eden bir XrSpatialAnnotationQuadANDROID'dir. Dörtgeni poz alanına dönüştürmek içinoriginöğesini kullanın.
Geçerli Kullanım (Dolaylı)
- XrSpatialAnnotationQuadDataANDROID kullanılmadan önce
XR_ANDROID_spatial_annotation_trackinguzantısı etkinleştirilmelidir. -
origingeçerli bir XrSpaceLocationData yapısı olmalıdır. -
quadgeçerli bir XrSpatialAnnotationQuadANDROID yapısı olmalıdır.
XrSpatialComponentAnnotationQuadListANDROID yapısı şu şekilde tanımlanır:
typedef struct XrSpatialComponentAnnotationQuadListANDROID {
XrStructureType type;
void* next;
uint32_t quadCount;
XrSpatialAnnotationQuadDataANDROID* quads;
} XrSpatialComponentAnnotationQuadListANDROID;
Üye Açıklamaları
type, bu yapının XrStructureType'ıdır.next,NULLveya bir yapı zincirindeki sonraki yapının işaretçisidir.quadCount,quadsdizisindeki öğelerin sayısını açıklayan biruint32_t'dir.quads, XrSpatialAnnotationQuadDataANDROID dizisidir .
Uygulama, XrSpatialComponentDataQueryConditionEXT :: componentTypes içine XR_SPATIAL_COMPONENT_TYPE_ANNOTATION_QUAD_ANDROID ekleyerek ve XrSpatialComponentDataQueryResultEXT öğesinin sonraki işaretçi zincirine XrSpatialComponentAnnotationQuadListANDROID ekleyerek XrSpatialSnapshotEXT içindeki uzamsal öğelerin dörtlü açıklama bileşenini sorgulayabilir.
Çalışma zamanı, XrSpatialComponentAnnotationQuadListANDROID, XrSpatialComponentDataQueryResultEXT :: next zincirinde bir sonraki öğe ise ancak XR_SPATIAL_COMPONENT_TYPE_ANNOTATION_QUAD_ANDROID, XrSpatialComponentDataQueryConditionEXT :: componentTypes içinde yer almıyorsa xrQuerySpatialComponentDataEXT'den XR_ERROR_VALIDATION_FAILURE döndürmelidir.
Çalışma zamanı, quadCount değeri XrSpatialComponentDataQueryResultEXT :: entityIdCountOutput değerinden küçükse xrQuerySpatialComponentDataEXT işlevinden XR_ERROR_SIZE_INSUFFICIENT değerini döndürmelidir .
Geçerli Kullanım (Dolaylı)
- XrSpatialComponentAnnotationQuadListANDROID kullanılmadan önce
XR_ANDROID_spatial_annotation_trackinguzantısı etkinleştirilmelidir. -
typeXR_TYPE_SPATIAL_COMPONENT_ANNOTATION_QUAD_LIST_ANDROIDolmalıdır. -
nextmust beNULLor a valid pointer to the next structure in a structure chain -
quadsquadCountXrSpatialAnnotationQuadDataANDROID yapılarından oluşan bir dizinin işaretçisi olmalıdır. -
quadCountparametresi0değerinden büyük olmalıdır.
Örnek Kod
Çalışma zamanı desteğini kontrol etme
Aşağıdaki örnek kod, çalışma zamanının ek açıklama izleme özelliğini destekleyip desteklemediğinin nasıl kontrol edileceğini gösterir.
XrInstance instance; // previously initialized
XrSystemId systemId; // previously initialized
XrSession session; // previously initialized
XrSpace localSpace; // previously initialized, e.g. from
// XR_REFERENCE_SPACE_TYPE_LOCAL
PFN_xrEnumerateSpatialCapabilitiesEXT xrEnumerateSpatialCapabilitiesEXT;
PFN_xrEnumerateSpatialAnnotationReferenceSourcesANDROID xrEnumerateSpatialAnnotationReferenceSourcesANDROID;
PFN_xrEnumerateSpatialReferenceImageFormatsEXT xrEnumerateSpatialReferenceImageFormatsEXT;
PFN_xrEnumerateSpatialCapabilityComponentTypesEXT xrEnumerateSpatialCapabilityComponentTypesEXT;
// Check spatial annotation tracking capability
uint32_t capabilityCount;
CHK_XR(xrEnumerateSpatialCapabilitiesEXT(instance, systemId, 0,
&capabilityCount, nullptr));
std::vector<XrSpatialCapabilityEXT> capabilities(capabilityCount);
CHK_XR(xrEnumerateSpatialCapabilitiesEXT(instance, systemId, capabilityCount,
&capabilityCount,
capabilities.data()));
if (std::find(capabilities.begin(), capabilities.end(),
XR_SPATIAL_CAPABILITY_ANNOTATION_TRACKING_ANDROID) ==
capabilities.end()) {
// System does not support spatial annotation tracking.
return;
}
// Inspect system properties for annotation tracking variables
XrSystemSpatialAnnotationPropertiesANDROID annotationSystemProperties{
XR_TYPE_SYSTEM_SPATIAL_ANNOTATION_PROPERTIES_ANDROID};
XrSystemProperties systemProperties{.type = XR_TYPE_SYSTEM_PROPERTIES,
.next = &annotationSystemProperties,
.systemId = systemId};
CHK_XR(xrGetSystemProperties(instance, systemId, &systemProperties));
if (annotationSystemProperties.maxAnnotationCount == 0) {
// System does not support any active annotations.
return;
}
// Enumerate supported reference sources
uint32_t sourceCountOutput = 0;
XrSpatialAnnotationReferenceSourceANDROID desiredSource =
XR_SPATIAL_ANNOTATION_REFERENCE_SOURCE_CAMERA_ANDROID;
CHK_XR(xrEnumerateSpatialAnnotationReferenceSourcesANDROID(
instance, systemId, XR_SPATIAL_CAPABILITY_ANNOTATION_TRACKING_ANDROID,
0, &sourceCountOutput, nullptr));
std::vector<XrSpatialAnnotationReferenceSourceANDROID> sources(sourceCountOutput);
CHK_XR(xrEnumerateSpatialAnnotationReferenceSourcesANDROID(
instance, systemId, XR_SPATIAL_CAPABILITY_ANNOTATION_TRACKING_ANDROID,
sourceCountOutput, &sourceCountOutput, sources.data()));
if (std::find(sources.begin(), sources.end(), desiredSource) == sources.end()) {
// The desired source is not supported.
return;
}
// Enumerate supported reference image formats, provided by XR_EXT_spatial_image_tracking.
uint32_t formatCountOutput = 0;
XrSpatialReferenceImageFormatEXT desiredFormat =
XR_SPATIAL_REFERENCE_IMAGE_FORMAT_YUV_420_888_EXT; // Or XR_SPATIAL_REFERENCE_IMAGE_FORMAT_RGBA_8888_EXT for screenshot.
CHK_XR(xrEnumerateSpatialReferenceImageFormatsEXT(
instance, systemId, XR_SPATIAL_CAPABILITY_ANNOTATION_TRACKING_ANDROID, 0,
&formatCountOutput, nullptr));
std::vector<XrSpatialReferenceImageFormatEXT> formats(formatCountOutput);
CHK_XR(xrEnumerateSpatialReferenceImageFormatsEXT(
instance, systemId, XR_SPATIAL_CAPABILITY_ANNOTATION_TRACKING_ANDROID,
formats.size(), &formatCountOutput, formats.data()));
if (std::find(formats.begin(), formats.end(), desiredFormat) == formats.end()) {
// The desired format is not supported
return;
}
// Enumerate supported components for annotation tracking capability.
XrSpatialCapabilityComponentTypesEXT capabilityComponentTypes{
XR_TYPE_SPATIAL_CAPABILITY_COMPONENT_TYPES_EXT};
CHK_XR(xrEnumerateSpatialCapabilityComponentTypesEXT(
instance, systemId, XR_SPATIAL_CAPABILITY_ANNOTATION_TRACKING_ANDROID,
&capabilityComponentTypes));
std::vector<XrSpatialComponentTypeEXT>
annotationTypes(capabilityComponentTypes.componentTypeCountOutput);
capabilityComponentTypes.componentTypeCapacityInput = annotationTypes.size();
capabilityComponentTypes.componentTypes = annotationTypes.data();
CHK_XR(xrEnumerateSpatialCapabilityComponentTypesEXT(
instance, systemId, XR_SPATIAL_CAPABILITY_ANNOTATION_TRACKING_ANDROID,
&capabilityComponentTypes));
// Check supported annotation components.
XrSpatialComponentTypeEXT desiredComponent =
XR_SPATIAL_COMPONENT_TYPE_ANNOTATION_QUAD_ANDROID;
const auto supportedComponent = [&annotationTypes](
XrSpatialComponentTypeEXT component) {
return std::find(annotationTypes.begin(), annotationTypes.end(), component) !=
annotationTypes.end();
};
if (!supportedComponent(desiredComponent)) {
// The desired annotation is not supported.
return;
}
Dörtlü notu yapılandırma
Aşağıdaki örnek kodda dörtlü açıklamanın nasıl yapılandırılacağı gösterilmektedir.
XrInstance instance; // previously initialized
XrSystemId systemId; // previously initialized
XrSession session; // previously initialized
XrSpace localSpace; // previously initialized, e.g. from
// XR_REFERENCE_SPACE_TYPE_LOCAL
PFN_xrCreateSpatialReferenceCacheAsyncANDROID xrCreateSpatialReferenceCacheAsyncANDROID;
PFN_xrCreateSpatialReferenceCacheCompleteANDROID xrCreateSpatialReferenceCacheCompleteANDROID;
PFN_xrDestroySpatialReferenceCacheANDROID xrDestroySpatialReferenceCacheANDROID;
PFN_xrCreateSpatialContextAsyncEXT xrCreateSpatialContextAsyncEXT;
PFN_xrCreateSpatialContextCompleteEXT xrCreateSpatialContextCompleteEXT;
void (*waitUntilReady)(XrFutureEXT);
XrSpatialReferenceImageFormatEXT desiredFormat;
XrSpatialAnnotationReferenceSourceANDROID desiredSource;
XrSpatialComponentTypeEXT desiredComponent;
// Create and start reference cache to prepare for capturing reference images.
XrSpatialReferenceCacheANDROID referenceCache;
XrSpatialReferenceCacheCreateInfoANDROID cacheCreateInfo{
.type = XR_TYPE_SPATIAL_REFERENCE_CACHE_CREATE_INFO_ANDROID,
.next = nullptr,
.capability = XR_SPATIAL_CAPABILITY_ANNOTATION_TRACKING_ANDROID,
.source = desiredSource,
};
XrFutureEXT cacheFuture = XR_NULL_FUTURE_EXT;
CHK_XR(xrCreateSpatialReferenceCacheAsyncANDROID(session, &cacheCreateInfo, &cacheFuture));
waitUntilReady(cacheFuture);
XrCreateSpatialReferenceCacheCompletionANDROID cacheCompletion{
XR_TYPE_CREATE_SPATIAL_REFERENCE_CACHE_COMPLETION_ANDROID};
CHK_XR(xrCreateSpatialReferenceCacheCompleteANDROID(session, cacheFuture,
&cacheCompletion));
if (cacheCompletion.futureResult != XR_SUCCESS) {
// Error, reference cache creation failed
return;
}
referenceCache = cacheCompletion.referenceCache;
// Create the reference image with quad annotations
// YUV 4:2:0 Planar:
// ----------------------
// | Y |Cb |Cr |
// ----------------------
XrSpatialReferenceImagePlaneEXT cameraImagePlanes[3];
// for each plane (0=Y, 1=U(cb), 2=V(Cr)) return by Image#getPlanes().
for (int i = 0; i < 3; ++i) {
cameraImagePlanes[i].buffer; // read from Plane#getBuffer().
cameraImagePlanes[i].bufferSize; // set each buffer size. Y = width * height (bytes); U = Y / 4 (bytes); V = Y / 4 (bytes).
cameraImagePlanes[i].rowStride; // read from Plane#getRowStride().
cameraImagePlanes[i].pixelStride; // read from Plane#getPixelStride().
}
XrSpatialReferenceImageEXT referenceImage{
XR_TYPE_SPATIAL_REFERENCE_IMAGE_EXT};
referenceImage.width = 640;
referenceImage.height = 480;
referenceImage.format = desiredFormat;
referenceImage.planeCount = 3;
referenceImage.planes = cameraImagePlanes;
XrSpatialAnnotationQuadANDROID
quad; // quad coordinates within the reference image.
quad.alignment = XR_SPATIAL_ANNOTATION_QUAD_ALIGNMENT_OBJECT_ANDROID;
// Set unnormalized pixel coordinates of 4 corners.
quad.upperLeft = {0.0, 0.0};
quad.upperRight = {0.0, 100.0};
quad.lowerRight = {100.0, 100.0};
quad.lowerLeft = {0.0, 100.0};
XrSpatialAnnotationQuadReferenceANDROID quadReference{
XR_TYPE_SPATIAL_ANNOTATION_QUAD_REFERENCE_ANDROID};
quadReference.quads = &quad;
quadReference.quadCount = 1;
referenceImage.next = &quadReference;
// Create the spatial context with annotation configuration.
XrSpatialContextEXT spatialContext{};
{
const std::array<XrSpatialComponentTypeEXT, 1> enabledComponents = {
desiredComponent,
};
// Configure annotation tracking
XrSpatialCapabilityConfigurationAnnotationTrackingANDROID annotationConfig{
XR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_ANNOTATION_TRACKING_ANDROID};
annotationConfig.capability =
XR_SPATIAL_CAPABILITY_ANNOTATION_TRACKING_ANDROID;
annotationConfig.enabledComponentCount = enabledComponents.size();
annotationConfig.enabledComponents = enabledComponents.data();
annotationConfig.cache = referenceCache;
annotationConfig.time; // The time when this reference image is captured.
annotationConfig.reference = referenceImage;
std::vector<XrSpatialCapabilityConfigurationBaseHeaderEXT *>
capabilityConfigs;
capabilityConfigs.push_back(
reinterpret_cast<XrSpatialCapabilityConfigurationBaseHeaderEXT *>(
&annotationConfig));
XrSpatialContextCreateInfoEXT spatialContextCreateInfo{
XR_TYPE_SPATIAL_CONTEXT_CREATE_INFO_EXT};
spatialContextCreateInfo.capabilityConfigCount = capabilityConfigs.size();
spatialContextCreateInfo.capabilityConfigs = capabilityConfigs.data();
XrFutureEXT createContextFuture = XR_NULL_FUTURE_EXT;
CHK_XR(xrCreateSpatialContextAsyncEXT(session, &spatialContextCreateInfo,
&createContextFuture));
waitUntilReady(createContextFuture);
XrCreateSpatialContextCompletionEXT completion{
XR_TYPE_CREATE_SPATIAL_CONTEXT_COMPLETION_EXT};
CHK_XR(xrCreateSpatialContextCompleteEXT(session, createContextFuture,
&completion));
if (completion.futureResult != XR_SUCCESS) {
// Error, spatial context creation failed
return;
}
spatialContext = completion.spatialContext;
CHK_XR(xrDestroySpatialReferenceCacheANDROID(referenceCache));
}
Etkin notları keşfetme
Aşağıdaki örnek kodda, açıklamaların nasıl bulunacağı ve sorgulanacağı gösterilmektedir.
XrInstance instance; // previously initialized
XrSession session; // previously initialized
XrSpace localSpace; // previously initialized, e.g. from
// XR_REFERENCE_SPACE_TYPE_LOCAL
XrSpatialContextEXT spatialContext; // previously created
PFN_xrCreateSpatialDiscoverySnapshotAsyncEXT xrCreateSpatialDiscoverySnapshotAsyncEXT;
PFN_xrCreateSpatialDiscoverySnapshotCompleteEXT xrCreateSpatialDiscoverySnapshotCompleteEXT;
PFN_xrQuerySpatialComponentDataEXT xrQuerySpatialComponentDataEXT;
PFN_xrDestroySpatialSnapshotEXT xrDestroySpatialSnapshotEXT;
PFN_xrPollEvent xrPollEvent;
PFN_xrDestroySpatialContextEXT xrDestroySpatialContextEXT;
void (*waitUntilReady)(XrFutureEXT);
XrSpatialComponentTypeEXT desiredComponent; // e.g. XR_SPATIAL_COMPONENT_TYPE_ANNOTATION_QUAD_ANDROID
auto discoverAnnotations = [&](XrSpatialContextEXT spatialContext, XrTime time,
XrSpace baseSpace) {
std::array<XrSpatialComponentTypeEXT, 1> snapshotComponents{desiredComponent};
XrSpatialDiscoverySnapshotCreateInfoEXT snapshotCreateInfo{
XR_TYPE_SPATIAL_DISCOVERY_SNAPSHOT_CREATE_INFO_EXT};
snapshotCreateInfo.componentTypeCount = snapshotComponents.size();
snapshotCreateInfo.componentTypes = snapshotComponents.data();
XrFutureEXT discoveryFuture = XR_NULL_FUTURE_EXT;
CHK_XR(xrCreateSpatialDiscoverySnapshotAsyncEXT(
spatialContext, &snapshotCreateInfo, &discoveryFuture));
waitUntilReady(discoveryFuture);
XrCreateSpatialDiscoverySnapshotCompletionInfoEXT completionInfo{
XR_TYPE_CREATE_SPATIAL_DISCOVERY_SNAPSHOT_COMPLETION_INFO_EXT};
completionInfo.baseSpace = baseSpace;
completionInfo.time = time;
completionInfo.future = discoveryFuture;
XrCreateSpatialDiscoverySnapshotCompletionEXT completion{
XR_TYPE_CREATE_SPATIAL_DISCOVERY_SNAPSHOT_COMPLETION_EXT};
CHK_XR(xrCreateSpatialDiscoverySnapshotCompleteEXT(
spatialContext, &completionInfo, &completion));
if (completion.futureResult == XR_SUCCESS) {
// Query for desired annotation data, e.g. quad.
XrSpatialComponentTypeEXT componentsToQuery[] = {
XR_SPATIAL_COMPONENT_TYPE_ANNOTATION_QUAD_ANDROID};
XrSpatialComponentDataQueryConditionEXT queryCond{
XR_TYPE_SPATIAL_COMPONENT_DATA_QUERY_CONDITION_EXT};
queryCond.componentTypeCount = 1;
queryCond.componentTypes = componentsToQuery;
XrSpatialComponentDataQueryResultEXT queryResult{
XR_TYPE_SPATIAL_COMPONENT_DATA_QUERY_RESULT_EXT};
CHK_XR(xrQuerySpatialComponentDataEXT(completion.snapshot, &queryCond,
&queryResult));
std::vector<XrSpatialEntityIdEXT> entityIds(
queryResult.entityIdCountOutput);
std::vector<XrSpatialEntityTrackingStateEXT> entityStates(
queryResult.entityStateCountOutput);
queryResult.entityIdCapacityInput = entityIds.size();
queryResult.entityIds = entityIds.data();
queryResult.entityStateCapacityInput = entityStates.size();
queryResult.entityStates = entityStates.data();
std::vector<XrSpatialAnnotationQuadDataANDROID> quads(
queryResult.entityIdCountOutput);
XrSpatialComponentAnnotationQuadListANDROID quadList{
XR_TYPE_SPATIAL_COMPONENT_ANNOTATION_QUAD_LIST_ANDROID};
quadList.quadCount = quads.size();
quadList.quads = quads.data();
queryResult.next = &quadList;
CHK_XR(xrQuerySpatialComponentDataEXT(completion.snapshot, &queryCond,
&queryResult));
for (int32_t i = 0; i < queryResult.entityIdCountOutput; ++i) {
if (entityStates[i] == XR_SPATIAL_ENTITY_TRACKING_STATE_TRACKING_EXT) {
const XrSpatialAnnotationQuadDataANDROID ¤tQuad = quads[i];
// Rendering quad in the view.
}
}
CHK_XR(xrDestroySpatialSnapshotEXT(completion.snapshot));
}
};
while (1) {
// For every frame in frame loop
XrSpace space; // Application's play space.
XrFrameState frameState; // Previously returned from xrWaitFrame
const XrTime time = frameState.predictedDisplayTime;
// Poll for the XR_TYPE_EVENT_DATA_SPATIAL_DISCOVERY_RECOMMENDED_EXT event
XrEventDataBuffer event = {XR_TYPE_EVENT_DATA_BUFFER};
XrResult result = xrPollEvent(instance, &event);
if (result == XR_SUCCESS) {
switch (event.type) {
case XR_TYPE_EVENT_DATA_SPATIAL_ANNOTATION_TRACKING_ANDROID: {
const XrEventDataSpatialAnnotationTrackingANDROID &eventdata =
*reinterpret_cast<XrEventDataSpatialAnnotationTrackingANDROID *>(
&event);
if (eventdata.initializationResult != XR_SUCCESS) {
// handle initialization failure.
// e.g. CHK_XR(xrDestroySpatialContextEXT(spatialContext));
}
break;
}
case XR_TYPE_EVENT_DATA_SPATIAL_DISCOVERY_RECOMMENDED_EXT: {
const XrEventDataSpatialDiscoveryRecommendedEXT &eventdata =
*reinterpret_cast<XrEventDataSpatialDiscoveryRecommendedEXT *>(
&event);
// Discover spatial entities for the context that we received the
// "discovery recommended" event for.
//discoverSpatialEntities(eventdata.spatialContext, time, space);
break;
}
}
}
// Finish frame loop
}
CHK_XR(xrDestroySpatialContextEXT(spatialContext));
Yeni Nesne Türleri
Yeni Komutlar
- xrCreateSpatialReferenceCacheAsyncANDROID
- xrCreateSpatialReferenceCacheCompleteANDROID
- xrDestroySpatialReferenceCacheANDROID
- xrEnumerateSpatialAnnotationReferenceSourcesANDROID
Yeni Yapılar
- XrCreateSpatialReferenceCacheCompletionANDROID
- XrEventDataSpatialAnnotationTrackingANDROID
- XrSpatialAnnotationQuadANDROID
- XrSpatialAnnotationQuadDataANDROID
- XrSpatialCapabilityConfigurationAnnotationTrackingANDROID
- XrSpatialReferenceCacheCreateInfoANDROID
XrSpatialComponentDataQueryResultEXT'yi genişletme :
XrSpatialReferenceImageEXT'yi genişletme :
XrSystemProperties'i genişletme :
Yeni Sıralamalar
Yeni Numaralandırılmış Değer Sabitleri
XR_ANDROID_SPATIAL_ANNOTATION_TRACKING_EXTENSION_NAMEXR_ANDROID_spatial_annotation_tracking_SPEC_VERSIONXrObjectType'i genişletme :
XR_OBJECT_TYPE_SPATIAL_REFERENCE_CACHE_ANDROID
XrSpatialCapabilityEXT'yi genişletme :
XR_SPATIAL_CAPABILITY_ANNOTATION_TRACKING_ANDROID
XrSpatialComponentTypeEXT'yi genişletme :
XR_SPATIAL_COMPONENT_TYPE_ANNOTATION_QUAD_ANDROID
XrStructureType'ı genişletme :
XR_TYPE_CREATE_SPATIAL_REFERENCE_CACHE_COMPLETION_ANDROIDXR_TYPE_EVENT_DATA_SPATIAL_ANNOTATION_TRACKING_ANDROIDXR_TYPE_SPATIAL_ANNOTATION_QUAD_REFERENCE_ANDROIDXR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_ANNOTATION_TRACKING_ANDROIDXR_TYPE_SPATIAL_COMPONENT_ANNOTATION_QUAD_LIST_ANDROIDXR_TYPE_SPATIAL_REFERENCE_CACHE_CREATE_INFO_ANDROIDXR_TYPE_SYSTEM_SPATIAL_ANNOTATION_PROPERTIES_ANDROID
Sayılar
Sürüm Geçmişi
Düzeltme 1, 2025-09-17 (Levana Chen)
- İlk uzantı açıklaması.