XR_ANDROID_global_passthrough_dimming
Name String
XR_ANDROID_global_passthrough_dimming
ประเภทส่วนขยาย
ส่วนขยายอินสแตนซ์
หมายเลขต่อที่ลงทะเบียนไว้
797
การแก้ไข
1
สถานะการให้สัตยาบัน
ไม่ได้รับการให้สัตยาบัน
ทรัพยากร Dependency ของส่วนขยายและเวอร์ชัน
วันที่แก้ไขล่าสุด
2026-03-10
สถานะ IP
ไม่มีการอ้างสิทธิ์ IP ที่ทราบ
ผู้เขียน
Brian Chen, Google
Kyle Chen, Google
Nihav Jain, Google
Spencer Quin, Google
ภาพรวม
เมื่อมีการเปิดตัวอุปกรณ์แบบมองทะลุผ่านเลนส์ สิ่งสำคัญคือไม่เพียงแต่อนุญาตให้แอปพลิเคชันปรับความมืดของโหมดส่งผ่านเพื่อผสมผสานกับบริบทของแอปให้ดีที่สุดสำหรับผู้ใช้เท่านั้น แต่ยังต้องอนุญาตให้ระบบเพิ่มความสว่างของโหมดส่งผ่านเพื่อความปลอดภัยด้วย
ส่วนขยายนี้มีฟังก์ชัน 2 อย่างสำหรับแอปในการตั้งค่าและรับระดับการหรี่แสงปัจจุบัน รวมถึงเหตุการณ์ที่จะประกาศเมื่อระดับการหรี่แสงเปลี่ยนไป
ตรวจสอบความสามารถของระบบ
โครงสร้าง XrSystemGlobalDimmingPropertiesANDROID มีคำจำกัดความดังนี้
typedef struct XrSystemGlobalDimmingPropertiesANDROID {
XrStructureType type;
void* next;
XrBool32 supportsGlobalDimming;
} XrSystemGlobalDimmingPropertiesANDROID;
คำอธิบายสมาชิก
typeคือ XrStructureType ของโครงสร้างนี้nextคือNULLหรือตัวชี้ไปยังโครงสร้างถัดไปในเชนโครงสร้าง ไม่มีการกำหนดโครงสร้างดังกล่าวใน OpenXR หลักหรือส่วนขยายนี้ ไม่มีการกำหนดโครงสร้างดังกล่าวใน OpenXR หลักหรือส่วนขยายนี้supportsGlobalDimmingเป็นXrBool32ซึ่งระบุว่าระบบปัจจุบันรองรับการหรี่แสงทั่วโลกหรือไม่
แอปพลิเคชันสามารถตรวจสอบว่าระบบรองรับการหรี่แสงทั่วโลกหรือไม่โดยเชื่อมโยงโครงสร้าง XrSystemGlobalDimmingPropertiesANDROID กับ XrSystemProperties เมื่อเรียกใช้ xrGetSystemProperties
หากรันไทม์แสดงผล XR_FALSE สำหรับ supportsGlobalDimming รันไทม์ต้องแสดงผล XR_ERROR_FEATURE_UNSUPPORTED เมื่อมีการเรียกใช้ xrGetGlobalDimmingLevelANDROID
การใช้งานที่ถูกต้อง (โดยนัย)
- ต้องเปิดใช้ส่วนขยาย
XR_ANDROID_global_passthrough_dimmingก่อนใช้ XrSystemGlobalDimmingPropertiesANDROID -
typeต้องเป็นXR_TYPE_SYSTEM_GLOBAL_DIMMING_PROPERTIES_ANDROID -
nextต้องเป็นNULLหรือพอยน์เตอร์ที่ถูกต้องไปยังโครงสร้างถัดไปในเชนโครงสร้าง
แจกแจงระดับการหรี่แสงทั่วโลกที่รองรับ
โครงสร้าง xrEnumerateSupportedGlobalDimmingLevelsANDROID มีคำจำกัดความดังนี้
XrResult xrEnumerateSupportedGlobalDimmingLevelsANDROID(
XrInstance instance,
XrSystemId systemId,
uint32_t supportedGlobalDimmingLevelCapacityInput,
uint32_t* supportedGlobalDimmingLevelCountOutput,
float* supportedGlobalDimmingLevels);
คำอธิบายสมาชิก
instanceคืออินสแตนซ์ที่ดึงข้อมูลsystemIdมาsystemIdคือXrSystemIdที่จะแสดงรายการระดับที่รองรับsupportedGlobalDimmingLevelCapacityInputคือความจุของอาร์เรย์supportedGlobalDimmingLevelsหรือ 0 เพื่อระบุคำขอให้ดึงข้อมูลความจุที่จำเป็นsupportedGlobalDimmingLevelCountOutputคือตัวชี้ไปยังจำนวนของsupportedGlobalDimmingLevelsที่เขียน หรือตัวชี้ไปยังความจุที่จำเป็นในกรณีที่supportedGlobalDimmingLevelCapacityInputไม่เพียงพอsupportedGlobalDimmingLevelsเป็นตัวชี้ไปยังอาร์เรย์ของระดับที่รองรับ แต่สามารถเป็น NULL ได้หากsupportedGlobalDimmingLevelCapacityInputเป็น 0
หาก supportedGlobalDimmingLevelCountOutput ที่แสดงผลเป็น 0 ระบบจะรองรับระดับการหรี่แสงทั่วโลกทั้งหมดระหว่าง 0.0 ถึง 1.0
xrEnumerateSupportedGlobalDimmingLevelsANDROID จะแจกแจงระดับการหรี่แสงทั่วโลกที่ XrSystemId รองรับ ระดับที่รองรับต้องไม่เปลี่ยนแปลงตลอดอายุการใช้งานของ XrInstance รายการระดับที่แสดงผลต้องจัดเรียงตามลำดับจากน้อยไปมาก
รันไทม์ต้องแสดงเนื้อหาบัฟเฟอร์ที่เหมือนกันจากการแจงนับนี้เสมอสำหรับ systemId ที่ระบุและตลอดอายุการใช้งานของ instance
การใช้งานที่ถูกต้อง (โดยนัย)
- ต้องเปิดใช้ส่วนขยาย
XR_ANDROID_global_passthrough_dimmingก่อนเรียกใช้ xrEnumerateSupportedGlobalDimmingLevelsANDROID -
instanceต้องเป็นแฮนเดิล XrInstance ที่ถูกต้อง -
supportedGlobalDimmingLevelCountOutputต้องเป็นตัวชี้ไปยังค่าuint32_t - หาก
supportedGlobalDimmingLevelCapacityInputไม่ใช่0supportedGlobalDimmingLevelsต้องเป็นพอยน์เตอร์ไปยังอาร์เรย์ของค่าsupportedGlobalDimmingLevelCapacityInputfloat
รหัสการคืนสินค้า
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_RUNTIME_FAILUREXR_ERROR_SIZE_INSUFFICIENTXR_ERROR_SYSTEM_INVALIDXR_ERROR_VALIDATION_FAILURE
กำหนดค่าระดับการลดแสงโดยรวม
โครงสร้าง XrGlobalDimmingFrameEndInfoANDROID มีคำจำกัดความดังนี้
typedef struct XrGlobalDimmingFrameEndInfoANDROID {
XrStructureType type;
const void* next;
float globalDimmingLevel;
} XrGlobalDimmingFrameEndInfoANDROID;
คำอธิบายพารามิเตอร์
typeคือ XrStructureType ของโครงสร้างนี้nextคือNULLหรือตัวชี้ไปยังโครงสร้างถัดไปในเชนโครงสร้าง ไม่มีการกำหนดโครงสร้างดังกล่าวใน OpenXR หลักหรือส่วนขยายนี้globalDimmingLevelคือค่าระหว่าง 0.0 (โปร่งใส) ถึง 1.0 (ทึบแสง) รันไทม์อาจแมปค่านี้กับระดับการหรี่แสงทั่วโลกที่รองรับซึ่งใกล้เคียงที่สุด แอปพลิเคชันสามารถตั้งค่านี้เป็น -1.0 เพื่อระบุว่าต้องการใช้ระดับการหรี่แสงปัจจุบัน
ค่า globalDimmingLevel จะระบุเปอร์เซ็นต์ของแสงที่ถูกบล็อก โดยค่า 0.0 สอดคล้องกับการบล็อกแสง 0% และ 1.0 สอดคล้องกับการบล็อกแสง 100% เปอร์เซ็นต์ของแสงที่ถูกบล็อกสามารถแสดงโดยทั่วไปได้ดังนี้
100% - Light Transmittance%
เปอร์เซ็นต์การส่งผ่านแสงตาม ISO 8980-3:2022 สามารถวัดได้จากอัตราส่วนของฟลักซ์การแผ่รังสีที่ส่งผ่านต่อฟลักซ์การแผ่รังสีที่ตกกระทบที่ความยาวคลื่นของแสงที่มองเห็นได้ (380 นาโนเมตรถึง 780 นาโนเมตร)
XrGlobalDimmingFrameEndInfoANDROID เป็นโครงสร้างที่แอปพลิเคชันสามารถเชื่อมโยงใน XrFrameEndInfo เพื่อขอระดับการหรี่แสงทั่วโลกที่ต้องการได้
รันไทม์ต้องเป็นไปตามระดับการหรี่แสงที่ขอหากระดับการหรี่แสงที่ขอแตกต่างจากระดับการหรี่แสงปัจจุบัน
รันไทม์จะควบคุมระดับการหรี่แสงโดยรวมและอาจไม่สนใจระดับการหรี่แสงโดยรวมที่ต้องการเนื่องจากเหตุผลด้านความปลอดภัย
การใช้งานที่ถูกต้อง (โดยนัย)
- ต้องเปิดใช้ส่วนขยาย
XR_ANDROID_global_passthrough_dimmingก่อนที่จะใช้ XrGlobalDimmingFrameEndInfoANDROID -
typeต้องเป็นXR_TYPE_GLOBAL_DIMMING_FRAME_END_INFO_ANDROID -
nextต้องเป็นNULLหรือพอยน์เตอร์ที่ถูกต้องไปยังโครงสร้างถัดไปในเชนโครงสร้าง
ฟังก์ชัน xrGetGlobalDimmingLevelANDROID มีคำจำกัดความดังนี้
XrResult xrGetGlobalDimmingLevelANDROID(
XrSession session,
float* dimmingLevel);
คำอธิบายพารามิเตอร์
sessionเป็นแฮนเดิล XrSession ที่ถูกต้องdimmingLevelคือตัวชี้ไปยังระดับการหรี่แสงปัจจุบัน
dimmingLevel ที่แสดงผลต้องอยู่ระหว่าง 0.0 ถึง 1.0 โดย 0.0 หมายถึงโปร่งใสทั้งหมด และ 1.0 หมายถึงหรี่แสงทั้งหมด
หากยังไม่ได้ตั้งค่าระดับการหรี่แสง รันไทม์ต้องตั้งค่าระดับการหรี่แสงเป็น 0.0 เมื่อเปิดใช้โหมดส่งผ่าน และเป็น 1.0 เมื่อปิดใช้โหมดส่งผ่าน
การใช้งานที่ถูกต้อง (โดยนัย)
- ต้องเปิดใช้ส่วนขยาย
XR_ANDROID_global_passthrough_dimmingก่อนเรียกใช้ xrGetGlobalDimmingLevelANDROID -
sessionต้องเป็นแฮนเดิล XrSession ที่ถูกต้อง -
dimmingLevelต้องเป็นตัวชี้ไปยังค่าfloat
รหัสการคืนสินค้า
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_VALIDATION_FAILURE
เหตุการณ์การเปลี่ยนแปลงระดับการหรี่แสง
โครงสร้าง XrEventDataGlobalDimmingLevelChangedANDROID มีคำจำกัดความดังนี้
typedef struct XrEventDataGlobalDimmingLevelChangedANDROID {
XrStructureType type;
const void* next;
XrSession session;
} XrEventDataGlobalDimmingLevelChangedANDROID;
คำอธิบายสมาชิก
typeคือ XrStructureType ของโครงสร้างนี้nextคือNULLหรือตัวชี้ไปยังโครงสร้างถัดไปในเชนโครงสร้าง ไม่มีการกำหนดโครงสร้างดังกล่าวใน OpenXR หลักหรือส่วนขยายนี้sessionเป็นแฮนเดิล XrSession ที่ถูกต้อง
แอปพลิเคชันสามารถดึงข้อมูลเหตุการณ์นี้ได้โดยใช้ xrPollEvent ระบบจะส่งเหตุการณ์นี้เมื่อมีการเปลี่ยนระดับการหรี่แสงโดยแอปหรือปุ่มบนอุปกรณ์
ระบบจะไม่ส่งเหตุการณ์นี้เมื่อแอปที่โฟกัสเปลี่ยนไปเป็นแอปอื่น
แอปพลิเคชันควรตอบสนองต่อเหตุการณ์โดยเรียกใช้ xrGetGlobalDimmingLevelANDROID เพื่อรับระดับการหรี่แสงใหม่และอัปเดต XrGlobalDimmingFrameEndInfoANDROID :: globalDimmingLevel ตามลำดับ การตอบสนองต่อเหตุการณ์จะช่วยรับประกันว่ารันไทม์จะได้รับสัญญาณเมื่อแอปพลิเคชันเปลี่ยนระดับการหรี่แสงที่ต้องการ
การใช้งานที่ถูกต้อง (โดยนัย)
- ต้องเปิดใช้ส่วนขยาย
XR_ANDROID_global_passthrough_dimmingก่อนใช้ XrEventDataGlobalDimmingLevelChangedANDROID -
typeต้องเป็นXR_TYPE_EVENT_DATA_GLOBAL_DIMMING_LEVEL_CHANGED_ANDROID -
nextต้องเป็นNULLหรือพอยน์เตอร์ที่ถูกต้องไปยังโครงสร้างถัดไปในเชนโครงสร้าง
โค้ดตัวอย่าง
ตรวจสอบความสามารถของระบบและแจกแจงระดับการหรี่แสงทั่วโลกที่รองรับ
โค้ดตัวอย่างต่อไปนี้แสดงวิธีตรวจสอบว่าระบบรองรับการหรี่แสงทั่วโลกหรือไม่
XrInstance instance; // previously initialized
XrSystemId systemId; // previously initialized
// The function pointers are previously initialized using xrGetInstanceProcAddr.
PFN_xrEnumerateSupportedGlobalDimmingLevelsANDROID xrEnumerateSupportedGlobalDimmingLevelsANDROID;
XrSystemGlobalDimmingPropertiesANDROID dimmingControlSystemProperties { XR_TYPE_SYSTEM_GLOBAL_DIMMING_PROPERTIES_ANDROID };
XrSystemProperties systemProperties; // Chain dimmingControlSystemProperties
// ...
// Run xrGetSystemProperties()
// ...
if (!dimmingControlSystemProperties.supportsGlobalDimming) {
// The system does not support global dimming
return;
}
// Enumerate supported levels
uint32_t count = 0;
CHK_XR(xrEnumerateSupportedGlobalDimmingLevelsANDROID(instance, systemId, count, &count, nullptr));
std::vector<float> supportedLevels(count);
CHK_XR(xrEnumerateSupportedGlobalDimmingLevelsANDROID(instance, systemId, count, &count, supportedLevels.data()));
เหตุการณ์การเปลี่ยนแปลงระดับการหรี่แสงแบบสำรวจความคิดเห็น
โค้ดตัวอย่างต่อไปนี้แสดงวิธีโพลเหตุการณ์การเปลี่ยนแปลงระดับการหรี่แสง
XrEventDataBuffer event{ XR_TYPE_EVENT_DATA_BUFFER };
// ...
// Run xrPollEvent()
// ...
switch (event.type) {
// This event will not be sent when focused app switches
case XR_TYPE_EVENT_DATA_GLOBAL_DIMMING_LEVEL_CHANGED_ANDROID:
{
const XrEventDataGlobalDimmingLevelChangedANDROID &dimmingLevelChangedEvent =
*reinterpret_cast<XrEventDataGlobalDimmingLevelChangedANDROID *>(&event);
// Query new dimming level using xrGetGlobalDimmingLevelANDROID()
}
}
คำสั่งใหม่
โครงสร้างใหม่
- XrEventDataGlobalDimmingLevelChangedANDROID
การขยาย XrFrameEndInfo :
การขยาย XrSystemProperties :
ค่าคงที่ Enum ใหม่
XR_ANDROID_GLOBAL_PASSTHROUGH_DIMMING_EXTENSION_NAMEXR_ANDROID_global_passthrough_dimming_SPEC_VERSIONการขยาย XrStructureType :
XR_TYPE_EVENT_DATA_GLOBAL_DIMMING_LEVEL_CHANGED_ANDROIDXR_TYPE_GLOBAL_DIMMING_FRAME_END_INFO_ANDROIDXR_TYPE_SYSTEM_GLOBAL_DIMMING_PROPERTIES_ANDROID
ปัญหา
ประวัติเวอร์ชัน
ฉบับแก้ไข 1, 2025-10-07 (Brian Chen)
- คำอธิบายส่วนขยายเริ่มต้น