XR_ANDROID_light_estimation_cubemap
নাম স্ট্রিং
XR_ANDROID_light_estimation_cubemap
এক্সটেনশন টাইপ
ইনস্ট্যান্স এক্সটেনশন
নিবন্ধিত এক্সটেনশন নম্বর
৭২২
সংশোধন
১
অনুমোদনের অবস্থা
অনুমোদিত নয়
এক্সটেনশন এবং সংস্করণ নির্ভরতা
XR_ANDROID_light_estimation
সর্বশেষ সংশোধনের তারিখ
২০২৫-০৮-০৬
আইপি স্ট্যাটাস
কোনো জ্ঞাত আইপি দাবি নেই।
অবদানকারীরা
সালার খান, গুগল
স্কট চুং, গুগল
জ্যারেড ফাইন্ডার, গুগল
স্পেন্সার কুইন, গুগল
লেভানা চেন, গুগল
নিহাব জৈন, গুগল
ইয়ুর্গেন স্টর্ম, গুগল
সংক্ষিপ্ত বিবরণ
This extension builds upon the basic XR_ANDROID_light_estimation extension. It adds support for getting cubemap lighting estimates, which provides more detailed estimates about the lighting in the physical environment.
দ্রষ্টব্য
লাইট এস্টিমেট ডেটা পাওয়ার পদ্ধতিটি বেসিক এক্সটেনশনের মতোই, তবে লাইট এস্টিমেটর হ্যান্ডেল তৈরি করার সময় XrCubemapLightEstimatorCreateInfoANDROID- কে XrLightEstimatorCreateInfoANDROID- এর সাথে চেইন করতে হবে।
সিস্টেমের সক্ষমতা পরীক্ষা করুন
typedef struct XrSystemCubemapLightEstimationPropertiesANDROID {
XrStructureType type;
void* next;
XrBool32 supportsCubemapLightEstimation;
} XrSystemCubemapLightEstimationPropertiesANDROID;
সদস্যদের বিবরণ
-
typeহলো এই স্ট্রাকচারটির XrStructureType । -
nextহলোNULLঅথবা একটি স্ট্রাকচার চেইনের পরবর্তী স্ট্রাকচারের একটি পয়েন্টার। কোর OpenXR বা এই এক্সটেনশনে এই ধরনের কোনো স্ট্রাকচার সংজ্ঞায়িত করা নেই। -
supportsCubemapLightEstimationহলো একটিXrBool32, যা নির্দেশ করে যে বর্তমান সিস্টেমটি কিউবম্যাপ লাইট এস্টিমেশন সমর্থন করে কি না।
xrGetSystemProperties কল করার সময়, কোনো অ্যাপ্লিকেশন XrSystemProperties-কে XrSystemCubemapLightEstimationPropertiesANDROID স্ট্রাকচার দিয়ে এক্সটেন্ড করার মাধ্যমে সিস্টেমটি কিউবম্যাপ লাইট এস্টিমেশন সমর্থন করতে সক্ষম কিনা তা যাচাই করতে পারে ।
যদি রানটাইম supportsCubemapLightEstimation জন্য XR_FALSE রিটার্ন করে এবং XrCubemapLightEstimatorCreateInfoANDROID-কে XrLightEstimatorCreateInfoANDROID- এর সাথে চেইন করা হয়ে থাকে, তাহলে রানটাইমকে অবশ্যই xrCreateLightEstimatorANDROID থেকে XR_ERROR_FEATURE_UNSUPPORTED রিটার্ন করতে হবে।
বৈধ ব্যবহার (অন্তর্নিহিত)
- XrSystemCubemapLightEstimationPropertiesANDROID ব্যবহার করার আগে
XR_ANDROID_light_estimation_cubemapএক্সটেনশনটি অবশ্যই সক্রিয় করতে হবে। -
typeঅবশ্যইXR_TYPE_SYSTEM_CUBEMAP_LIGHT_ESTIMATION_PROPERTIES_ANDROIDহতে হবে -
nextঅবশ্যইNULLঅথবা স্ট্রাকচার চেইনের পরবর্তী স্ট্রাকচারের একটি বৈধ পয়েন্টার হতে হবে।
সমর্থিত কিউবম্যাপ রেজোলিউশনগুলি পাওয়া
XrResult xrEnumerateCubemapLightingResolutionsANDROID(
XrInstance instance,
XrSystemId systemId,
uint32_t resolutionCapacityInput,
uint32_t* resolutionCountOutput,
uint32_t* resolutions);
প্যারামিটার বিবরণ
-
instanceপূর্বে তৈরি করা একটি XrInstance । -
systemIdহলো xrGetSystem দ্বারা পূর্বে প্রাপ্তXrSystemId, যার জন্য সমর্থিত কিউবম্যাপ রেজোলিউশনগুলো পাওয়া যাবে। -
resolutionCapacityInputহলো একটিuint32_tযাresolutionsঅ্যারেতে সংরক্ষণযোগ্য উপাদানের সর্বোচ্চ সংখ্যা নির্দেশ করে। -
resolutionCountOutputহলো একটিuint32_tপয়েন্টার, যা রানটাইম দ্বারা সেট করা হয় এবং এটিresolutionsঅ্যারেতে রানটাইম কর্তৃক লিখিত উপাদানের সংখ্যা নির্দেশ করে। -
resolutionsis an array ofuint32_twhich is populated by the runtime with the supported cubemap resolutions.
একটি কিউবম্যাপ রেজোলিউশন কিউবম্যাপের প্রতিটি তলের প্রস্থ এবং উচ্চতা পিক্সেলে নির্দেশ করে। ২-কল ইডিওম অনুযায়ী, অ্যাপ্লিকেশনটি লাইট এস্টিমেটর হ্যান্ডেল তৈরি করার সময় XrCubemapLightEstimatorCreateInfoANDROID :: cubemapResolution এ সমর্থিত রেজোলিউশনগুলোর মধ্যে একটি ব্যবহার করার জন্য বেছে নিতে পারে । অ্যাপ্লিকেশনটিকে অবশ্যই নির্বাচিত রেজোলিউশন এবং কালার ফরম্যাটের উপর ভিত্তি করে XrCubemapLightingDataANDROID- এর ইমেজ বাফার মেম্বারগুলোর জন্য উপযুক্ত পরিমাণ মেমরি বরাদ্দ করতে হবে।
বৈধ ব্যবহার (অন্তর্নিহিত)
- xrEnumerateCubemapLightingResolutionsANDROID কল করার আগে
XR_ANDROID_light_estimation_cubemapএক্সটেনশনটি অবশ্যই সক্রিয় করতে হবে। -
instanceঅবশ্যই একটি বৈধ XrInstance হ্যান্ডেল হতে হবে -
resolutionCountOutputঅবশ্যই একটিuint32_tমানের পয়েন্টার হতে হবে। - যদি
resolutionCapacityInputমান0না হয়, তাহলেresolutionsঅবশ্যইresolutionCapacityInputuint32_tমানগুলোর একটি অ্যারের পয়েন্টার হতে হবে।
রিটার্ন কোড
-
XR_SUCCESS
-
XR_ERROR_FUNCTION_UNSUPPORTED -
XR_ERROR_HANDLE_INVALID -
XR_ERROR_INSTANCE_LOST -
XR_ERROR_RUNTIME_FAILURE -
XR_ERROR_SIZE_INSUFFICIENT -
XR_ERROR_SYSTEM_INVALID -
XR_ERROR_VALIDATION_FAILURE
সমর্থিত কিউবম্যাপ রঙের ফরম্যাটগুলি পাওয়া
XrCubemapLightingColorFormatANDROID এনুমারেশনটি রানটাইমকে জানিয়ে দেয় যে, কিউবম্যাপ লাইটিংয়ের জন্য কোন কালার ফরম্যাট ব্যবহার করতে হবে।
typedef enum XrCubemapLightingColorFormatANDROID {
XR_CUBEMAP_LIGHTING_COLOR_FORMAT_R32G32B32_SFLOAT_ANDROID = 1,
XR_CUBEMAP_LIGHTING_COLOR_FORMAT_R32G32B32A32_SFLOAT_ANDROID = 2,
XR_CUBEMAP_LIGHTING_COLOR_FORMAT_R16G16B16A16_SFLOAT_ANDROID = 3,
XR_CUBEMAP_LIGHTING_COLOR_FORMAT_MAX_ENUM_ANDROID = 0x7FFFFFFF
} XrCubemapLightingColorFormatANDROID;
এনামগুলোর নিম্নলিখিত অর্থ রয়েছে:
এনামের বিবরণ
XR_CUBEMAP_LIGHTING_COLOR_FORMAT_R32G32B32_SFLOAT_ANDROID
৩টি চ্যানেল বিশিষ্ট একটি কালার ফরম্যাট, যেখানে প্রতিটি চ্যানেল হলো একটি ৩২-বিট ফ্লোটিং পয়েন্ট ভ্যালু।
XR_CUBEMAP_LIGHTING_COLOR_FORMAT_R32G32B32A32_SFLOAT_ANDROID
৪টি চ্যানেল বিশিষ্ট একটি কালার ফরম্যাট, যেখানে প্রতিটি চ্যানেল হলো একটি ৩২-বিট ফ্লোটিং পয়েন্ট ভ্যালু।
XR_CUBEMAP_LIGHTING_COLOR_FORMAT_R16G16B16A16_SFLOAT_ANDROID
৪টি চ্যানেল বিশিষ্ট একটি কালার ফরম্যাট, যেখানে প্রতিটি চ্যানেল হলো একটি ১৬-বিট ফ্লোটিং পয়েন্ট ভ্যালু।
XrResult xrEnumerateCubemapLightingColorFormatsANDROID(
XrInstance instance,
XrSystemId systemId,
uint32_t colorFormatCapacityInput,
uint32_t* colorFormatCountOutput,
XrCubemapLightingColorFormatANDROID* colorFormats);
প্যারামিটার বিবরণ
-
instanceপূর্বে তৈরি করা একটি XrInstance । -
systemIdহলো xrGetSystem দ্বারা পূর্বে প্রাপ্তXrSystemId, যার জন্য সমর্থিত কিউবম্যাপ রেজোলিউশনগুলো পাওয়া যাবে। -
colorFormatCapacityInputহলো একটিuint32_tযাcolorFormatsঅ্যারেতে সংরক্ষণযোগ্য উপাদানের সর্বোচ্চ সংখ্যা নির্দেশ করে। -
colorFormatCountOutputহলো একটিuint32_tপয়েন্টার, যা রানটাইম দ্বারা সেট করা হয় এবং এটিcolorFormatsঅ্যারেতে রানটাইম কর্তৃক লিখিত উপাদানের সংখ্যা নির্দেশ করে। -
colorFormatsহলো XrCubemapLightingColorFormatANDROID- এর একটি অ্যারে, যা রানটাইম দ্বারা সমর্থিত কিউবম্যাপ কালার ফরম্যাটগুলো দিয়ে পূরণ করা হয়।
২-কল ইডিওম অনুযায়ী , অ্যাপ্লিকেশনটি লাইট এস্টিমেটর হ্যান্ডেল তৈরি করার সময় XrCubemapLightEstimatorCreateInfoANDROID :: colorFormat এ সমর্থিত কালার ফরম্যাটগুলোর মধ্যে একটি ব্যবহার করার জন্য বেছে নিতে পারে । নির্বাচিত কালার ফরম্যাটের উপর ভিত্তি করে অ্যাপ্লিকেশনটিকে অবশ্যই XrCubemapLightingDataANDROID- এর ইমেজ বাফার মেম্বারগুলোর জন্য উপযুক্ত পরিমাণ মেমরি বরাদ্দ করতে হবে।
বৈধ ব্যবহার (অন্তর্নিহিত)
- xrEnumerateCubemapLightingColorFormatsANDROID কল করার আগে
XR_ANDROID_light_estimation_cubemapএক্সটেনশনটি অবশ্যই সক্রিয় করতে হবে। -
instanceঅবশ্যই একটি বৈধ XrInstance হ্যান্ডেল হতে হবে -
colorFormatCountOutputঅবশ্যই একটিuint32_tমানের পয়েন্টার হতে হবে। - যদি
colorFormatCapacityInput0না হয়, তাহলেcolorFormatsঅবশ্যইcolorFormatCapacityInputXrCubemapLightingColorFormatANDROID মানগুলোর একটি অ্যারের পয়েন্টার হতে হবে।
রিটার্ন কোড
-
XR_SUCCESS
-
XR_ERROR_FUNCTION_UNSUPPORTED -
XR_ERROR_HANDLE_INVALID -
XR_ERROR_INSTANCE_LOST -
XR_ERROR_RUNTIME_FAILURE -
XR_ERROR_SIZE_INSUFFICIENT -
XR_ERROR_SYSTEM_INVALID -
XR_ERROR_VALIDATION_FAILURE
একটি কিউবম্যাপ লাইট এস্টিমেটর হ্যান্ডেল তৈরি করুন
typedef struct XrCubemapLightEstimatorCreateInfoANDROID {
XrStructureType type;
const void* next;
uint32_t cubemapResolution;
XrCubemapLightingColorFormatANDROID colorFormat;
XrBool32 reproject;
} XrCubemapLightEstimatorCreateInfoANDROID;
সদস্যদের বিবরণ
-
typeহলো এই স্ট্রাকচারটির XrStructureType । -
nextহলোNULLঅথবা একটি স্ট্রাকচার চেইনের পরবর্তী স্ট্রাকচারের দিকে নির্দেশকারী একটি পয়েন্টার। -
cubemapResolutionহলো একটিuint32_tযা কিউবম্যাপ লাইটিংয়ের জন্য ব্যবহৃত রেজোলিউশন নির্দেশ করে। -
colorFormatহলো একটি XrCubemapLightingColorFormatANDROID, যা কিউবম্যাপ লাইটিং ডেটার জন্য ব্যবহৃত কালার ফরম্যাট নির্দেশ করে। -
reprojectহলো একটিXrBool32যা নির্দেশ করে যে কিউবম্যাপের লাইটিংকে অ্যাপ্লিকেশন বেস স্পেসে রিপ্রজেক্ট করা হবে কিনা।
XrCubemapLightEstimatorCreateInfoANDROID স্ট্রাকচারটি একটি XrLightEstimatorANDROID হ্যান্ডেল তৈরি করার জন্য প্রয়োজনীয় তথ্য বর্ণনা করে, যা কিউবম্যাপ লাইটিং এস্টিমেট প্রদান করতে সক্ষম। XrCubemapLightEstimatorCreateInfoANDROID :: cubemapResolution মেম্বারটিকে অবশ্যই xrEnumerateCubemapLightingResolutionsANDROID দ্বারা রিটার্ন করা রেজোলিউশনগুলোর মধ্যে একটিতে সেট করতে হবে। XrCubemapLightEstimatorCreateInfoANDROID :: colorFormat মেম্বারটিকে অবশ্যই xrEnumerateCubemapLightingColorFormatsANDROID দ্বারা রিটার্ন করা কালার ফরম্যাটগুলোর মধ্যে একটিতে সেট করতে হবে। যদি অ্যাপ্লিকেশনটি রেজোলিউশনকে সাপোর্টেড রেজোলিউশনগুলোর মধ্যে একটিতে অথবা কালার ফরম্যাটকে সাপোর্টেড কালার ফরম্যাটগুলোর মধ্যে একটিতে সেট না করে, তাহলে রানটাইমকে অবশ্যই xrCreateLightEstimatorANDROID থেকে XR_ERROR_FEATURE_UNSUPPORTED রিটার্ন করতে হবে।
বৈধ ব্যবহার (অন্তর্নিহিত)
- XrCubemapLightEstimatorCreateInfoANDROID ব্যবহার করার আগে
XR_ANDROID_light_estimation_cubemapএক্সটেনশনটি অবশ্যই সক্রিয় করতে হবে। -
typeঅবশ্যইXR_TYPE_CUBEMAP_LIGHT_ESTIMATOR_CREATE_INFO_ANDROIDহতে হবে -
nextঅবশ্যইNULLঅথবা স্ট্রাকচার চেইনের পরবর্তী স্ট্রাকচারের একটি বৈধ পয়েন্টার হতে হবে। -
colorFormatঅবশ্যই একটি বৈধ XrCubemapLightingColorFormatANDROID মান হতে হবে
কিউবম্যাপ আলোর অনুমান
typedef struct XrCubemapLightingDataANDROID {
XrStructureType type;
void* next;
XrLightEstimateStateANDROID state;
uint32_t imageBufferSize;
uint8_t* imageBufferRight;
uint8_t* imageBufferLeft;
uint8_t* imageBufferTop;
uint8_t* imageBufferBottom;
uint8_t* imageBufferFront;
uint8_t* imageBufferBack;
XrQuaternionf rotation;
XrTime centerExposureTime;
} XrCubemapLightingDataANDROID;
সদস্যদের বিবরণ
-
typeহলো এই স্ট্রাকচারটির XrStructureType । -
nextহলোNULLঅথবা একটি স্ট্রাকচার চেইনের পরবর্তী স্ট্রাকচারের একটি পয়েন্টার। বৈধ স্ট্রাকচারগুলো হলো XrAmbientLightANDROID , XrSphericalHarmonicsANDROID , XrDirectionalLightANDROID । -
stateহলো XrLightEstimateStateANDROID , যা আলোক অনুমানের অবস্থাকে নির্দেশ করে। -
imageBufferSizeহলো একটিuint32_t, যা কিউবম্যাপের প্রতিটি ফেস ইমেজ বাফারের বাইট সাইজ নির্দেশ করে। -
imageBufferRightহলো একটিuint8_tবাফার, যা কিউবম্যাপটির ডান দিকের তলের ছবি ধারণ করে। -
imageBufferLeftহলো একটিuint8_tবাফার, যা কিউবম্যাপটির বাম তলের ছবি ধারণ করে। -
imageBufferTopহলো একটিuint8_tবাফার, যা কিউবম্যাপটির উপরের তলের ছবিটি ধারণ করে। -
imageBufferBottomহলো একটিuint8_tবাফার, যা কিউবম্যাপটির নিচের তলের ছবি ধারণ করে। -
imageBufferFrontহলো একটিuint8_tবাফার, যা কিউবম্যাপটির সম্মুখভাগের ছবি ধারণ করে। -
imageBufferBackহলো একটিuint8_tবাফার, যা কিউবম্যাপটির পেছনের দিকের ছবি ধারণ করে। -
rotationহলো একটি XrQuaternionf যা কিউবম্যাপের ঘূর্ণন নির্দেশ করে। -
centerExposureTimeহলো একটিXrTimeযা কিউবম্যাপটি ক্যাপচার করার সময় নির্দেশ করে।
এই স্ট্রাকচারটি XrLightEstimateANDROID- এর সাথে চেইন করা যেতে পারে । রানটাইমকে অবশ্যই xrGetLightEstimateANDROID- এ এই স্ট্রাকচারটি পপুলেট করতে হবে শুধুমাত্র যদি লাইট এস্টিমেটর হ্যান্ডেল তৈরি করার জন্য XrCubemapLightEstimatorCreateInfoANDROID ব্যবহার করা হয়ে থাকে। অ্যাপ্লিকেশনটিকে অবশ্যই ইমেজ বাফারগুলির জন্য উপযুক্ত পরিমাণ মেমরি বরাদ্দ করতে হবে, যা লাইট এস্টিমেটর হ্যান্ডেল তৈরি করার সময় XrCubemapLightEstimatorCreateInfoANDROID :: cubemapResolution এবং XrCubemapLightEstimatorCreateInfoANDROID :: colorFormat এ সেট করা মানগুলির উপর নির্ভরশীল। অ্যাপ্লিকেশনটিকে অবশ্যই XrCubemapLightingDataANDROID :: imageBufferSize কে প্রতিটি ফেস ইমেজ বাফারের ধারণক্ষমতা অনুযায়ী বাইটে সেট করতে হবে। যদি অ্যাপ্লিকেশনটি কিউবম্যাপ লাইট এস্টিমেশন ব্যবহার না করে অথবা রানটাইমের ইমেজ বাফারগুলি পূরণ করার জন্য XrCubemapLightingDataANDROID :: imageBufferSize যথেষ্ট বড় না হয়, তাহলে রানটাইমকে অবশ্যই XrCubemapLightingDataANDROID :: state কে XR_LIGHT_ESTIMATE_STATE_INVALID_ANDROID এ সেট করতে হবে।
যদি অ্যাপ্লিকেশনটি লাইট এস্টিমেটর হ্যান্ডেল তৈরি করার সময় XrCubemapLightEstimatorCreateInfoANDROID :: reproject XR_TRUE তে সেট করে, তাহলে রানটাইমকে অবশ্যই XrCubemapLightingDataANDROID :: rotation কে আইডেন্টিটি রোটেশনে সেট করতে হবে এবং নিশ্চিত করতে হবে যে অভ্যন্তরীণভাবে ঘোরানো কিউবম্যাপটি অ্যাপ্লিকেশন বেস স্পেসের একটি আইডেন্টিটি কিউবম্যাপের ফেসগুলোর উপর রিপ্রজেক্ট করা হয়েছে।
নিচের ছবিতে দেখানো অনুযায়ী, লাইটিং কিউবম্যাপের বিন্যাসটি OpenGL কিউবম্যাপের বিন্যাসের অনুরূপ।
চিত্র ২৪। কিউবম্যাপ লেআউট।
বৈধ ব্যবহার (অন্তর্নিহিত)
- XrCubemapLightingDataANDROID ব্যবহার করার আগে
XR_ANDROID_light_estimation_cubemapএক্সটেনশনটি অবশ্যই সক্রিয় করতে হবে। -
typeঅবশ্যইXR_TYPE_CUBEMAP_LIGHTING_DATA_ANDROIDহতে হবে -
nextঅবশ্যইNULLঅথবা স্ট্রাকচার চেইনের পরবর্তী স্ট্রাকচারের একটি বৈধ পয়েন্টার হতে হবে। stateঅবশ্যই একটি বৈধ XrLightEstimateStateANDROID ভ্যালু হতে হবে।-
imageBufferRightঅবশ্যইimageBufferSizeuint8_tমানের একটি অ্যারের পয়েন্টার হতে হবে। -
imageBufferLeftঅবশ্যইimageBufferSizeuint8_tমানের একটি অ্যারের পয়েন্টার হতে হবে। -
imageBufferTopঅবশ্যইimageBufferSizeuint8_tমানের একটি অ্যারের পয়েন্টার হতে হবে। -
imageBufferBottomঅবশ্যইimageBufferSizeuint8_tমানের একটি অ্যারের পয়েন্টার হতে হবে। -
imageBufferFrontঅবশ্যইimageBufferSizeuint8_tমানের একটি অ্যারের পয়েন্টার হতে হবে। -
imageBufferBackঅবশ্যইimageBufferSizeuint8_tমানের একটি অ্যারের পয়েন্টার হতে হবে। -
imageBufferSizeপ্যারামিটারটি অবশ্যই0থেকে বড় হতে হবে।
আলো অনুমানের জন্য উদাহরণ কোড
নিম্নলিখিত উদাহরণ কোডটি দেখায় কিভাবে রানটাইম থেকে আলোর অনুমানের সমস্ত সম্ভাব্য পরিমাণ পাওয়া যায়।
XrSession session; // Created at app startup
XrInstance instance; // Created at app startup
XrSpace appSpace; // Created previously.
XrSystemId systemId; // Retrieved previously by xrGetSystem
PFN_xrCreateLightEstimatorANDROID xrCreateLightEstimatorANDROID; // Created previously.
PFN_xrDestroyLightEstimatorANDROID xrDestroyLightEstimatorANDROID; // Created previously.
PFN_xrGetLightEstimateANDROID xrGetLightEstimateANDROID; // Created previously.
PFN_xrEnumerateCubemapLightingResolutionsANDROID xrEnumerateCubemapLightingResolutionsANDROID; // Created previously.
PFN_xrEnumerateCubemapLightingColorFormatsANDROID xrEnumerateCubemapLightingColorFormatsANDROID; // Created previously.
XrSystemCubemapLightEstimationPropertiesANDROID props = {
.type = XR_TYPE_SYSTEM_CUBEMAP_LIGHT_ESTIMATION_PROPERTIES_ANDROID};
XrSystemProperties base = {.type = XR_TYPE_SYSTEM_PROPERTIES,
.next = &props};
CHK_XR(xrGetSystemProperties(instance, systemId, &base));
if (!props.supportsCubemapLightEstimation) {
// Cubemap light estimation is not supported
}
uint32_t cubemapResolution = 0;
std::vector<uint32_t> supportedCubemapResolutions;
uint32_t resolutionCount;
CHK_XR(xrEnumerateCubemapLightingResolutionsANDROID(
instance, systemId, 0, &resolutionCount, nullptr));
supportedCubemapResolutions.resize(resolutionCount);
if (resolutionCount == 0) {
// No cubemap lighting supported
} else {
CHK_XR(xrEnumerateCubemapLightingResolutionsANDROID(
instance, systemId, 0, &resolutionCount, supportedCubemapResolutions.data()));
cubemapResolution = supportedCubemapResolutions[0];
}
uint32_t pixelCount = cubemapResolution * cubemapResolution;
XrCubemapLightingColorFormatANDROID colorFormat;
std::vector<XrCubemapLightingColorFormatANDROID> supportedColorFormats;
uint32_t colorFormatCount;
CHK_XR(xrEnumerateCubemapLightingColorFormatsANDROID(
instance, systemId, 0, &colorFormatCount, nullptr));
supportedColorFormats.resize(colorFormatCount);
if (colorFormatCount == 0) {
// No supported color formats for cubemap lighting. Cannot use cubemap
// light estimation.
} else {
CHK_XR(xrEnumerateCubemapLightingColorFormatsANDROID(
instance, systemId, 0, &colorFormatCount, supportedColorFormats.data()));
colorFormat = supportedColorFormats[0];
}
uint32_t pixelSize = 0;
switch (colorFormat) {
case XR_CUBEMAP_LIGHTING_COLOR_FORMAT_R32G32B32_SFLOAT_ANDROID:
pixelSize = 3 * sizeof(float);
break;
case XR_CUBEMAP_LIGHTING_COLOR_FORMAT_R32G32B32A32_SFLOAT_ANDROID:
pixelSize = 4 * sizeof(float);
break;
case XR_CUBEMAP_LIGHTING_COLOR_FORMAT_R16G16B16A16_SFLOAT_ANDROID:
pixelSize = 4 * sizeof(uint16_t);
break;
default:
// Should not happen since the color format was validated previously.
break;
}
uint32_t perFaceImageBufferSize = pixelCount * pixelSize;
XrLightEstimatorANDROID estimator;
XrCubemapLightEstimatorCreateInfoANDROID cubemapCreateInfo = {
.type = XR_TYPE_CUBEMAP_LIGHT_ESTIMATOR_CREATE_INFO_ANDROID,
.cubemapResolution = cubemapResolution,
.colorFormat = colorFormat,
.reproject = XR_TRUE
};
XrLightEstimatorCreateInfoANDROID basicCreateInfo = {
.type = XR_TYPE_LIGHT_ESTIMATOR_CREATE_INFO_ANDROID,
.next = &cubemapCreateInfo};
CHK_XR(xrCreateLightEstimatorANDROID(session, &basicCreateInfo, &estimator));
std::vector<uint8_t> cubemapBuffer(perFaceImageBufferSize * 6); // 6 faces * perFaceImageBufferSize
// Every frame
XrTime updateTime; // Time used for the current frame's simulation update.
XrLightEstimateGetInfoANDROID info = {
.type = XR_TYPE_LIGHT_ESTIMATE_GET_INFO_ANDROID,
.space = appSpace,
.time = updateTime,
};
XrCubemapLightingDataANDROID cubemap = {
.type = XR_TYPE_CUBEMAP_LIGHTING_DATA_ANDROID,
.next = nullptr,
.imageBufferSize = perFaceImageBufferSize,
.imageBufferRight = cubemapBuffer.data() + 0 * perFaceImageBufferSize,
.imageBufferLeft = cubemapBuffer.data() + 1 * perFaceImageBufferSize,
.imageBufferTop = cubemapBuffer.data() + 2 * perFaceImageBufferSize,
.imageBufferBottom = cubemapBuffer.data() + 3 * perFaceImageBufferSize,
.imageBufferFront = cubemapBuffer.data() + 4 * perFaceImageBufferSize,
.imageBufferBack = cubemapBuffer.data() + 5 * perFaceImageBufferSize,
};
XrDirectionalLightANDROID directionalLight = {
.type = XR_TYPE_DIRECTIONAL_LIGHT_ANDROID,
.next = &cubemap,
};
XrSphericalHarmonicsANDROID totalSh = {
.type = XR_TYPE_SPHERICAL_HARMONICS_ANDROID,
.next = &directionalLight,
.kind = XR_SPHERICAL_HARMONICS_KIND_TOTAL_ANDROID,
};
XrSphericalHarmonicsANDROID ambientSh = {
.type = XR_TYPE_SPHERICAL_HARMONICS_ANDROID,
.next = &totalSh,
.kind = XR_SPHERICAL_HARMONICS_KIND_AMBIENT_ANDROID,
};
XrAmbientLightANDROID ambientLight = {
.type = XR_TYPE_AMBIENT_LIGHT_ANDROID,
.next = &ambientSh,
};
XrLightEstimateANDROID estimate = {
.type = XR_TYPE_LIGHT_ESTIMATE_ANDROID,
.next = &ambientLight,
};
XrResult result = xrGetLightEstimateANDROID(estimator, &info, &estimate);
if (result == XR_SUCCESS &&
estimate.state == XR_LIGHT_ESTIMATE_STATE_VALID_ANDROID) {
// use cubemap, directionalLight, totalSh, ambientSh, and
// ambientLight if each struct has a valid state field
if (cubemap.state == XR_LIGHT_ESTIMATE_STATE_VALID_ANDROID) {
// use cubemap
if (cubemapCreateInfo.reproject == XR_TRUE) {
XrQuaternionf identityQuaternion = {0.0f, 0.0f, 0.0f, 1.0f};
assert(memcmp(&cubemap.rotation, &identityQuaternion, sizeof(XrQuaternionf)) == 0);
}
}
}
// When you want to disable light estimation
CHK_XR(xrDestroyLightEstimatorANDROID(estimator));
নতুন কমান্ড
নতুন কাঠামো
XrLightEstimateANDROID-এর সম্প্রসারণ:
XrLightEstimatorCreateInfoANDROID- এর সম্প্রসারণ:
XrSystemProperties-এর সম্প্রসারণ :
নতুন এনাম
নতুন এনাম ধ্রুবক
-
XR_ANDROID_LIGHT_ESTIMATION_CUBEMAP_EXTENSION_NAME -
XR_ANDROID_light_estimation_cubemap_SPEC_VERSION XrStructureType সম্প্রসারণ :
-
XR_TYPE_CUBEMAP_LIGHTING_DATA_ANDROID -
XR_TYPE_CUBEMAP_LIGHT_ESTIMATOR_CREATE_INFO_ANDROID -
XR_TYPE_SYSTEM_CUBEMAP_LIGHT_ESTIMATION_PROPERTIES_ANDROID
-
সমস্যা
সংস্করণ ইতিহাস
সংশোধন ১, ২০২৫-১২-০৫ (সালার খান)
- প্রাথমিক এক্সটেনশনের বিবরণ