Vulkan Cookbook 第四章 18 摧毀影象
摧毀影象
譯者注:示例程式碼點選此處
應該銷燬不在使用的影象以釋放其資源。
怎麼做...
1.獲取邏輯裝置的控制代碼並將其儲存在名為logical_device的VkDevice型別變數中。
2.使用影象的控制代碼初始化名為image的VkImage型別變數。
3.呼叫vkDestroyImage( logical_device, image, nullptr )並提供邏輯裝置控制代碼,影象的控制代碼和nullptr值。
4.出於安全原因,請為image變數分配VK_NULL_HANDLE值。
這個怎麼運作...
通過單次呼叫vkDestroyImage()函式來銷燬影象。為此,我們提供邏輯裝置的控制代碼,影象的控制代碼和nullptr值,如下所示:
if( VK_NULL_HANDLE != image ) {
vkDestroyImage( logical_device, image, nullptr );
image = VK_NULL_HANDLE;
}
首先,檢查控制代碼是否為空,其實我們沒有必要這麼做,因為vkDestroyImageView()函式內會判空。但是跳過不必要的函式呼叫是很好的。接下來,我們銷燬影象檢視併為儲存控制代碼的變數分配空控制代碼。
我們還嘗試通過檢查影象的控制代碼是否為空來避免不必要的函式呼叫。
相關推薦
Vulkan Cookbook 第四章 18 摧毀影象
摧毀影象 譯者注:示例程式碼點選此處 應該銷燬不在使用的影象以釋放其資源。 怎麼做... 1.獲取邏輯裝置的控制代碼並將其儲存在名為logical_device的VkDevice型別變數中。 2.使用影象的控制代碼初始化名為image的VkImage型別變數。 3.呼叫vkDestr
Vulkan Cookbook 第四章 8 建立影象檢視
建立影象檢視 譯者注:示例程式碼點選此處 在Vulkan命令中很少使用影象。幀緩衝器和著色器(通過描述符集)通過影象檢視訪問影象。影象檢視定義影象記憶體的選定部分,並指定正確讀取影象資料所需的附加資訊。這就是為什麼我們需要知道如何建立一個影象檢視。 怎麼做... 1.獲取邏輯裝置控制
Vulkan Cookbook 第四章 7 設定影象記憶體屏障
設定影象記憶體屏障 譯者注:示例程式碼點選此處 建立影象用於各種目的,它們用作紋理,通過描述符集將它們繫結到管線,作為渲染目標,或者作為交換鏈中的可呈現影象。我們可以將資料複製到影象或從影象複製資料(這些也是在影象建立期間定義的獨特用法)。 在我們開始將影象用作任何目的之前,每次想要更改
Vulkan Cookbook 第四章 5 建立影象
建立影象 譯者注:示例程式碼點選此處 影象表示可以具有一維、二維或三維的資料,並且可以具有額外的mipmap級別和圖層。影象資料的每個元素(紋理元素)也可以具有一個或多個樣本。 影象可用於許多不同的目的。我們可以將它們用作複製操作的資料來源。也可以通過描述符集將影象繫結到管線,並將它們用
Vulkan Cookbook 第四章 17 銷燬影象檢視
銷燬影象檢視 譯者注:示例程式碼點選此處 當我們不再需要影象檢視時,應該銷燬它。 怎麼做... 1.獲取邏輯裝置的控制代碼並將其儲存在名為logical_device的VkDevice型別變數中。 2.獲取儲存在名為image_view的VkImageView型別變數中的影象檢視控制
Vulkan Cookbook 第四章 14 將資料從影象複製到緩衝區
將資料從影象複製到緩衝區 譯者注:示例程式碼點選此處 在Vulkan中,我們不僅可以把資料從緩衝區傳輸到影象,還可以將資料從影象複製到緩衝區。繫結到它們的記憶體物件的屬性是什麼並不重要。但是資料複製操作是更新無法對映的裝置本地記憶體的唯一方法。 怎麼做... 1.獲取命令緩衝區的控制
Vulkan Cookbook 第四章 13 將資料從緩衝區複製到影象
將資料從緩衝區複製到影象 譯者注:示例程式碼點選此處 對於影象,我們可以繫結從不同記憶體型別分配的記憶體物件。但我們只能從的應用程式直接對映和更新主機可見記憶體。當想要更新使用裝置本地記憶體的影象記憶體時。我們需要從緩衝區中複製資料。 怎麼做... 1.獲取命令緩衝區的控制代碼並將其
Vulkan Cookbook 第四章 10 使用立方體影象檢視建立分層2D影象
使用立方體影象(CUBEMAP)檢視建立分層2D影象 譯者注:示例程式碼點選此處 怎麼做... 在3D應用程式或遊戲中使用影象的一個非常常見的例子是CUBEMAP,用於模擬反映其環境的物件。但我們不建立一個立方體影象,我們需要建立一個分層影象,並通過影象檢視告訴硬體它必須將其圖層解釋為6
Vulkan Cookbook 第四章 9 建立2D影象和檢視
建立2D影象和檢視 譯者注:示例程式碼點選此處 在許多流行的應用程式或遊戲中使用的最常見影象型別是具有RGBA四個組建和每個紋素32位的典型2D紋理。要在Vulkan中建立這樣的資源,我們需要建立一個2D影象和一個適合的影象檢視。 怎麼做... 1.獲取邏輯裝置控制代碼並使用它來初始
Vulkan Cookbook 第四章 6 分配記憶體物件和將其繫結到影象
分配記憶體物件和將其繫結到影象 譯者注:示例程式碼點選此處 與緩衝區類似,影象不是使用繫結的記憶體儲存建立的。我們需要隱式建立一個記憶體物件並將其繫結到影象。也可以使用現有記憶體來實現此目的。 譯者注:影象不是使用繫結的記憶體儲存建立的原文are not created with a b
Vulkan Cookbook 第四章 16 使用暫存緩衝區更新裝置本地記憶體繫結的影象
使用暫存(staging)緩衝區更新裝置本地記憶體繫結的影象 譯者注:示例程式碼點選此處 暫存緩衝區不僅可用於在緩衝區之間傳輸資料,還可用於在影象之間傳輸資料,在這裡,我們將展示如何對映緩衝區的記憶體並將其內容複製到所需的影象。 怎麼做... 1.建立一個足夠大的暫存緩衝區來儲存要傳
Vulkan Cookbook 第四章 15 使用殘存緩衝區更新裝置本地記憶體繫結的緩衝區
使用殘存緩衝區更新裝置本地記憶體繫結的緩衝區 譯者注:示例程式碼點選此處 暫存資源用於更新非主機不可見的記憶體內容。這樣的記憶體無法對映,因此我們需要一箇中間緩衝區,其內容可以很容易地對映和更新,並且可以從中傳輸資料。 怎麼做... 1.獲取儲存在名為logical_device的V
Vulkan Cookbook 第四章 12 在緩衝區之間複製資料
在緩衝區之間複製資料 在Vulkan中,為了將資料上傳到緩衝區,我們不僅限於記憶體對映技術。既使繫結到它們的記憶體物件是從不同的記憶體型別分配的,也可以在緩衝區之間賦值資料。 譯者注:示例程式碼點選此處 怎麼做... 1.獲取命令緩衝區的控制代碼。將其儲存在名為command_buf
Vulkan Cookbook 第四章 11 對映、更新和取消對映主機可見記憶體
對映、更新和取消對映主機可見記憶體 譯者注:示例程式碼點選此處 對於渲染期間使用的影象和緩衝區,建議繫結位於影象硬體(裝置本地記憶體)上的記憶體。這會產生最好的表現。但我們不能直接訪問這樣的記憶體,需要使用中間(暫存)資源來調節GPU(裝置)和CPU(主機)之間的資料傳輸。 另一方面,暫
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 第三章 18 釋放命令緩衝區
釋放命令緩衝區 譯者注:示例程式碼點選此處 當不再需要命令緩衝區以及它們未等待在裝置上執行時,可以釋放它們。 怎麼做... 1.獲取邏輯裝置的控制代碼並使用它來初始化名為logical_device的VkDevice型別變數。 2.獲取從邏輯裝置建立的命令池的控制代碼。將此控制代碼儲