Antarmuka ini memungkinkan Anda untuk mengkonfigurasi perangkat grafis sebelum dibuat. Kasus penggunaan umum termasuk memilih GPU tertentu dalam skenario multi-GPU, memungkinkan ekstensi grafis, dan memodifikasi pembuatan penyangga.
Penyedia Anda dapat mengekspor simbol asli XRSDKPreInit, yang disebut awal awal awalan runtime, sebelum pembuatan perangkat grafis. Ini harus mengisi struktur UnityXRPreInitProvider dengan titik masuk yang relevan untuk menyediakan mesin dengan informasi yang mungkin diperlukan selama awalisasi. Beberapa penyedia membutuhkan ini karena perangkat grafis diciptakan sebelum penyedia dapat menginisialisasi.
Proses pembuatan proyek Unity membutuhkan nama perpustakaan penyedia Anda sebelum dapat memanggil XRSDKPreInit() pada startup mesin. Untuk melakukan ini, menerapkan antarmuka IXRLoaderPreInit.GetPreInitLibraryName pada XRLoader Anda:
public string GetPreInitLibraryName(BuildTarget buildTarget, BuildTargetGroup buildTargetGroup)
{
return "XRSDKMyProviderLibraryName";
}
Ketika Unity memulai, menjalankan kode di atas untuk memuat perpustakaan. Kemudian, Unity membuka perpustakaan, mencari ekspor XRSDKPreInit, dan menyebutnya. Pada saat itu, XRSDKPreInit harus mendaftarkan UnityXRPreInitProvider.
Berikut ini contoh sederhana yang mendaftarkan semua callback yang dapat Anda gunakan untuk awalisasi mesin:
XRSDKPreInit(IUnityInterfaces * interfaces)
{
IUnityXRPreInit* preInit = (IUnityXRPreInit*)interfaces->GetInterface(GetUnityInterfaceGUID<IUnityXRPreInit>());
UnityXRPreInitProvider provider = { 0 };
provider.userData = nullptr;
provider.GetPreInitFlags = GetPreInitFlags;
provider.GetGraphicsAdapterId = GetGraphicsAdapterId;
provider.GetVulkanInstanceExtensions = GetVulkanInstanceExtensions;
provider.GetVulkanDeviceExtensions = GetVulkanDeviceExtensions;
preInit->RegisterPreInitProvider(&provider);
}
Mengatur panggilan apa pun yang tidak perlu Anda nullptr.
GetPreInitFlags mengembalikan bitfield 64-bit bendera. Bendera berikut saat ini terpapar:
kUnityXRPreInitFlagsEGLUsePBuffer - Pada platform EGL (Android, perangkat Oculus mandiri, dll.), EGL harus diinisialisasi menggunakan PBuffers.kUnityXRPreInitFlagsEGLUseNoErrorContext - Pada platform EGL, EGL harus diinisialisasi dengan konteks NO_ERROR.Penyedia tidak boleh mengatur bit yang tidak ditentukan, karena mereka mungkin digunakan untuk ekspansi masa depan.
GetGraphicsAdapterId menetapkan adaptor grafis yang digunakan perangkat grafis runtime Unity untuk awalisasi API grafis. Misalnya, jika pengguna menghubungkan headset ke GPU yang berbeda dari perangkat tampilan utama pengguna, Unity mungkin perlu menginisialisasi API grafis yang secara eksplisit menargetkan GPU sekunder.
GetVulkanDeviceExtensions dan GetVulkanInstanceExtensions digunakan jika penyedia membutuhkan Unity untuk meminisialisasikan Vulkan dengan ekstensi spesifik untuk perangkat dan instance. Ini sering digunakan untuk berbagi permukaan compositor. Keduanya kembali string ekstensi ruang yang dipisahkan.
GetPreInitLibraryName hanya disebut pada XRLoader pertama di XRManager prefabJenis aset yang memungkinkan Anda untuk menyimpan GameObject lengkap dengan komponen dan properti. Prefab bertindak sebagai template dari mana Anda dapat membuat instance objek baru di tempat kejadian. More info