XR_ANDROID_composition_layer_passthrough_mesh OpenXR এক্সটেনশন

নাম স্ট্রিং

XR_ANDROID_composition_layer_passthrough_mesh

এক্সটেনশন প্রকার

ইনস্ট্যান্স এক্সটেনশন

নিবন্ধিত এক্সটেনশন নম্বর

463

রিভিশন

1

এক্সটেনশন এবং সংস্করণ নির্ভরতা

OpenXR 1.0

সর্বশেষ সংশোধিত তারিখ

2024-09-18

আইপি স্ট্যাটাস

কোন পরিচিত আইপি দাবি.

অবদানকারী

গ্রান্ট ইয়োশিদা, গুগল

কেভিন মৌল, গুগল

ভ্যাসিলি বারানভ, গুগল

পিটার চেন, গুগল

লেভানা চেন, গুগল

ওভারভিউ

একাধিক এনভায়রনমেন্ট ব্লেন্ড মোড সমর্থন করে এমন ডিভাইসগুলির জন্য, ব্যবহারকারীকে একটি নিমজ্জনশীল দৃশ্য থেকে তাদের শারীরিক পরিবেশ দেখানোর জন্য সিস্টেমটি পাসথ্রু কনফিগারেশন প্রদান করতে পারে।

এই এক্সটেনশনটি একটি অতিরিক্ত রচনা স্তর 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 ডেটা ফেরত দেওয়া হতে পারে যা আমাকে সমর্থন করতে পারে। সীমা

বৈধ ব্যবহার (অন্তর্নিহিত)

পাসথ্রু লেয়ার কম্পোজিশন

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- এ একটি পয়েন্টার হিসেবে জমা দেওয়া যেতে পারে , নির্বাচিত লেয়ার অর্ডারে, চূড়ান্ত ফ্রেমের আউটপুটে পাসথ্রু লেয়ার কম্পোজিট করার জন্য রানটাইমকে অনুরোধ করতে।

বৈধ ব্যবহার (অন্তর্নিহিত)

একটি পাসথ্রু লেয়ার হ্যান্ডেল তৈরি করুন

XrPassthroughLayerANDROID হ্যান্ডেল একটি পাসথ্রু স্তর উপস্থাপন করে যা XrCompositionLayerPassthroughANDROID- এর আচরণকে সংজ্ঞায়িত করে।

XR_DEFINE_HANDLE(XrPassthroughLayerANDROID)

একটি অ্যাপ্লিকেশন xrCreatePassthroughLayerANDROID কল করে একটি XrPassthroughLayerANDROID হ্যান্ডেল তৈরি করতে পারে ৷ ফিরে আসা XrPassthroughLayerANDROID হ্যান্ডেলটি পরবর্তীতে API কলগুলিতে ব্যবহার করা যেতে পারে

XrResult xrCreatePassthroughLayerANDROID(
    XrSession                                   session,
    const XrPassthroughLayerCreateInfoANDROID*  createInfo,
    XrPassthroughLayerANDROID*                  layer);

পরামিতি বিবরণ

  • session হল একটি XrSession যার জন্য পাসথ্রু স্তর তৈরি করা হবে।
  • createInfo হল একটি XrPassthroughLayerCreateInfoANDROID কাঠামোর একটি পয়েন্টার যা প্রাথমিক পাসথ্রু লেয়ার প্যারামিটারগুলি নির্দিষ্ট করে৷ একই সময়ে জাল সেট করার জন্য এই ক্ষেত্রটিকে XrPassthroughLayerMeshANDROID কাঠামোতেও চেইন করা যেতে পারে
  • layer হল একটি হ্যান্ডেলের একটি পয়েন্টার যেখানে তৈরি করা XrPassthroughLayerANDROID ফেরত দেওয়া হয়।

অ্যাপ্লিকেশানটি XrPassthroughLayerCreateInfoANDROID::vertexCapacity এবং XrPassthroughLayerCreateInfoANDROID::indexCapacity XrSystemPassthroughLayerROIDEXANDEX XrSystemPassthroughLayerPropertiesANDROID::maxMeshVertexCount যখন xrGetSystemProperties কল করা হয়। xrCreatePassthroughLayerANDROID একটি XR_ERROR_MESH_DATA_LIMIT_EXCEEDED_ANDROID ত্রুটি প্রদান করবে যদি createInfo দ্বারা সংজ্ঞায়িত জাল সূচকের সংখ্যা সর্বাধিক মানের থেকে বেশি হয়।

XrPassthroughLayerANDROID হ্যান্ডেলটি অবশ্যই xrDestroyPassthroughLayerANDROID ফাংশন ব্যবহার করে মুক্ত করতে হবে

বৈধ ব্যবহার (অন্তর্নিহিত)

রিটার্ন কোড

সফলতা

  • 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 বা একটি স্ট্রাকচার চেইনের পরবর্তী কাঠামোর একটি পয়েন্টার। xrCreatePassthroughLayerMeshANDROID-কে কল করার সময় পাসথ্রু লেয়ারের জন্য একটি প্রাথমিক জাল নির্দিষ্ট করতে পরবর্তী চেইনে XrPassthroughLayerMeshANDROID প্রদান করা যেতে পারে
  • vertexCapacity হল একটি uint32_t যা এই স্তরের জালের জন্য ভার্টেক্স বাফারের সর্বোচ্চ ক্ষমতা, অথবা 0 যদি অনির্দিষ্ট থাকে। নির্দিষ্ট করা থাকলে, এই স্তরের জন্য যে কোনো জালের সেটের XrPassthroughLayerMeshANDROID::vertexCount অবশ্যই vertexCapacity এর কম বা সমান হতে হবে
  • indexCapacity হল একটি uint32_t যা এই স্তরের জালের জন্য সূচক বাফারের সর্বোচ্চ ক্ষমতা, অথবা যদি অনির্দিষ্ট না থাকে তাহলে 0 । নির্দিষ্ট করা থাকলে, এই স্তরের জন্য যে কোনো জালের সেটের XrPassthroughLayerMeshANDROID::indexCount অবশ্যই indexCapacity এর কম বা সমান হতে হবে

বৈধ ব্যবহার (অন্তর্নিহিত)

পাসথ্রু স্তর এবং অন্তর্নিহিত সংস্থান প্রকাশ করতে একটি অ্যাপ্লিকেশন xrDestroyPassthroughLayerANDROID ফাংশন ব্যবহার করতে পারে

XrResult xrDestroyPassthroughLayerANDROID(
    XrPassthroughLayerANDROID                   layer);

পরামিতি বিবরণ

বৈধ ব্যবহার (অন্তর্নিহিত)

থ্রেড নিরাপত্তা

  • 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 কাঠামোর একটি পয়েন্টার যা জালের তথ্য নির্দিষ্ট করে।

অ্যাপ্লিকেশানটি XrPassthroughLayerMeshANDROID::vertexCount এবং XrPassthroughLayerMeshANDROID::indexCount-এ XrSystemPassthroughLayerPropertiesANDROID::maxMeshCountCount- এর দ্বারা প্রত্যাবর্তিত সর্বাধিক মানের থেকে কম বা সমান পাসথ্রু মেশ সূচকের সংখ্যা উল্লেখ করা উচিতXrSystemPassthroughLayerPropertiesANDROID::maxMeshVertexCount যখন xrGetSystemProperties কল করা হয়। যদি xrSetPassthroughLayerMeshANDROID থেকে mesh দ্বারা প্রদত্ত জাল সূচকের সংখ্যা সর্বাধিক মানের থেকে বেশি হয়, তাহলে XR_ERROR_MESH_DATA_LIMIT_EXCEEDED_ANDROID ফেরত দেওয়া হবে।

যদি জাল বাফার ক্ষমতা XrPassthroughLayerCreateInfoANDROID::vertexCapacity এবং XrPassthroughLayerCreateInfoANDROID::indexCapacity দ্বারা xrCreatePassthroughLayerANDROID ব্যবহার করে layer তৈরি করার সময় নির্দিষ্ট করা হয়, তাহলে XR_ERROR_SIZE_INSUFFICIENT ত্রুটি ফেরত হবে xrSetPassthroughLayerMeshANDROID যদি mesh দ্বারা সংজ্ঞায়িত জাল সূচকের গণনা ক্ষমতার চেয়ে বেশি হয়।

বৈধ ব্যবহার (অন্তর্নিহিত)

রিটার্ন কোড

সফলতা

  • 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 এর একটি অ্যারের একটি নির্দেশক যাতে ত্রিভুজ জালের সূচক রয়েছে।

বৈধ ব্যবহার (অন্তর্নিহিত)

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 ধ্রুবক

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

নতুন কাঠামো

নতুন ফাংশন

ইস্যু

সংস্করণ ইতিহাস

  • সংশোধন 1, 2024-09-11 (লেভানা চেন)
    • প্রাথমিক এক্সটেনশন বর্ণনা
,

নাম স্ট্রিং

XR_ANDROID_composition_layer_passthrough_mesh

এক্সটেনশন প্রকার

ইনস্ট্যান্স এক্সটেনশন

নিবন্ধিত এক্সটেনশন নম্বর

463

রিভিশন

1

এক্সটেনশন এবং সংস্করণ নির্ভরতা

OpenXR 1.0

সর্বশেষ সংশোধিত তারিখ

2024-09-18

আইপি স্ট্যাটাস

কোন পরিচিত আইপি দাবি.

অবদানকারী

গ্রান্ট ইয়োশিদা, গুগল

কেভিন মৌল, গুগল

ভ্যাসিলি বারানভ, গুগল

পিটার চেন, গুগল

লেভানা চেন, গুগল

ওভারভিউ

একাধিক এনভায়রনমেন্ট ব্লেন্ড মোড সমর্থন করে এমন ডিভাইসগুলির জন্য, ব্যবহারকারীকে একটি নিমজ্জনশীল দৃশ্য থেকে তাদের শারীরিক পরিবেশ দেখানোর জন্য সিস্টেমটি পাসথ্রু কনফিগারেশন প্রদান করতে পারে।

এই এক্সটেনশনটি একটি অতিরিক্ত রচনা স্তর 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 ডেটা ফেরত দেওয়া হতে পারে যা আমাকে সমর্থন করতে পারে। সীমা

বৈধ ব্যবহার (অন্তর্নিহিত)

পাসথ্রু লেয়ার কম্পোজিশন

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- এ একটি পয়েন্টার হিসেবে জমা দেওয়া যেতে পারে , নির্বাচিত লেয়ার অর্ডারে, চূড়ান্ত ফ্রেমের আউটপুটে পাসথ্রু লেয়ার কম্পোজিট করার জন্য রানটাইমকে অনুরোধ করতে।

বৈধ ব্যবহার (অন্তর্নিহিত)

একটি পাসথ্রু লেয়ার হ্যান্ডেল তৈরি করুন

XrPassthroughLayerANDROID হ্যান্ডেল একটি পাসথ্রু স্তর উপস্থাপন করে যা XrCompositionLayerPassthroughANDROID- এর আচরণকে সংজ্ঞায়িত করে।

XR_DEFINE_HANDLE(XrPassthroughLayerANDROID)

একটি অ্যাপ্লিকেশন xrCreatePassthroughLayerANDROID কল করে একটি XrPassthroughLayerANDROID হ্যান্ডেল তৈরি করতে পারে ৷ ফিরে আসা XrPassthroughLayerANDROID হ্যান্ডেলটি পরবর্তীতে API কলগুলিতে ব্যবহার করা যেতে পারে

XrResult xrCreatePassthroughLayerANDROID(
    XrSession                                   session,
    const XrPassthroughLayerCreateInfoANDROID*  createInfo,
    XrPassthroughLayerANDROID*                  layer);

পরামিতি বিবরণ

  • session হল একটি XrSession যার জন্য পাসথ্রু স্তর তৈরি করা হবে।
  • createInfo হল একটি XrPassthroughLayerCreateInfoANDROID কাঠামোর একটি পয়েন্টার যা প্রাথমিক পাসথ্রু লেয়ার প্যারামিটারগুলি নির্দিষ্ট করে৷ একই সময়ে জাল সেট করার জন্য এই ক্ষেত্রটিকে XrPassthroughLayerMeshANDROID কাঠামোতেও চেইন করা যেতে পারে
  • layer হল একটি হ্যান্ডেলের একটি পয়েন্টার যেখানে তৈরি করা XrPassthroughLayerANDROID ফেরত দেওয়া হয়।

অ্যাপ্লিকেশানটি XrPassthroughLayerCreateInfoANDROID::vertexCapacity এবং XrPassthroughLayerCreateInfoANDROID::indexCapacity XrSystemPassthroughLayerROIDEXANDEX XrSystemPassthroughLayerPropertiesANDROID::maxMeshVertexCount যখন xrGetSystemProperties কল করা হয়। xrCreatePassthroughLayerANDROID একটি XR_ERROR_MESH_DATA_LIMIT_EXCEEDED_ANDROID ত্রুটি প্রদান করবে যদি createInfo দ্বারা সংজ্ঞায়িত জাল সূচকের সংখ্যা সর্বাধিক মানের থেকে বেশি হয়।

XrPassthroughLayerANDROID হ্যান্ডেলটি অবশ্যই xrDestroyPassthroughLayerANDROID ফাংশন ব্যবহার করে মুক্ত করতে হবে

বৈধ ব্যবহার (অন্তর্নিহিত)

রিটার্ন কোড

সফলতা

  • 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 বা একটি স্ট্রাকচার চেইনের পরবর্তী কাঠামোর একটি পয়েন্টার। xrCreatePassthroughLayerMeshANDROID-কে কল করার সময় পাসথ্রু লেয়ারের জন্য একটি প্রাথমিক জাল নির্দিষ্ট করতে পরবর্তী চেইনে XrPassthroughLayerMeshANDROID প্রদান করা যেতে পারে
  • vertexCapacity হল একটি uint32_t যা এই স্তরের জালের জন্য ভার্টেক্স বাফারের সর্বোচ্চ ক্ষমতা, অথবা 0 যদি অনির্দিষ্ট থাকে। নির্দিষ্ট করা থাকলে, এই স্তরের জন্য যে কোনো জালের সেটের XrPassthroughLayerMeshANDROID::vertexCount অবশ্যই vertexCapacity এর কম বা সমান হতে হবে
  • indexCapacity হল একটি uint32_t যা এই স্তরের জালের জন্য সূচক বাফারের সর্বোচ্চ ক্ষমতা, অথবা যদি অনির্দিষ্ট না থাকে তাহলে 0 । নির্দিষ্ট করা থাকলে, এই স্তরের জন্য যে কোনো জালের সেটের XrPassthroughLayerMeshANDROID::indexCount অবশ্যই indexCapacity এর কম বা সমান হতে হবে

বৈধ ব্যবহার (অন্তর্নিহিত)

পাসথ্রু স্তর এবং অন্তর্নিহিত সংস্থান প্রকাশ করতে একটি অ্যাপ্লিকেশন xrDestroyPassthroughLayerANDROID ফাংশন ব্যবহার করতে পারে

XrResult xrDestroyPassthroughLayerANDROID(
    XrPassthroughLayerANDROID                   layer);

পরামিতি বিবরণ

বৈধ ব্যবহার (অন্তর্নিহিত)

থ্রেড নিরাপত্তা

  • 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 কাঠামোর একটি পয়েন্টার যা জালের তথ্য নির্দিষ্ট করে।

অ্যাপ্লিকেশানটি XrPassthroughLayerMeshANDROID::vertexCount এবং XrPassthroughLayerMeshANDROID::indexCount-এ XrSystemPassthroughLayerPropertiesANDROID::maxMeshCountCount- এর দ্বারা প্রত্যাবর্তিত সর্বাধিক মানের থেকে কম বা সমান পাসথ্রু মেশ সূচকের সংখ্যা উল্লেখ করা উচিতXrSystemPassthroughLayerPropertiesANDROID::maxMeshVertexCount যখন xrGetSystemProperties কল করা হয়। যদি xrSetPassthroughLayerMeshANDROID থেকে mesh দ্বারা প্রদত্ত জাল সূচকের সংখ্যা সর্বাধিক মানের থেকে বেশি হয়, তাহলে XR_ERROR_MESH_DATA_LIMIT_EXCEEDED_ANDROID ফেরত দেওয়া হবে।

যদি জাল বাফার ক্ষমতা XrPassthroughLayerCreateInfoANDROID::vertexCapacity এবং XrPassthroughLayerCreateInfoANDROID::indexCapacity দ্বারা xrCreatePassthroughLayerANDROID ব্যবহার করে layer তৈরি করার সময় নির্দিষ্ট করা হয়, তাহলে XR_ERROR_SIZE_INSUFFICIENT ত্রুটি ফেরত হবে xrSetPassthroughLayerMeshANDROID যদি mesh দ্বারা সংজ্ঞায়িত জাল সূচকের গণনা ক্ষমতার চেয়ে বেশি হয়।

বৈধ ব্যবহার (অন্তর্নিহিত)

রিটার্ন কোড

সফলতা

  • 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 এর একটি অ্যারের একটি নির্দেশক যাতে ত্রিভুজ জালের সূচক রয়েছে।

বৈধ ব্যবহার (অন্তর্নিহিত)

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 ধ্রুবক

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

নতুন কাঠামো

নতুন ফাংশন

ইস্যু

সংস্করণ ইতিহাস

  • সংশোধন 1, 2024-09-11 (লেভানা চেন)
    • প্রাথমিক এক্সটেনশন বর্ণনা