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;

猜你喜欢

转载自blog.csdn.net/qq_19473837/article/details/84868832