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