Name String
XR_ANDROID_composition_layer_passthrough_mesh
एक्सटेंशन टाइप
इंस्टेंस एक्सटेंशन
रजिस्टर किया गया एक्सटेंशन नंबर
463
बदलाव
1
एक्सटेंशन और वर्शन की डिपेंडेंसी
पिछली बार बदलाव करने की तारीख
2024-09-18
आईपी स्टेटस
आईपी पर कोई दावा नहीं किया गया है.
योगदान देने वाले
ग्रैंट योशिदा, Google
केविन मौल, Google
वसीली बारानोव, Google
पीटर चेन, Google
लेवाना चेन, Google
खास जानकारी
जिन डिवाइसों पर एक से ज़्यादा एनवायरमेंट ब्लेंड मोड काम करते हैं उनके लिए, सिस्टम उपयोगकर्ता को इमर्सिव व्यू में अपने आस-पास का वातावरण दिखाने के लिए, पास-थ्रू कॉन्फ़िगरेशन उपलब्ध करा सकता है.
इस एक्सटेंशन की मदद से, ऐप्लिकेशन XrCompositionLayerPassthroughANDROID नाम की अतिरिक्त कम्पोज़िशन लेयर का इस्तेमाल करके, मनमुताबिक ज्यामिति पर पास-थ्रू टेक्सचर प्रोजेक्ट कर सकते हैं.
पासथ्रू लेयर की विशेषताओं के बारे में, यहां दिए गए पैरामीटर से पता चलता है. इनमें प्रोजेक्शन को XrPassthroughLayerANDROID से दिखाया जाता है.
XrPosef pose;
XrVector3f scale;
float opacity;
XrPassthroughLayerANDROID layer;
फ़ुल स्क्रीन पासथ्रू के लिए, ऐप्लिकेशन एनवायरमेंट ब्लेंड मोड का इस्तेमाल कर सकते हैं.
सिस्टम की क्षमता की जांच करना
कोई ऐप्लिकेशन, xrGetSystemProperties को कॉल करते समय, XrSystemPassthroughLayerPropertiesANDROID स्ट्रक्चर को XrSystemProperties से जोड़कर, यह जांच कर सकता है कि सिस्टम, कॉम्पोज़िशन लेयर पासथ्रू मेश की सुविधा देता है या नहीं.
typedef struct XrSystemPassthroughLayerPropertiesANDROID {
XrStructureType type;
void* next;
XrBool32 supportsPassthroughLayer;
uint32_t maxMeshIndexCount;
uint32_t maxMeshVertexCount;
} XrSystemPassthroughLayerPropertiesANDROID;
पैसे चुकाकर बने सदस्यों के ब्यौरे
type
इस स्ट्रक्चर का XrStructureType है.next
,NULL
है या स्ट्रक्चर चेन में अगले स्ट्रक्चर का पॉइंटर है. OpenXR के मुख्य वर्शन या इस एक्सटेंशन में, इस तरह के स्ट्रक्चर तय नहीं किए गए हैं.supportsPassthroughLayer
एकXrBool32
है, जो यह बताता है कि मौजूदा सिस्टम, कंपोज़िशन लेयर पासथ्रू मेश के साथ काम करता है या नहीं.maxMeshIndexCount
एकuint32_t
है, जो उन इंडेक्स की ज़्यादा से ज़्यादा संख्या दिखाता है जिन्हें पासथ्रू मेश के लिए स्वीकार किया जाएगा.maxMeshVertexCount
एकuint32_t
है, जो पासथ्रू मेश के लिए स्वीकार किए जाने वाले वर्टिसेस की ज़्यादा से ज़्यादा संख्या दिखाता है.
अगर supportsPassthroughLayer
XR_FALSE
दिखाता है, तो इसका मतलब है कि सिस्टम पर कॉम्पोज़िशन लेयर पासथ्रू मेश काम नहीं करता. इसलिए, xrCreatePassthroughLayerANDROID से XR_ERROR_FEATURE_UNSUPPORTED
मिलेगा. supportsPassthroughLayer
के XR_FALSE
होने पर, ऐप्लिकेशन को कॉम्पोज़िशन लेयर पासथ्रू मेश का इस्तेमाल करने से बचना चाहिए.
अगर supportsPassthroughLayer
XR_TRUE
दिखाता है, तो इसका मतलब है कि सिस्टम में कॉम्पोज़िशन लेयर पासथ्रू मेश की सुविधा काम करती है. इस मामले में,
maxMeshIndexCount
और maxMeshVertexCount
, शून्य से बड़ी संख्या दिखाएंगे. किसी ऐप्लिकेशन को xrCreatePassthroughLayerANDROID और xrSetPassthroughLayerMeshANDROID को कॉल करते समय, पासथ्रू मेश सेट करने के लिए, maxMeshIndexCount
और maxMeshVertexCount
को ज़्यादा से ज़्यादा वैल्यू के तौर पर इस्तेमाल करना चाहिए. ऐसा न करने पर, मेश डेटा की वैल्यू तय सीमा से ज़्यादा होने का पता चलने के लिए, XR_ERROR_MESH_DATA_LIMIT_EXCEEDED_ANDROID
दिखाया जा सकता है.
मान्य इस्तेमाल (इंप्लिसिट)
- XrSystemPassthroughLayerPropertiesANDROID का इस्तेमाल करने से पहले,
XR_ANDROID_composition_layer_passthrough_mesh
एक्सटेंशन चालू होना ज़रूरी है type
होनी चाहिएXR_TYPE_SYSTEM_PASSTHROUGH_LAYER_PROPERTIES_ANDROID
next
NULL
या स्ट्रक्चर चेन में अगले स्ट्रक्चर का मान्य पॉइंटर होना चाहिए
पास-थ्रू लेयर का कंपोज़िशन
XrCompositionLayerPassthroughANDROID में, xrEndFrame को कॉल करते समय, ट्राएंगल मेश पर पासथ्रू टेक्सचर को रेंडर करने के लिए ज़रूरी जानकारी होती है. XrCompositionLayerPassthroughANDROID, XrFrameEndInfo में इस्तेमाल किए गए बेस स्ट्रक्चर XrCompositionLayerBaseHeader का दूसरा नाम है.
typedef struct XrCompositionLayerPassthroughANDROID {
XrStructureType type;
const void* next;
XrCompositionLayerFlags layerFlags;
XrSpace space;
XrPosef pose;
XrVector3f scale;
float opacity;
XrPassthroughLayerANDROID layer;
} XrCompositionLayerPassthroughANDROID;
पैसे चुकाकर बने सदस्यों के ब्यौरे
type
इस स्ट्रक्चर का XrStructureType है.next
,NULL
है या स्ट्रक्चर चेन में अगले स्ट्रक्चर का पॉइंटर है. OpenXR के मुख्य वर्शन या इस एक्सटेंशन में, इस तरह के स्ट्रक्चर तय नहीं किए गए हैं.layerFlags
, XrCompositionLayerFlags का बिटमास्क है. इसमें लेयर पर लागू होने वाले फ़्लैग के बारे में बताया गया है.space
वह XrSpace है जिसमें लेयर मेश केpose
का आकलन, समय के साथ किया जाता है.pose
एकXrPosef
है, जोspace
के रेफ़रंस फ़्रेम में लेयर मेश की पोज़िशन और ओरिएंटेशन तय करता है.scale
एकXrVector3f
है, जो लेयर मेश के स्केल की जानकारी देता है.opacity
एकfloat
है, जो [0, 1] की रेंज में पास-थ्रू टेक्सचर की ओपैसिटी तय करता है.layer
, XrPassthroughLayerANDROID है, जिसे पहले xrCreatePassthroughLayerANDROID ने बनाया था.
ऐप्लिकेशन, बनाए गए layer
और XrPassthroughLayerMeshANDROID से मिले मेश के साथ XrCompositionLayerPassthroughANDROID स्ट्रक्चर बन सकता है.
XrCompositionLayerPassthroughANDROID का पॉइंटर, xrEndFrame में सबमिट किया जा सकता है. यह पॉइंटर, चुने गए लेयर के क्रम में, बेस स्ट्रक्चर XrCompositionLayerBaseHeader का पॉइंटर होता है. इससे रनटाइम को फ़ाइनल फ़्रेम आउटपुट में पासथ्रू लेयर को कंपोज करने का अनुरोध करने में मदद मिलती है.
मान्य इस्तेमाल (इंप्लिसिट)
- XrCompositionLayerPassthroughANDROID का इस्तेमाल करने से पहले,
XR_ANDROID_composition_layer_passthrough_mesh
एक्सटेंशन चालू होना ज़रूरी है type
होनी चाहिएXR_TYPE_COMPOSITION_LAYER_PASSTHROUGH_ANDROID
next
NULL
या स्ट्रक्चर चेन में अगले स्ट्रक्चर का मान्य पॉइंटर होना चाहिएlayerFlags
की वैल्यू0
या XrCompositionLayerFlagBits की वैल्यू के मान्य कॉम्बिनेशन में से कोई एक होनी चाहिएspace
यह XrSpace का मान्य हैंडल होना चाहिएlayer
XrPassthroughLayerANDROID हैंडल मान्य होना चाहिएlayer
औरspace
, दोनों को एक ही XrSession से बनाया, असाइन या फिर वापस पाया गया हो
पासथ्रू लेयर हैंडल बनाना
XrPassthroughLayerANDROID हैंडल, पासथ्रू लेयर को दिखाता है. यह XrCompositionLayerPassthroughANDROID के व्यवहार को तय करता है.
XR_DEFINE_HANDLE(XrPassthroughLayerANDROID)
कोई ऐप्लिकेशन, xrCreatePassthroughLayerANDROID को कॉल करके, XrPassthroughLayerANDROID हैंडल बना सकता है. दिखाए गए XrPassthroughLayerANDROID हैंडल का इस्तेमाल, एपीआई कॉल में बाद में किया जा सकता है.
XrResult xrCreatePassthroughLayerANDROID(
XrSession session,
const XrPassthroughLayerCreateInfoANDROID* createInfo,
XrPassthroughLayerANDROID* layer);
पैरामीटर की जानकारी
session
एक XrSession है, जिसमें पासथ्रू लेयर बनाई जाएगी.createInfo
, XrPassthroughLayerCreateInfoANDROID स्ट्रक्चर का पॉइंटर है. इसमें, पासथ्रू लेयर के शुरुआती पैरामीटर की जानकारी होती है. इस फ़ील्ड को XrPassthroughLayerMeshANDROID स्ट्रक्चर से भी जोड़ा जा सकता है, ताकि एक ही समय पर मेश सेट किया जा सके.layer
, उस हैंडल का पॉइंटर है जिसमें बनाया गया XrPassthroughLayerANDROID दिखाया जाता है.
ऐप्लिकेशन को XrPassthroughLayerCreateInfoANDROID::vertexCapacity और
XrPassthroughLayerCreateInfoANDROID::indexCapacity में, पास-थ्रू मेश इंडेक्स की संख्या तय करनी चाहिए. यह संख्या, xrGetSystemProperties को कॉल करते समय,
XrSystemPassthroughLayerPropertiesANDROID::maxMeshIndexCount और
XrSystemPassthroughLayerPropertiesANDROID::maxMeshVertexCount से मिली ज़्यादा से ज़्यादा वैल्यू से कम या उसके बराबर होनी चाहिए. अगर createInfo
से तय किए गए मेश इंडेक्स की संख्या, ज़्यादा से ज़्यादा वैल्यू से ज़्यादा है, तो xrCreatePassthroughLayerANDROID, XR_ERROR_MESH_DATA_LIMIT_EXCEEDED_ANDROID
गड़बड़ी दिखाएगा.
XrPassthroughLayerANDROID हैंडल को आखिर में xrDestroyPassthroughLayerANDROID फ़ंक्शन का इस्तेमाल करके खाली करना ज़रूरी है.
मान्य इस्तेमाल (इंप्लिसिट)
- xrCreatePassthroughLayerANDROID को कॉल करने से पहले,
XR_ANDROID_composition_layer_passthrough_mesh
एक्सटेंशन चालू होना ज़रूरी है session
यह एक मान्य XrSession हैंडल होना चाहिएcreateInfo
यह, XrPassthroughLayerCreateInfoANDROID स्ट्रक्चर के लिए मान्य पॉइंटर होना चाहिएlayer
XrPassthroughLayerANDROID हैंडल का पॉइंटर होना चाहिए
रिटर्न कोड
XR_SUCCESS
XR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTED
XR_ERROR_VALIDATION_FAILURE
XR_ERROR_RUNTIME_FAILURE
XR_ERROR_HANDLE_INVALID
XR_ERROR_INSTANCE_LOST
XR_ERROR_SESSION_LOST
XR_ERROR_OUT_OF_MEMORY
XR_ERROR_LIMIT_REACHED
XR_ERROR_SIZE_INSUFFICIENT
XR_ERROR_MESH_DATA_LIMIT_EXCEEDED_ANDROID
XrPassthroughLayerCreateInfoANDROID स्ट्रक्चर को इस तरह परिभाषित किया गया है:
typedef struct XrPassthroughLayerCreateInfoANDROID {
XrStructureType type;
const void* next;
uint32_t vertexCapacity;
uint32_t indexCapacity;
} XrPassthroughLayerCreateInfoANDROID;
पैसे चुकाकर बने सदस्यों के ब्यौरे
type
इस स्ट्रक्चर का XrStructureType है.next
, NULL है या स्ट्रक्चर चेन में अगले स्ट्रक्चर का पॉइंटर है. XrPassthroughLayerMeshANDROID को अगली चेन में दिया जा सकता है, ताकि xrCreatePassthroughLayerANDROID को कॉल करते समय, पासथ्रू लेयर के लिए शुरुआती मेश तय किया जा सके.vertexCapacity
एकuint32_t
है, जो इस लेयर के मेश के लिए वर्टिक्स बफ़र की ज़्यादा से ज़्यादा क्षमता को दिखाता है. अगर कोई वैल्यू नहीं दी गई है, तो यह0
होता है. अगर यह वैल्यू दी गई है, तो इस लेयर के लिए सेट किए गए किसी भी मेश की XrPassthroughLayerMeshANDROID::vertexCount वैल्यू,vertexCapacity
से कम या उसके बराबर होनी चाहिए.indexCapacity
एकuint32_t
है, जो इस लेयर के मेश के लिए इंडेक्स बफ़र की ज़्यादा से ज़्यादा क्षमता को दिखाता है. अगर कोई वैल्यू नहीं दी गई है, तो यह0
होता है. अगर यह वैल्यू दी गई है, तो इस लेयर के लिए सेट किए गए किसी भी मेश का XrPassthroughLayerMeshANDROID::indexCount,indexCapacity
से कम या उसके बराबर होना चाहिए.
मान्य इस्तेमाल (इंप्लिसिट)
- XrPassthroughLayerCreateInfoANDROID का इस्तेमाल करने से पहले,
XR_ANDROID_composition_layer_passthrough_mesh
एक्सटेंशन चाहिए कि चालू हो type
होनी चाहिएXR_TYPE_PASSTHROUGH_LAYER_CREATE_INFO_ANDROID
next
NULL
या स्ट्रक्चर चेन में अगले स्ट्रक्चर का मान्य पॉइंटर होना चाहिए. यह भी देखें: XrPassthroughLayerMeshANDROID
ऐप्लिकेशन, पासथ्रू लेयर और उससे जुड़े संसाधनों को रिलीज़ करने के लिए, xrDestroyPassthroughLayerANDROID फ़ंक्शन का इस्तेमाल कर सकता है.
XrResult xrDestroyPassthroughLayerANDROID(
XrPassthroughLayerANDROID layer);
पैरामीटर की जानकारी
layer
वह XrPassthroughLayerANDROID है जिसे मिटाना है.
मान्य इस्तेमाल (इंप्लिसिट)
- xrDestroyPassthroughLayerANDROID को कॉल करने से पहले,
XR_ANDROID_composition_layer_passthrough_mesh
एक्सटेंशन चालू होना चाहिए layer
XrPassthroughLayerANDROID हैंडल मान्य होना चाहिए
थ्रेड की सुरक्षा
layer
और किसी भी चाइल्ड हैंडल का ऐक्सेस, बाहरी तौर पर सिंक किया जाना चाहिए
रिटर्न कोड
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTED
XR_ERROR_RUNTIME_FAILURE
XR_ERROR_HANDLE_INVALID
पास-थ्रू लेयर मेश सेट करना
कोई ऐप्लिकेशन, पासथ्रू लेयर के लिए मेश सेट करने के लिए, xrSetPassthroughLayerMeshANDROID फ़ंक्शन का इस्तेमाल कर सकता है.
XrResult xrSetPassthroughLayerMeshANDROID(
XrPassthroughLayerANDROID layer,
const XrPassthroughLayerMeshANDROID* mesh);
पैरामीटर की जानकारी
layer
एक XrPassthroughLayerANDROID हैंडल है, जिसमें दिए गएmesh
के साथ अपडेट करना है.mesh
, XrPassthroughLayerMeshANDROID स्ट्रक्चर का एक पॉइंटर है, जिसमें मेश की जानकारी दी गई है.
ऐप्लिकेशन को xrGetSystemProperties को कॉल करते समय,
XrSystemPassthroughLayerPropertiesANDROID::maxMeshIndexCount और
XrSystemPassthroughLayerPropertiesANDROID::maxMeshVertexCount से मिली ज़्यादा से ज़्यादा वैल्यू से कम या उसके बराबर,
XrPassthroughLayerMeshANDROID::vertexCount और
XrPassthroughLayerMeshANDROID::indexCount में पास-थ्रू मेश इंडेक्स की संख्या बतानी चाहिए. अगर xrSetPassthroughLayerMeshANDROID से mesh
के ज़रिए दिए गए मेश इंडेक्स की संख्या, ज़्यादा से ज़्यादा वैल्यू से ज़्यादा है, तो XR_ERROR_MESH_DATA_LIMIT_EXCEEDED_ANDROID
दिखाया जाएगा.
अगर xrCreatePassthroughLayerANDROID का इस्तेमाल करके layer
बनाते समय, XrPassthroughLayerCreateInfoANDROID::vertexCapacity और
XrPassthroughLayerCreateInfoANDROID::indexCapacity से मेश बफ़र की क्षमता तय की जाती है, तो mesh
से तय किए गए मेश इंडेक्स की संख्या, क्षमता से ज़्यादा होने पर, xrSetPassthroughLayerMeshANDROID पर XR_ERROR_SIZE_INSUFFICIENT
गड़बड़ी दिखेगी.
मान्य इस्तेमाल (इंप्लिसिट)
- xrSetPassthroughLayerMeshANDROID को कॉल करने से पहले,
XR_ANDROID_composition_layer_passthrough_mesh
एक्सटेंशन चालू होना ज़रूरी है layer
XrPassthroughLayerANDROID हैंडल मान्य होना चाहिएmesh
यह किसी मान्य XrPassthroughLayerMeshANDROID स्ट्रक्चर का पॉइंटर होना चाहिए
रिटर्न कोड
XR_SUCCESS
XR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTED
XR_ERROR_VALIDATION_FAILURE
XR_ERROR_RUNTIME_FAILURE
XR_ERROR_HANDLE_INVALID
XR_ERROR_INSTANCE_LOST
XR_ERROR_SESSION_LOST
XR_ERROR_OUT_OF_MEMORY
XR_ERROR_LIMIT_REACHED
XR_ERROR_SIZE_INSUFFICIENT
XR_ERROR_MESH_DATA_LIMIT_EXCEEDED_ANDROID
XrPassthroughLayerMeshANDROID स्ट्रक्चर को इस तरह परिभाषित किया गया है:
typedef struct XrPassthroughLayerMeshANDROID {
XrStructureType type;
const void* next;
XrWindingOrderANDROID windingOrder;
uint32_t vertexCount;
const XrVector3f* vertices;
uint32_t indexCount;
const uint16_t* indices;
} XrPassthroughLayerMeshANDROID;
पैसे चुकाकर बने सदस्यों के ब्यौरे
type
इस स्ट्रक्चर का XrStructureType है.next
,NULL
है या स्ट्रक्चर चेन में अगले स्ट्रक्चर का पॉइंटर है.windingOrder
, मेश त्रिभुजों का XrWindingOrderANDROID है. इसका इस्तेमाल, मेश को रेंडर करते समय बैकफ़ेस कलिंग के लिए किया जाएगा.vertexCount
एकuint32_t
है, जो मेश में वर्टिसेस की संख्या दिखाता है. XrPassthroughLayerCreateInfoANDROID::vertexCapacity के लिए वैल्यू तय करने पर,vertexCount
कोvertexCapacity
से कम या उसके बराबर होना चाहिए.vertices
,XrVector3f
के कलेक्शन का पॉइंटर है. इसमें ट्राएंगल मेश के वर्टिक्स की पोज़िशन होती हैं.
indexCount
एकuint32_t
है, जो त्रिभुज मेश में इंडेक्स की संख्या दिखाता है. अगर पिछलेindexCount % 3
इंडेक्स हैं, तो उन्हें नहीं दिखाया जाएगा. XrPassthroughLayerCreateInfoANDROID::indexCapacity तय करने पर,indexCount
कोindexCapacity
से कम या उसके बराबर होना चाहिए.indices
,uint16_t
के कलेक्शन का पॉइंटर है. इसमें त्रिभुज मेश के इंडेक्स शामिल होते हैं.
मान्य इस्तेमाल (इंप्लिसिट)
- XrPassthroughLayerMeshANDROID का इस्तेमाल करने से पहले,
XR_ANDROID_composition_layer_passthrough_mesh
एक्सटेंशन चालू होना ज़रूरी है type
होनी चाहिएXR_TYPE_PASSTHROUGH_LAYER_MESH_ANDROID
next
NULL
या स्ट्रक्चर चेन में अगले स्ट्रक्चर का मान्य पॉइंटर होना चाहिएwindingOrder
XrWindingOrderANDROID की मान्य वैल्यू होनी चाहिए- अगर
vertexCount
,0, vertices
नहीं है, तो यहvertexCount
XrVector3f स्ट्रक्चर के ऐरे के पॉइंटर के तौर पर होना चाहिए - अगर
indexCount
,0, indices
नहीं है, तोindexCount uint16_t
वैल्यू के ऐरे का पॉइंटर होना चाहिए
XrWindingOrderANDROID एनोटेशन, किसी मेश के त्रिभुजों के वाइंडिंग ऑर्डर की पहचान करता है. इसका इस्तेमाल, पासथ्रू लेयर के मेश को रेंडर करते समय, बैकफ़ेस कलिंग के लिए रनटाइम करता है.
typedef enum XrWindingOrderANDROID {
XR_WINDING_ORDER_UNKNOWN_ANDROID = 0,
XR_WINDING_ORDER_CW_ANDROID = 1,
XR_WINDING_ORDER_CCW_ANDROID = 2
} XrWindingOrderANDROID;
एनोमेरेंट की जानकारी
XR_WINDING_ORDER_UNKNOWN_ANDROID
— मेश के त्रिभुजों के विंडिंग ऑर्डर की जानकारी नहीं है.XR_WINDING_ORDER_CW_ANDROID
— मेश के त्रिभुजों को घुमाने का क्रम, घड़ी की सुई के उलट दिशा में होता है.XR_WINDING_ORDER_CCW_ANDROID
— मेश के त्रिभुजों को घुमाने का क्रम, घड़ी की विपरीत दिशा में होता है.
पासथ्रू लेयर कंपोज़िशन के लिए कोड का उदाहरण
यहां दिए गए उदाहरण में, पासथ्रू लेयर बनाने और उसे कॉम्पोज़िट करने में इस्तेमाल करने का तरीका बताया गया है.
XrInstance instance; // previously initialized
XrSystemId systemId; // previously initialized
XrSession session; // previously initialized
XrSpace space; // previously initialized
// The function pointers are previously initialized using xrGetInstanceProcAddr.
PFN_xrCreatePassthroughLayerANDROID xrCreatePassthroughLayerANDROID; // previously initialized
PFN_xrDestroyPassthroughLayerANDROID xrDestroyPassthroughLayerANDROID; // previously initialized
PFN_xrSetPassthroughLayerMeshANDROID xrSetPassthroughLayerMeshANDROID; // previously initialized
// Inspect passthrough mesh system properties
XrSystemPassthroughLayerPropertiesANDROID passthroughLayerSystemProperties{
XR_TYPE_SYSTEM_PASSTHROUGH_LAYER_PROPERTIES_ANDROID};
XrSystemProperties systemProperties{
XR_TYPE_SYSTEM_PROPERTIES, &passthroughLayerSystemProperties};
CHK_XR(xrGetSystemProperties(instance, systemId, &systemProperties));
if (!passthroughLayerSystemProperties.supportsPassthroughLayer) {
// the system does not support composite layer passthrough mesh.
return;
}
// The initial mesh for the layer.
XrPassthroughLayerMeshANDROID mesh = {
.type = XR_TYPE_PASSTHROUGH_LAYER_MESH_ANDROID,
.windingOrder = XR_WINDING_ORDER_CW_ANDROID,
.vertexCount = 4,
.vertices = {
{ 0, 0, 0 }, { 0, 1, 0 }, { 1, 1, 0 }, { 1, 0, 0 }
},
.indexCount = 6,
.indices = {
0, 1, 2,
0, 2, 3
},
};
// Create the layer. Layers are expected to persist across frames.
XrPassthroughLayerCreateInfoANDROID create_info = {
.type = XR_TYPE_PASSTHROUGH_LAYER_CREATE_INFO_ANDROID,
.next = &mesh,
.vertexCapacity = 0,
.indexCapacity = 0,
};
XrPassthroughLayerANDROID layer;
CHK_XR(xrCreatePassthroughLayerANDROID(session, &create_info, &layer));
// Create a composition layer. Composition layers are submitted per frame.
XrCompositionLayerPassthroughANDROID passthrough_layer = {
.type = XR_TYPE_COMPOSITION_LAYER_PASSTHROUGH_ANDROID,
.next = nullptr,
.layerFlags = 0,
.space = space,
.pose = {
.orientation = { 0.0f, 0.0f, 0.0f, 1.0f }
.position = { 0.0f, 0.0f, 0.0f }
},
.scale = { 1.0f, 1.0f, 1.0f },
.opacity = 1.0f,
.layer = layer
};
while (1) {
// ...
// For every frame in frame loop
// ...
// Submit composition layer in xrEndFrame.
std::vector<XrCompositionLayerBaseHeader*> layers = {
...,
&passthrough_layer,
...,
};
XrFrameEndInfo end_frame_info = { XR_TYPE_FRAME_END_INFO, nullptr };
end_frame_info.layerCount = (uint32_t)layers.size();
end_frame_info.layers = layers.data();
CHK_XR(xrEndFrame(session, &end_frame_info));
// Update the layer. Results can be seen the next time a passthrough composition
// layer is submitted.
mesh.indexCount = 9;
const uint16_t new_index_buffer[] = {
0, 1, 2,
0, 2, 3,
0, 1, 2
};
mesh.indexBuffer = &new_index_buffer[0];
CHK_XR(xrSetPassthroughLayerMeshANDROID(&layer, &mesh));
// ...
// Finish frame loop
// ...
}
// Clean up.
CHK_XR(xrDestroyPassthroughLayerANDROID(layer));
नए ऑब्जेक्ट टाइप
नई Enum Constant
XrObjectType एनोटेशन को इनके साथ जोड़ा गया है:
XR_OBJECT_TYPE_PASSTHROUGH_LAYER_ANDROID
XrStructureType एनोटेशन को इनके साथ जोड़ा गया है:
XR_TYPE_PASSTHROUGH_LAYER_CREATE_INFO_ANDROID
XR_TYPE_PASSTHROUGH_LAYER_MESH_ANDROID
XR_TYPE_COMPOSITION_LAYER_PASSTHROUGH_ANDROID
XR_TYPE_SYSTEM_PASSTHROUGH_LAYER_PROPERTIES_ANDROID
XrResult एनोटेशन को इनके साथ जोड़ा गया है:
XR_ERROR_MESH_DATA_LIMIT_EXCEEDED_ANDROID
नए Enums
नए स्ट्रक्चर
- XrPassthroughLayerCreateInfoANDROID
- XrPassthroughLayerMeshANDROID
- XrCompositionLayerPassthroughANDROID
- XrSystemPassthroughLayerPropertiesANDROID
नए फ़ंक्शन
समस्याएं
वर्शन का इतिहास
- पहला बदलाव, 11-09-2024 (लेवन चेन)
- एक्सटेंशन के बारे में शुरुआती जानकारी