1. 程式人生 > >Vulkan Cookbook 第四章 4 建立檢視緩衝區

Vulkan Cookbook 第四章 4 建立檢視緩衝區

建立檢視緩衝區

譯者注:示例程式碼點選此處

當我們想要將給定緩衝區用作統一紋理緩衝區或儲存紋理元素緩衝區時,需要為它建立檢視緩衝區。

怎麼做...

1.獲取建立了給定緩衝區的邏輯裝置控制代碼。將其儲存在名為logical_device的VkDevice型別的變數中。
2.獲取建立的緩衝區控制代碼並將其儲存在名為buffer的VkBuffer型別變數中。
3.選擇檢視緩衝區的格式(應如何解釋緩衝區的內容),並使用它來初始化名為format的VkFormat型別變數。
4.選擇要為其建立檢視的緩衝區記憶體部分。在名為memory_offset的VkDeviceSize型別的變數中設定此記憶體的起始點(從緩衝區記憶體的開頭偏移)。通過名為memory_range的VkDeviceSize型別的變數定義此記憶體的大小。
5.建立名為buffer_view_create_info的VkBufferViewCreateInfo型別變數。使用以下值初始化其成員:
    ·sType為VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO
    ·pNext為nullptr
    ·flags為0
    ·buffer為buffer
    ·format為format
    ·offset為memory_offset
    ·range為memory_range
6.建立名為buffer_view的VkBufferView型別變數。它將用於儲存建立的檢視緩衝區控制代碼。
7.呼叫vkCreateBufferView( logical_device, &buffer_view_create_info, nullptr, &buffer_view ),為其提供第一個引數提供邏輯裝置控制代碼,第二個引數指向buffer_view_create_info的變數的指標,第三個引數nullptr,以及最後一個引數指向buffer_view變數。
8.通過檢查呼叫返回的值是否等於VK_SUCCESS,確保呼叫成功。

這個怎麼運作...

要建立檢視緩衝區,我們需要考慮的最重要的事情是檢視的格式和將為其分配的記憶體部分。這樣在著色器內部緩衝區的內容可以類似於影象(紋理)進行解釋。這些引數定義如下:

VkBufferViewCreateInfo buffer_view_create_info = {   
  VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO, 
  nullptr,
  0,
  buffer, 
  format, 
  memory_offset, 
  memory_range
};

接下來我們使用指定的引數建立緩衝區:

VkResult result = vkCreateBufferView( logical_device, &buffer_view_create_info, nullptr, &buffer_view ); 
if( VK_SUCCESS != result ) {
  std::cout << "Could not creat buffer view." << std::endl;
  return false; 
}
return true;