رشته نام
XR_ANDROID_composition_layer_passthrough_mesh
نوع پسوند
پسوند نمونه
شماره برنامه افزودنی ثبت شده
463
تجدید نظر
1
وابستگی های افزونه و نسخه
آخرین تاریخ اصلاح
18-09-2024
وضعیت IP
هیچ ادعای IP شناخته شده ای وجود ندارد.
مشارکت کنندگان
گرنت یوشیدا، گوگل
کوین مول، گوگل
واسیلی بارانوف، گوگل
پیتر چن، گوگل
لوانا چن، گوگل
نمای کلی
برای دستگاههایی که از حالتهای ترکیبی محیطی چندگانه پشتیبانی میکنند، سیستم ممکن است پیکربندیهای عبوری را برای نشان دادن محیط فیزیکی کاربر از یک نمای فراگیر ارائه دهد.
این افزونه برنامهها را قادر میسازد تا بافتهای عبوری را از طریق یک لایه ترکیب اضافی XrCompositionLayerPassthroughANDROID روی هندسه دلخواه بفرستند.
ویژگی های لایه عبور با پارامترهای زیر مشخص می شود، که در آنها طرح ریزی با XrPassthroughLayerANDROID نشان داده می شود.
XrPosef pose;
XrVector3f scale;
float opacity;
XrPassthroughLayerANDROID layer;
برای عبور تمام صفحه، برنامهها میتوانند از حالت ترکیبی محیطی استفاده کنند.
قابلیت سیستم را بررسی کنید
هنگام فراخوانی xrGetSystemProperties، یک برنامه کاربردی میتواند بررسی کند که آیا سیستم قادر به ایجاد مش عبور لایه ترکیبی است یا خیر.
typedef struct XrSystemPassthroughLayerPropertiesANDROID {
XrStructureType type;
void* next;
XrBool32 supportsPassthroughLayer;
uint32_t maxMeshIndexCount;
uint32_t maxMeshVertexCount;
} XrSystemPassthroughLayerPropertiesANDROID;
توضیحات اعضا
-
typeXrStructureType این ساختار است. -
nextNULLیا اشاره گر به ساختار بعدی در زنجیره ساختار است. چنین ساختاری در هسته OpenXR یا این پسوند تعریف نشده است. -
supportsPassthroughLayerیکXrBool32است، که نشان می دهد آیا سیستم فعلی از شبکه عبور لایه ترکیب پشتیبانی می کند یا خیر. -
maxMeshIndexCountیکuint32_tاست که حداکثر تعداد شاخص هایی را که برای یک مش عبور پذیرفته می شود برمی گرداند. -
maxMeshVertexCountیکuint32_tاست که حداکثر تعداد رئوس را که برای یک مش عبور پذیرفته می شود، برمی گرداند.
اگر supportsPassthroughLayer XR_FALSE برگرداند، سیستم از شبکه عبور لایه ترکیب پشتیبانی نمی کند و بنابراین XR_ERROR_FEATURE_UNSUPPORTED از xrCreatePassthroughLayerANDROID دریافت می کند. هنگامی که supportsPassthroughLayer لایه XR_FALSE است، برنامه باید از استفاده از شبکه عبور لایه ترکیب اجتناب کند.
اگر supportsPassthroughLayer XR_TRUE برگرداند، سیستم از شبکه عبور لایه ترکیب پشتیبانی می کند. در این حالت، maxMeshIndexCount و maxMeshVertexCount یک عدد غیر صفر برمیگردانند. هنگام فراخوانی xrCreatePassthroughLayerANDROID و xrSetPassthroughLayerMeshANDROID ، یک برنامه باید از maxMeshIndexCount و maxMeshVertexCount بهعنوان حداکثر مقادیر برای تنظیم مشهای عبور استفاده کند، در غیر این صورت XR_ERROR_MESH_DATA_LIMIT_EXCEEDED_ANDROID بیشتر از دادههای پشتیبانی شده است.
استفاده معتبر (ضمنی)
- پسوند
XR_ANDROID_composition_layer_passthrough_meshباید قبل از استفاده از XrSystemPassthroughLayerPropertiesANDROID فعال شود -
typeبایدXR_TYPE_SYSTEM_PASSTHROUGH_LAYER_PROPERTIES_ANDROIDباشد -
nextبایدNULLیا یک اشاره گر معتبر به ساختار بعدی در یک زنجیره ساختار باشد
ترکیب لایه عبوری
XrCompositionLayerPassthroughANDROID حاوی اطلاعات مورد نیاز برای نمایش یک بافت عبوری بر روی یک شبکه مثلثی هنگام فراخوانی xrEndFrame است. XrCompositionLayerPassthroughANDROID یک نوع مستعار برای ساختار پایه XrCompositionLayerBaseHeader است که در XrFrameEndInfo استفاده می شود.
typedef struct XrCompositionLayerPassthroughANDROID {
XrStructureType type;
const void* next;
XrCompositionLayerFlags layerFlags;
XrSpace space;
XrPosef pose;
XrVector3f scale;
float opacity;
XrPassthroughLayerANDROID layer;
} XrCompositionLayerPassthroughANDROID;
توضیحات اعضا
-
typeXrStructureType این ساختار است. -
nextNULLیا اشاره گر به ساختار بعدی در زنجیره ساختار است. چنین ساختاری در هسته OpenXR یا این پسوند تعریف نشده است. -
layerFlagsیک بیت ماسک از XrCompositionLayerFlags است که پرچم هایی را برای اعمال بر روی لایه توصیف می کند. -
space، فضای XrSpace است که در آنposeلایه مش در طول زمان ارزیابی می شود. -
poseیکXrPosefاست که موقعیت و جهت لایه مش را در چارچوب مرجعspaceمشخص می کند. -
scaleیکXrVector3fاست که مقیاس مش لایه را تعریف می کند. -
opacityیکfloatاست که کدورت بافت عبوری را در محدوده [0، 1] تعریف می کند. -
layerXrPassthroughLayerANDROID است که قبلا توسط xrCreatePassthroughLayerANDROID ایجاد شده است.
برنامه می تواند یک ساختار XrCompositionLayerPassthroughANDROID با layer ایجاد شده و مش های مربوطه ارائه شده توسط XrPassthroughLayerMeshANDROID ایجاد کند.
یک اشاره گر به XrCompositionLayerPassthroughANDROID ممکن است در xrEndFrame به عنوان یک اشاره گر به ساختار پایه XrCompositionLayerBaseHeader ، به ترتیب لایه انتخاب شده، برای درخواست زمان اجرا برای ترکیب لایه عبور در خروجی فریم نهایی ارسال شود.
استفاده معتبر (ضمنی)
- پسوند
XR_ANDROID_composition_layer_passthrough_meshباید قبل از استفاده از XrCompositionLayerPassthroughANDROID فعال شود -
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 برگشتی را می توان متعاقباً در فراخوانی های API استفاده کرد.
XrResult xrCreatePassthroughLayerANDROID(
XrSession session,
const XrPassthroughLayerCreateInfoANDROID* createInfo,
XrPassthroughLayerANDROID* layer);
توضیحات پارامترها
-
sessionیک XrSession است که در آن لایه passthrough برای آن ایجاد می شود. -
createInfoیک اشاره گر به ساختار XrPassthroughLayerCreateInfoANDROID است که پارامترهای لایه عبور اولیه را مشخص می کند. این فیلد همچنین می تواند به یک ساختار XrPassthroughLayerMeshANDROID متصل شود تا مش را همزمان تنظیم کند. -
layerاشاره گر به دسته ای است که XrPassthroughLayerANDROID ایجاد شده در آن برگردانده می شود.
برنامه باید تعداد شاخصهای مش عبوری را در XrPassthroughLayerCreateInfoANDROID::vertexCapacity و XrPassthroughLayerCreateInfoANDROID::indexCapacity کمتر یا مساوی با حداکثر مقادیر بازگردانده شده توسط XrSystemPassthroughROID:AndCondexmax مشخص کند. XrSystemPassthroughLayerPropertiesANDROID::maxMeshVertexCount هنگام فراخوانی xrGetSystemProperties . xrCreatePassthroughLayerANDROID یک خطای XR_ERROR_MESH_DATA_LIMIT_EXCEEDED_ANDROID برمی گرداند اگر تعداد شاخص های مش تعریف شده توسط createInfo از حداکثر مقادیر بیشتر باشد.
دسته XrPassthroughLayerANDROID باید در نهایت با استفاده از تابع xrDestroyPassthroughLayerANDROID آزاد شود.
استفاده معتبر (ضمنی)
- پسوند
XR_ANDROID_composition_layer_passthrough_meshباید قبل از فراخوانی xrCreatePassthroughLayerANDROID فعال شود -
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;
توضیحات اعضا
-
typeXrStructureType این ساختار است. -
nextNULL یا اشاره گر به ساختار بعدی در زنجیره ساختار است. XrPassthroughLayerMeshANDROID را می توان در زنجیره بعدی ارائه کرد تا یک مش اولیه برای لایه passthrough هنگام فراخوانی xrCreatePassthroughLayerANDROID مشخص شود. -
vertexCapacityیکuint32_tاست که حداکثر ظرفیت بافر رأس برای مش این لایه یا0در صورت نامشخص نشان می دهد. اگر مشخص شده باشد، XrPassthroughLayerMeshANDROID::vertexCount هر مجموعه مش برای این لایه باید کمتر یا برابر باvertexCapacityباشد. -
indexCapacityیکuint32_tاست که حداکثر ظرفیت بافر شاخص برای مش این لایه یا0را در صورت نامشخص نشان می دهد. اگر مشخص شده باشد، XrPassthroughLayerMeshANDROID::indexCount هر مجموعه مش برای این لایه باید کمتر یا برابر باindexCapacityباشد.
استفاده معتبر (ضمنی)
- پسوند
XR_ANDROID_composition_layer_passthrough_meshباید قبل از استفاده از XrPassthroughLayerCreateInfoANDROID فعال شود -
typeبایدXR_TYPE_PASSTHROUGH_LAYER_CREATE_INFO_ANDROIDباشد -
nextبایدNULLیا یک اشاره گر معتبر به ساختار بعدی در یک زنجیره ساختار باشد. همچنین ببینید: XrPassthroughLayerMeshANDROID
یک برنامه می تواند از تابع xrDestroyPassthroughLayerANDROID برای آزاد کردن لایه عبور و منابع زیرین استفاده کند.
XrResult xrDestroyPassthroughLayerANDROID(
XrPassthroughLayerANDROID layer);
توضیحات پارامترها
-
layerXrPassthroughLayerANDROID است که باید از بین برود.
استفاده معتبر (ضمنی)
- پسوند
XR_ANDROID_composition_layer_passthrough_meshباید قبل از فراخوانیxrDestroyPassthroughLayerANDROIDفعال شود -
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 است که اطلاعات مش را مشخص می کند.
-
برنامه باید تعداد شاخصهای مش عبوری را در XrPassthroughLayerMeshANDROID::vertexCount و XrPassthroughLayerMeshANDROID::indexCount کمتر یا مساوی با حداکثر مقادیر برگردانده شده توسط XrSystemPassthroughLayerPropertiesANDROID::maxCountshI مشخص کند. XrSystemPassthroughLayerPropertiesANDROID::maxMeshVertexCount هنگام فراخوانی xrGetSystemProperties . اگر تعداد شاخص های مش داده شده توسط mesh از xrSetPassthroughLayerMeshANDROID بیشتر از مقادیر حداکثر باشد، XR_ERROR_MESH_DATA_LIMIT_EXCEEDED_ANDROID برگردانده می شود.
اگر ظرفیت بافر مش توسط XrPassthroughLayerCreateInfoANDROID::vertexCapacity و XrPassthroughLayerCreateInfoANDROID::indexCapacity در هنگام ایجاد layer با استفاده از xrCreatePassthroughLayerANDROID مشخص شده باشد، آنگاه error XR_ERROR_SIZE_INSUFFICIENT برمی گردد. xrSetPassthroughLayerMeshANDROID اگر تعداد شاخص های مش تعریف شده توسط mesh بیشتر از ظرفیت باشد.
استفاده معتبر (ضمنی)
- پسوند
XR_ANDROID_composition_layer_passthrough_meshباید قبل از فراخوانی xrSetPassthroughLayerMeshANDROID فعال شود -
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;
توضیحات اعضا
-
typeXrStructureType این ساختار است. -
nextNULLیا اشاره گر به ساختار بعدی در زنجیره ساختار است. -
windingOrderXrWindingOrderANDROID از مثلث های مش است که در هنگام رندر کردن مش از آن برای حذف پشتی استفاده می شود. -
vertexCountیکuint32_tاست که نشان دهنده تعداد رئوس در مش است. وقتی XrPassthroughLayerCreateInfoANDROID::vertexCapacity مشخص می شود،vertexCountباید کمتر یا مساویvertexCapacityباشد.-
verticesیک اشاره گر به آرایه ای ازXrVector3fاست که شامل موقعیت های رأس مش مثلث است.
-
-
indexCountیکuint32_tاست که نشان دهنده تعداد اندیس ها در مش مثلث است. آخرینindexCount % 3شاخص ها، در صورت وجود، ترسیم نمی شوند. وقتی XrPassthroughLayerCreateInfoANDROID::indexCapacity مشخص می شود،indexCountباید کمتر یا مساوی باindexCapacityباشد. -
indicesیک اشاره گر به آرایهuint16_tاست که شامل شاخص های مش مثلث است.
استفاده معتبر (ضمنی)
- پسوند
XR_ANDROID_composition_layer_passthrough_meshباید قبل از استفاده از XrPassthroughLayerMeshANDROID فعال شود -
typeبایدXR_TYPE_PASSTHROUGH_LAYER_MESH_ANDROIDباشد -
nextبایدNULLیا یک اشاره گر معتبر به ساختار بعدی در یک زنجیره ساختار باشد -
windingOrderباید یک مقدار معتبر XrWindingOrderANDROID باشد - اگر
vertexCount0, verticesباید نشانگر آرایه ای از ساختارهایvertexCountXrVector3f باشد. - اگر
indexCount0, 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
شمارش 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
فهرست های جدید
ساختارهای جدید
- XrPassthroughLayerCreateInfoANDROID
- XrPassthroughLayerMeshANDROID
- XrCompositionLayerPassthroughANDROID
- XrSystemPassthroughLayerPropertiesANDROID
توابع جدید
- xrCreatePassthroughLayerANDROID
-
xrDestroyPassthroughLayerANDROID - xrSetPassthroughLayerMeshANDROID
مسائل
تاریخچه نسخه
- بازبینی 1، 11/09/2024 (لوانا چن)
- توضیحات پسوند اولیه
OpenXR™ و لوگوی OpenXR علائم تجاری متعلق به The Khronos Group Inc. هستند و به عنوان یک علامت تجاری در چین، اتحادیه اروپا، ژاپن و بریتانیا ثبت شده اند.