1. 程式人生 > >Vulkan CookBook 第一章 3 連線Vulkan Loader庫

Vulkan CookBook 第一章 3 連線Vulkan Loader庫

連線Vulkan Loader庫

對Vulkan API的支援由圖形硬體供應商實現,並通過圖形驅動程式提供。每個供應商都可以在他們選擇的任何動態庫中實現它,甚至可以通過驅動程式更新來更改它。 這就是為什麼和驅動程式一起安裝Vulkan Loader的原因。我們也可以從安裝SDK的資料夾中安裝它。它允許開發人員通過Windows作業系統上的vulkan-1.dll庫或Linux作業系統上的libvulkan.so.1庫訪問Vulkan API入口點。 Vulkan Loader負責將Vulkan API呼叫傳輸到適當的圖形驅動程式。在一臺計算機上可能有很多的硬體元件支援Vulkan,但是使用Vulkan Loader我們不需要知道應該使用哪個驅動程式,或者我們應該連線哪個庫以便能夠使用Vulkan。開發人員只需要知道Vulkan庫的名稱:Windows上的vulkan-1.dll或Linux上的libvulkan.so.1。當我們想在我們的應用程式中使用Vulkan時,我們只需要在我們的程式碼中連線它(載入它)。提示:在Windows作業系統上,Vulkan Loader庫名為vulkan-1.dll。 在Linux OS上,Vulkan Loader庫名為libvulkan.so.1。

怎麼做...

在Windows作業系統上:1.準備一個名為vulkan_library的HMODULE型別的變數。 2.呼叫LoadLibrary("vulkan-1.dll")並將此操作的結果儲存在vulkan_library變數中。 3.通過檢查vulkan_library變數的值是否與nullptr不同,確認此操作已成功。

在Liunx作業系統上: 1.準備一個名為vulkan_library的void*型別的變數。 2.呼叫dloepn("libvulkan.so.1",RTLD_NOW)並將此操作的結果儲存在vulkan_library變數中。 3.通過檢查vulkan_library變數的值是否與nullptr不同,確認此操作已成功。

這個怎麼運作...

LoadLibrary()是Windows作業系統上可用的功能。 dlopen()是Linux作業系統上可用的函式。 它們都將指定的動態連結庫載入(開啟)到我們應用程式的記憶體空間中。 這樣我們就可以載入(獲取指標)從給定庫實現和匯出的函式,並在我們的應用程式中使用它們。 如下所示:

#if defined _WIN32
vulkan_library = LoadLibrary( "vulkan-1.dll" );
#elif defined __linux
vulkan_library = dlopen( "libvulkan.so.1", RTLD_NOW ); #endif
if( vulkan_library == nullptr ) {
std::cout << "Could not connect with a Vulkan Runtime library." << std::endl; return false;
}
return true;

成功呼叫後,我們可以載入使用Vulkan獲取所有API的函式地址了。