XR_ANDROID_enumerate_system_extension_properties

מחרוזת שם

XR_ANDROID_enumerate_system_extension_properties

סוג התוסף

תוסף למכונה

מספר השלוחה הרשום

725

גרסה

1

סטטוס האישור

לא אושר

תלויות של תוספים וגרסאות

OpenXR 1.0

תאריך השינוי האחרון

2026-02-11

סטטוס IP

אין תלונות ידועות על הפרת קניין רוחני.

שותפים ביצירת התוכן

ספנסר קווין, Google
ניהב ג'יין, Google
קני ורקאמר, Google

סקירה כללית

התוסף הזה מאפשר לאפליקציות לקבוע באילו תוספים תומכת הגדרת המערכת הנוכחית. גם אם תוסף נתמך על ידי סביבת זמן הריצה, יכול להיות שהוא לא נתמך על ידי חומרת המערכת הנוכחית.

המבנה של XrSystemExtensionPropertiesANDROID מוגדר כך:

typedef struct XrSystemExtensionPropertiesANDROID {
    XrStructureType          type;
    void*                    next;
    XrExtensionProperties    properties;
    XrBool32                 isSupported;
} XrSystemExtensionPropertiesANDROID;

תיאורי חברים

  • ‫type הוא ה-XrStructureType של המבנה הזה.
  • ‫next הוא NULL או מצביע למבנה הבא בשרשרת מבנים.
  • ‫properties הוא XrExtensionProperties עם שם התוסף.
  • ‫isSupported הוא ערך בוליאני שמציין אם התוסף נתמך כרגע על ידי המערכת.

שימוש תקין (משתמע)

המבנה של XrEventDataSystemPropertiesChangedANDROID מוגדר כך:

typedef struct XrEventDataSystemPropertiesChangedANDROID {
    XrStructureType    type;
    const void*        next;
} XrEventDataSystemPropertiesChangedANDROID;

תיאורי חברים

  • ‫type הוא ה-XrStructureType של המבנה הזה.
  • ‫next הוא NULL או מצביע למבנה הבא בשרשרת מבנים.

סביבת זמן הריצה חייבת להוסיף את האירוע הזה לתור כשהמאפיינים של תוסף המערכת משתנים. לדוגמה, כשמחברים ציוד היקפי חדש שמאפשר פונקציונליות חדשה.

כל הקריאות ל-xrEnumerateSystemExtensionPropertiesANDROID חייבות להחזיר את אותם ערכים עד שאירוע XrEventDataSystemPropertiesChangedANDROID חדש יתווסף לתור.

כשאפליקציה מקבלת את האירוע הזה, היא צריכה לקרוא שוב ל-xrEnumerateSystemExtensionPropertiesANDROID כדי לקבוע את מאפייני התוספים העדכניים ביותר של המערכת, ואולי ליצור או להשמיד את כלי המעקב שמשויכים לתוספים האלה לפי הצורך.

שימוש תקין (משתמע)

הפונקציה xrEnumerateSystemExtensionPropertiesANDROID מוגדרת כך:

XrResult xrEnumerateSystemExtensionPropertiesANDROID(
    XrInstance                                  instance,
    XrSystemId                                  systemId,
    uint32_t                                    propertyCapacityInput,
    uint32_t*                                   propertyCountOutput,
    XrSystemExtensionPropertiesANDROID*         properties);

תיאורי פרמטרים

  • ‫instance הוא XrInstance תקין.
  • ‫systemId הוא sliink:XrSystemId תקין של המערכת שרוצים לאחזר את מאפייני התוסף שלה.
  • ‫propertyCapacityInput הוא הקיבולת של המערך properties, או 0 כדי לציין בקשה לאחזור הקיבולת הנדרשת.
  • ‫propertyCountOutput הוא מספר מאפייני התוספים המבוקשים.
  • ‫properties הוא מערך של מבני XrSystemExtensionPropertiesANDROID. הערך של NULL יכול להיות propertyCapacityInput אם הוא 0.
  • בקטע פרמטרים של שטח אחסון זמני יש תיאור מפורט של אחזור הגודל הנדרש של properties.

שימוש תקין (משתמע)

  • חובה להפעיל את התוסף XR_ANDROID_enumerate_system_extension_properties לפני שקוראים לפונקציה xrEnumerateSystemExtensionPropertiesANDROID
  • ‫ instance חייב להיות כינוי תקין של XrInstance
  • propertyCountOutput חייב להיות מצביע לערך uint32_t
  • אם propertyCapacityInput הוא לא 0, אז properties חייב להיות מצביע למערך של מבני propertyCapacityInput XrSystemExtensionPropertiesANDROID

קודי החזרה

הצלחה

  • XR_SUCCESS

נכשל

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_INSTANCE_LOST
  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_SYSTEM_INVALID
  • XR_ERROR_VALIDATION_FAILURE

דוגמה

XrInstance instance; // XrInstance previously created

XrSystemId systemId; // XrSystemId from a previously created instance

PFN_xrEnumerateSystemExtensionPropertiesANDROID xrEnumerateSystemExtensionPropertiesANDROID;

// Poll events for recommended resolution changes.
XrEventDataBuffer event = {XR_TYPE_EVENT_DATA_BUFFER};
XrResult result = xrPollEvent(instance, &event);

if (result == XR_SUCCESS) {
    switch (event.type) {
        case XR_TYPE_EVENT_DATA_SYSTEM_PROPERTIES_CHANGED_ANDROID:
            // It's possible that the system was lost and a new id will be returned
            XrSystemId newSystemId;
            XrSystemGetInfo getInfo = {XR_TYPE_SYSTEM_GET_INFO};
            getInfo.formFactor = XR_FORM_FACTOR_HEAD_MOUNTED_DISPLAY;
            if(XR_SUCCESS == xrGetSystem(instance, &getInfo, &newSystemId)) {
                if(systemId != newSystemId) {
                    //Do things like recreate the session
                    systemId = newSystemId;
                }
            }

            // Enumerate the extensions to see which ones are now supported based on hardware changes
            uint32_t extensionsCount;
            xrEnumerateSystemExtensionPropertiesANDROID(instance, systemId, 0, &extensionsCount, NULL);

            std::vector<XrSystemExtensionPropertiesANDROID> properties(extensionsCount,
                {.type = XR_TYPE_SYSTEM_EXTENSION_PROPERTIES_ANDROID});

            XrResult result = xrEnumerateSystemExtensionPropertiesANDROID(
                instance,
                systemId,
                extensionsCount,
                &extensionsCount,
                properties.data()
            );

            // Do something based on which extensions are now supported by the system
            break;
    }
}
PFN_xrEnumerateSystemExtensionPropertiesANDROID xrEnumerateSystemExtensionPropertiesANDROID;

XrInstance instance;
XrInstanceCreateInfo createInfo = {XR_TYPE_INSTANCE_CREATE_INFO};
// Initialize the createInfo with appropriate values for the application
CHK_XR(xrCreateInstance(&createInfo, &instance));

// Get the systemId for the system.
XrSystemId systemId;
XrSystemGetInfo getInfo = {XR_TYPE_SYSTEM_GET_INFO};
getInfo.formFactor = XR_FORM_FACTOR_HEAD_MOUNTED_DISPLAY;
CHK_XR(xrGetSystem(instance, &getInfo, &systemId));

// Enumerate the system extension properties.
uint32_t extensionsCount;
xrEnumerateSystemExtensionPropertiesANDROID(instance, systemId, 0, &extensionsCount, NULL);

std::vector<XrSystemExtensionPropertiesANDROID> properties(extensionsCount,
    {.type = XR_TYPE_SYSTEM_EXTENSION_PROPERTIES_ANDROID});

XrResult result = xrEnumerateSystemExtensionPropertiesANDROID(
    instance,
    systemId,
    extensionsCount,
    &extensionsCount,
    properties.data()
);

בעיות

היסטוריית הגרסאות

  • גרסה 1, 17.03.2026 (Kenny Vercaemer)

    • גרסת התוסף הראשונית.