创建图像视图
译者注:示例代码点击此处
在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;