Vulkan Cookbook 第四章 譯者總結篇
譯者總結篇
想要使用Vulkan緩衝區和影象儲存資料,必須先建立它們。
緩衝區:在建立時需要知道緩衝區應該有多大以及想要如何使用緩衝區。緩衝區大小由我們希望儲存在其中的資料決定。緩衝區在應用程式中使用的方式由緩衝區的用法指定。我們不能以緩衝區建立期間未定義的方式使用緩衝區。
影象: 當我們想要建立影象時,需要準備多個引數:影象的型別、尺寸(大小),組建的數量以及每個組建的位數(格式)。我們還需要知道影象是否包含mipmap或者它是否包含多個圖層(普通影象必須包含至少一個,而立方圖影象必須至少包含六個)。還必須考慮預期的使用場景,這些場景也是在影象建立過程中定義的。我們不能以一種在建立的過程中未定義的方式使用影象。
緩衝區和影象是沒有記憶體的所以我們要為它繫結記憶體。記憶體分兩種裝置本地記憶體(例如視訊記憶體)和本機記憶體(CPU記憶體)。我們不能直接將資料上傳到裝置本地記憶體,需要將資料拷貝到本機記憶體,然後再複製資料到裝置本地記憶體。建立和繫結詳見本章內容。
複製資料我們需要先開啟命令緩衝區記錄操作,然後記錄記憶體屏障,記錄拷貝操作,如果我們後面還有其他操作可以再記錄新的記憶體屏障,再記錄操作,然後結束命令緩衝區記錄。記憶體屏障的作用是用來同步命令的執行過程。將命令緩衝區提交給佇列去執行命令。詳見本章內容。
相關推薦
Vulkan Cookbook 第四章 譯者總結篇
譯者總結篇 想要使用Vulkan緩衝區和影象儲存資料,必須先建立它們。 緩衝區:在建立時需要知道緩衝區應該有多大以及想要如何使用緩衝區。緩衝區大小由我們希望儲存在其中的資料決定。緩衝區在應用程式中使用的方式由緩衝區的用法指定。我們不能以緩衝區建立期間未定義的方式使用緩衝區。 影象:
Vulkan Cookbook 第三章 譯者總結篇
本篇對第三章進行總結。 為了讓Vulkan處理我們的命令,必須建立命令緩衝區將命令記錄在緩衝區中然後提交給特定佇列。 為了得到我們想要的命令緩衝區需要先通過邏輯裝置級函式建立命令池,然後通過命令池分配一個命令緩衝區,此操作也同樣通過邏輯裝置級函式。 為了將命令記錄到命令緩衝區,我們必須保
Vulkan Cookbook 第四章 15 使用殘存緩衝區更新裝置本地記憶體繫結的緩衝區
使用殘存緩衝區更新裝置本地記憶體繫結的緩衝區 譯者注:示例程式碼點選此處 暫存資源用於更新非主機不可見的記憶體內容。這樣的記憶體無法對映,因此我們需要一箇中間緩衝區,其內容可以很容易地對映和更新,並且可以從中傳輸資料。 怎麼做... 1.獲取儲存在名為logical_device的V
Vulkan Cookbook 第四章 14 將資料從影象複製到緩衝區
將資料從影象複製到緩衝區 譯者注:示例程式碼點選此處 在Vulkan中,我們不僅可以把資料從緩衝區傳輸到影象,還可以將資料從影象複製到緩衝區。繫結到它們的記憶體物件的屬性是什麼並不重要。但是資料複製操作是更新無法對映的裝置本地記憶體的唯一方法。 怎麼做... 1.獲取命令緩衝區的控制
Vulkan Cookbook 第四章 13 將資料從緩衝區複製到影象
將資料從緩衝區複製到影象 譯者注:示例程式碼點選此處 對於影象,我們可以繫結從不同記憶體型別分配的記憶體物件。但我們只能從的應用程式直接對映和更新主機可見記憶體。當想要更新使用裝置本地記憶體的影象記憶體時。我們需要從緩衝區中複製資料。 怎麼做... 1.獲取命令緩衝區的控制代碼並將其
Vulkan Cookbook 第四章 12 在緩衝區之間複製資料
在緩衝區之間複製資料 在Vulkan中,為了將資料上傳到緩衝區,我們不僅限於記憶體對映技術。既使繫結到它們的記憶體物件是從不同的記憶體型別分配的,也可以在緩衝區之間賦值資料。 譯者注:示例程式碼點選此處 怎麼做... 1.獲取命令緩衝區的控制代碼。將其儲存在名為command_buf
Vulkan Cookbook 第四章 11 對映、更新和取消對映主機可見記憶體
對映、更新和取消對映主機可見記憶體 譯者注:示例程式碼點選此處 對於渲染期間使用的影象和緩衝區,建議繫結位於影象硬體(裝置本地記憶體)上的記憶體。這會產生最好的表現。但我們不能直接訪問這樣的記憶體,需要使用中間(暫存)資源來調節GPU(裝置)和CPU(主機)之間的資料傳輸。 另一方面,暫
Vulkan Cookbook 第四章 10 使用立方體影象檢視建立分層2D影象
使用立方體影象(CUBEMAP)檢視建立分層2D影象 譯者注:示例程式碼點選此處 怎麼做... 在3D應用程式或遊戲中使用影象的一個非常常見的例子是CUBEMAP,用於模擬反映其環境的物件。但我們不建立一個立方體影象,我們需要建立一個分層影象,並通過影象檢視告訴硬體它必須將其圖層解釋為6
Vulkan Cookbook 第四章 9 建立2D影象和檢視
建立2D影象和檢視 譯者注:示例程式碼點選此處 在許多流行的應用程式或遊戲中使用的最常見影象型別是具有RGBA四個組建和每個紋素32位的典型2D紋理。要在Vulkan中建立這樣的資源,我們需要建立一個2D影象和一個適合的影象檢視。 怎麼做... 1.獲取邏輯裝置控制代碼並使用它來初始
Vulkan Cookbook 第四章 8 建立影象檢視
建立影象檢視 譯者注:示例程式碼點選此處 在Vulkan命令中很少使用影象。幀緩衝器和著色器(通過描述符集)通過影象檢視訪問影象。影象檢視定義影象記憶體的選定部分,並指定正確讀取影象資料所需的附加資訊。這就是為什麼我們需要知道如何建立一個影象檢視。 怎麼做... 1.獲取邏輯裝置控制
Vulkan Cookbook 第四章 7 設定影象記憶體屏障
設定影象記憶體屏障 譯者注:示例程式碼點選此處 建立影象用於各種目的,它們用作紋理,通過描述符集將它們繫結到管線,作為渲染目標,或者作為交換鏈中的可呈現影象。我們可以將資料複製到影象或從影象複製資料(這些也是在影象建立期間定義的獨特用法)。 在我們開始將影象用作任何目的之前,每次想要更改
Vulkan Cookbook 第四章 6 分配記憶體物件和將其繫結到影象
分配記憶體物件和將其繫結到影象 譯者注:示例程式碼點選此處 與緩衝區類似,影象不是使用繫結的記憶體儲存建立的。我們需要隱式建立一個記憶體物件並將其繫結到影象。也可以使用現有記憶體來實現此目的。 譯者注:影象不是使用繫結的記憶體儲存建立的原文are not created with a b
Vulkan Cookbook 第四章 5 建立影象
建立影象 譯者注:示例程式碼點選此處 影象表示可以具有一維、二維或三維的資料,並且可以具有額外的mipmap級別和圖層。影象資料的每個元素(紋理元素)也可以具有一個或多個樣本。 影象可用於許多不同的目的。我們可以將它們用作複製操作的資料來源。也可以通過描述符集將影象繫結到管線,並將它們用
Vulkan Cookbook 第四章 4 建立檢視緩衝區
建立檢視緩衝區 譯者注:示例程式碼點選此處 當我們想要將給定緩衝區用作統一紋理緩衝區或儲存紋理元素緩衝區時,需要為它建立檢視緩衝區。 怎麼做... 1.獲取建立了給定緩衝區的邏輯裝置控制代碼。將其儲存在名為logical_device的VkDevice型別的變數中。 2.獲取建立的緩
Vulkan Cookbook 第四章 3 設定緩衝區記憶體屏障
設定緩衝區記憶體屏障 譯者注:示例程式碼點選此處 緩衝區可用於各種目的。對於每個緩衝區,我們可以上傳資料或從中複製資料通過描述符集將緩衝區繫結到管線。並在著色器中將其用作資料來源,或者可以在著色器中將資料儲存在緩衝區中。 我們不僅在緩衝區建立期間,而且在預期使用之前必須向驅動程式通知使用
Vulkan Cookbook 第四章 2 為緩衝區分配和繫結記憶體物件
為緩衝區分配和繫結記憶體物件 譯者注:示例程式碼點選此處 在Vulkan中緩衝區沒有自己的記憶體。為了能夠在我們的應用程式中使用緩衝區並在裡面儲存資料,需要分配一個記憶體物件並將其繫結都一個緩衝區。 怎麼做... 1.獲取建立邏輯裝置的物理裝置控制代碼。將其儲存在名為physical
Vulkan Cookbook 第四章 1 建立緩衝區
建立緩衝區 譯者注:示例程式碼點選此處 緩衝區是最簡單的資源,因為他們代表的資料只能線形佈局在記憶體中,就像典型的C/C++陣列一樣: 緩衝區可用於各種目的。它們可以通過描述符集在管道中用於統一緩衝區,記錄緩衝區或紋理緩衝區等資料儲存。它們可以是頂點索引或屬性的資料來源,也可以用作
Vulkan Cookbook 第四章 資源和記憶體
在本章中我們將介紹以下內容: 建立緩衝區 為緩衝區分配和繫結記憶體物件 設定緩衝區記憶體屏障 建立緩衝區檢視 建立影象 分配記憶體物件並繫結到影象 設定影象記憶體屏障 建立影象檢視 建立2D影象和檢視 使用CUBEMAP檢視建立分層2D影象 對映、更新和取消對映主機可見記憶體 在緩衝區之間複製資
Vulkan Cookbook 第四章 21 銷燬緩衝區
銷燬緩衝區 譯者注:示例程式碼點選此處 當不再使用緩衝區時,應該銷燬它 怎麼做... 1.獲取邏輯裝置的控制代碼並將其儲存在名為logical_device的VkDevice型別變數中。 2.將緩衝區的控制代碼儲存在名為buffer的VkBuffer型別變數中。 3.呼叫vkDest
Vulkan Cookbook 第四章 20 釋放記憶體物件
釋放記憶體物件 譯者注:示例程式碼點選此處 當不在需要記憶體物件時,需要銷燬它們。 怎麼做... 1.獲取邏輯裝置的控制代碼並將其儲存在名為logical_device的VkDevice型別變數中。 2.獲取名為memory_object的VkDeviceMemory型別的變數,其中