Vulkan入門流程

2022-09-18 15:57:12 字數 2919 閱讀 5771

vulkan是khronos group(opengl標準的維護組織)開發的乙個新api,它提供了對現代顯示卡的乙個更好的抽象,與opengl和direct3d等現有api相比,vulkan可以更詳細的向顯示卡描述你的應用程式打算做什麼,從而可以獲得更好的效能和更小的驅動開銷。vulkan的設計理念與direct3d 12和metal基本類似,但vulkan作為opengl的替代者,它設計之初就是為了跨平台實現的,可以同時在windows、linux和android開發。甚至在mac os系統上,khronos也提供了vulkan的sdk,雖然這個sdk底層其實是使用moltenvk實現的。

moltenvk實際上是乙個將vulkan api對映到metal api的乙個框架,vulkan這裡只是相當於乙個抽象層。

然而,為了得到乙個更好的效能,vulkan引入了乙個非常冗餘的api。相比於opengl驅動幫我們做了大量的工作,vulkan與影象api相關的每乙個細節,都需要從頭設定,包括初始幀緩衝區的建立與緩衝、紋理記憶體的管理等等。因此,哪怕只畫乙個三角形,我們都要寫數倍於opengl的**。

而google在android 7.0後提供了對vulkan的支援,並且提供了一系列工具鏈與validation layers(後面會進行說明)。在android studio中,只要將shader**放在src/main/shaders資料夾下面,專案編譯時會自動被編譯成.spv位元組碼,可以作為assets使用。

由於vulkan的使用非常冗長,這篇文章將主要介紹vulkan api的一般使用模式以及畫乙個三角形所需要的基本元素,後續將對每乙個章節進行詳細介紹,並最終繪製出乙個三角形。

vulkan作為高效能api,為了降低驅動開銷,只提供了非常有限的錯誤檢查。如果預設情況下,它只包含非常有限的錯誤檢查和除錯功能。如果發生了錯誤,驅動會直接崩潰,而不是返回錯誤資訊,或者顯示異常等。

vulkan允許您通過乙個名為validation layer的特性進行通用的檢查。validation layer是可以插入到api和圖形驅動程式之間的**片段,用於執行額外的函式引數檢查和跟蹤記憶體管理問題。好處是,您可以在開發過程中啟用它們,然後在釋放應用程式時完全禁用它們,而開銷為零。任何人都可以編寫自己的驗證層,但是lunarg的vulkan sdk提供了一組標準的驗證層,另外還需要註冊乙個**函式來接收來自validation layer的除錯訊息。

因為vulkan實際上對於每乙個步驟是非常明確的,所以相比於opengl,我們可以更快速的找出出錯的地方。

而google也提供了一些validation layers幫助我們做這些事情,如果要在專案中使用它們,只要修改gradle的構建,或者將二進位制檔案手動的新增到專案的jni庫目錄裡,這些so可以在ndk的以下目錄找到:

$/sources/third_party/vulkan/src/build-android/jnilibs

sourcesets /sources/third_party/vulkan/src/build-android/jnilibs"}}

}**:

vulkan是khronos group(opengl標準的維護組織)開發的乙個新api,它提供了對現代顯示卡的乙個更好的抽象,與opengl和direct3d等現有api相比,vulkan可以更詳細的向顯示卡描述你的應用程式打算做什麼,從而可以獲得更好的效能和更小的驅動開銷。vulkan的設計理念與direct3d 12和metal基本類似,但vulkan作為opengl的替代者,它設計之初就是為了跨平台實現的,可以同時在windows、linux和android開發。甚至在mac os系統上,khronos也提供了vulkan的sdk,雖然這個sdk底層其實是使用moltenvk實現的。

moltenvk實際上是乙個將vulkan api對映到metal api的乙個框架,vulkan這裡只是相當於乙個抽象層。

然而,為了得到乙個更好的效能,vulkan引入了乙個非常冗餘的api。相比於opengl驅動幫我們做了大量的工作,vulkan與影象api相關的每乙個細節,都需要從頭設定,包括初始幀緩衝區的建立與緩衝、紋理記憶體的管理等等。因此,哪怕只畫乙個三角形,我們都要寫數倍於opengl的**。

而google在android 7.0後提供了對vulkan的支援,並且提供了一系列工具鏈與validation layers(後面會進行說明)。在android studio中,只要將shader**放在src/main/shaders資料夾下面,專案編譯時會自動被編譯成.spv位元組碼,可以作為assets使用。

由於vulkan的使用非常冗長,這篇文章將主要介紹vulkan api的一般使用模式以及畫乙個三角形所需要的基本元素,後續將對每乙個章節進行詳細介紹,並最終繪製出乙個三角形。

vulkan作為高效能api,為了降低驅動開銷,只提供了非常有限的錯誤檢查。如果預設情況下,它只包含非常有限的錯誤檢查和除錯功能。如果發生了錯誤,驅動會直接崩潰,而不是返回錯誤資訊,或者顯示異常等。

vulkan允許您通過乙個名為validation layer的特性進行通用的檢查。validation layer是可以插入到api和圖形驅動程式之間的**片段,用於執行額外的函式引數檢查和跟蹤記憶體管理問題。好處是,您可以在開發過程中啟用它們,然後在釋放應用程式時完全禁用它們,而開銷為零。任何人都可以編寫自己的驗證層,但是lunarg的vulkan sdk提供了一組標準的驗證層,另外還需要註冊乙個**函式來接收來自validation layer的除錯訊息。

因為vulkan實際上對於每乙個步驟是非常明確的,所以相比於opengl,我們可以更快速的找出出錯的地方。

而google也提供了一些validation layers幫助我們做這些事情,如果要在專案中使用它們,只要修改gradle的構建,或者將二進位制檔案手動的新增到專案的jni庫目錄裡,這些so可以在ndk的以下目錄找到:

$/sources/third_party/vulkan/src/build-android/jnilibs

sourcesets /sources/third_party/vulkan/src/build-android/jnilibs"}}

}**:

Vulkan 2 建立Vulkan例項

本節的源 是01 init instance.cpp vulkan程式的第一步是建立乙個vulkan例項。當你閱讀到本節的時候,可以在lunarg vulkan 示例 倉庫中api samples資料夾下找到01 init instance.cpp vulkan api使用vkinstance物件 ...

搭建Vulkan環境

必備三件套 開啟vulkansdk 1.2.148.1 installer.exe 等待安裝 安裝完成 檢驗vulkan 1.開啟vulkan安裝的路徑 c vulkansdk 1.2.148.1 2.進入bin資料夾 c vulkansdk 1.2.148.1 bin 3.開啟vkcube.exe...

vulkan管線學習8

介紹說這個是用來指定繪製的時候,有多少顏色緩衝,深度緩衝,多少次取樣,還有他們各自的內容是啥樣。然後這個是掛在vkframebuffer的 然後由於這個教程這裡只需要colorbuffer,所以只建立了乙個color attachment format這裡保持和swapchain一致,第二個好像關於...