Vulkan Cookbook 第四章 8 创建图像视图

创建图像视图

译者注:示例代码点击此处

在Vulkan命令中很少使用图像。帧缓冲器和着色器(通过描述符集)通过图像视图访问图像。图像视图定义图像内存的选定部分,并指定正确读取图像数据所需的附加信息。这就是为什么我们需要知道如何创建一个图像视图。

怎么做...

1.获取逻辑设备句柄,并使用它来初始化名为logical_device的VkDevice类型变量。
2.使用创建图像的句柄初始化image的VkImage类型变量。
3.创建名为image_view_create_info的VkImageViewCreateInfo类型变量。对其成员使用一下值:
    ·sType为VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO
    ·pNext为nullptr
    ·flags为0
    ·image为image
    ·viewType为图像类型
    ·format为图像格式或其他兼容格式(如果您想在视图中重新解释它)
    ·components的所有成员都设置成VK_COMPONENT_SWIZZLE_IDENTITY
    ·对subresourceRange的成员使用以下值:
        ·aspectMask为图像方面(颜色,深度或模板)
        ·baseMipLevel为0
        ·levelCount为VK_REMAINING_MIP_LEVELS
        ·baseArrayLayer为0
        ·layerCount为VK_REMAINING_ARRAY_LAYERS
4.创建一个名为image_view的VkImageView类型变量。我们将存储创建的图像视图句柄。
5.调用vkCreateImageView( logical_device, &image_view_create_info, nullptr, &image_view ),为其提供逻辑设备句柄,指向image_view_create_info变量的指针,nullptr值和指向image_view变量的指针。
6.通过将返回值与VK_SUCCESS值进行对比,确保调用成功。

这个怎么运作...

图像视图定义用于访问图像的其他元数据。通过它,我们可以指定应该由命令访问的图像部分。虽然本节内容显示了如何为整个图像数据创建图像视图,但可以指定访问较小范围的资源。例如当我们渲染到渲染过程中的图时,我们可以指定只应更新一个mipmap级别。

图像视图还定义了如何解释图像内存。一个很好的例子是具有多个图层图像。对于它,我们可以定义一个直接将图像解释为分层图像的图像视图,或者我们可以使用图像视图从中创建立方体图。

这些参数指定如下:

VkImageViewCreateInfo image_view_create_info = {   
  VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO, 
  nullptr,
  0,
  image, 
  view_type,
  format,
  {
    VK_COMPONENT_SWIZZLE_IDENTITY, 
    VK_COMPONENT_SWIZZLE_IDENTITY, 
    VK_COMPONENT_SWIZZLE_IDENTITY, 
    VK_COMPONENT_SWIZZLE_IDENTITY
  }, 
  {
    aspect,
    0, 
    VK_REMAINING_MIP_LEVELS, 
    0, 
    VK_REMAINING_ARRAY_LAYERS
  } 
};

通过调用一次vkCreateImageView()函数来执行图像视图的创建。如下:

VkResult result = vkCreateImageView( logical_device, &image_view_create_info, nullptr, &image_view ); 
if( VK_SUCCESS != result ) {
  std::cout << "Could not create an image view." << std::endl;
  return false; 
}
return true;

猜你喜欢

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