您的位置:首页 > 其它

vulakn教程--Drawing a Triangle--Presentation-- Image views

2016-09-09 20:52 369 查看
原文地址: vulkan-tutorial

Image views

为了使用
VkImage
,不管是在Swap Chain 还是在Pipeline 中,我们都必须创建
VkImageView
,就如同它的字面意思一样,
imageView
是image的一个 view.他描述了我们如何访问image、访问image的哪一部分等。

这一部分我们将创建
VkImageViews
, 并把它用作 color targets.

std::vector<VDeleter<VkImageView>> swapChainImageViews; //声明


需要填充的结构
VkImageViewCreateInfo


typedef struct VkImageViewCreateInfo {
VkStructureType sType
const void* pNext;
VkImageViewCreateFlags flags;
VkImage image;
VkImageViewType viewType;
VkFormat format;
VkComponentMapping components;
VkImageSubresourceRange subresourceRange;
} VkImageViewCreateInfo;


我们使用
for
循环来为每一个
Image
创建
ImageView


for (uint32_t i = 0; i < swapChainImages.size(); i++) {
...
}


VkImageViewCreateInfo createInfo = {};
createInfo.sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO;
createInfo.image = swapChainImages[i];
createInfo.viewType = VK_IMAGE_VIEW_TYPE_2D;
createInfo.format = swapChainImageFormat;


viewType
VK_IMAGE_VIEW_TYPE_1/2/3D


createInfo.components.r = VK_COMPONENT_SWIZZLE_IDENTITY;
createInfo.components.g = VK_COMPONENT_SWIZZLE_IDENTITY;
createInfo.components.b = VK_COMPONENT_SWIZZLE_IDENTITY;
createInfo.components.a = VK_COMPONENT_SWIZZLE_IDENTITY;


Component
采用默认值。

createInfo.subresourceRange.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT;
createInfo.subresourceRange.baseMipLevel = 0;
createInfo.subresourceRange.levelCount = 1;
createInfo.subresourceRange.baseArrayLayer = 0;
createInfo.subresourceRange.layerCount = 1;


subresourceRange
描述image的使用目的和要被访问的部分。我们的image 将被用作color targets ,不使用
mipmapping
multiplayers
。如果你要创建3D应用就是用
mutiplayers
,可以为一个image创建多个
imageView
表示左眼和右眼的不同访问层次。

现在我们创建
VkImageView


if (vkCreateImageView(device, &createInfo, nullptr,&swapChainImageViews[i]) != VK_SUCCESS) {
throw std::runtime_error("failed to create image views!");
}


整体代码如下:

void createImageViews() {
swapChainImageViews.resize(swapChainImages.size(),VDeleter<VkImageVie w> {device, vkDestroyImageView});
for (uint32_t i = 0; i < swapChainImages.size(); i++) {
VkImageViewCreateInfo createInfo = {}; createInfo.sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO; createInfo.image = swapChainImages[i]; createInfo.viewType = VK_IMAGE_VIEW_TYPE_2D; createInfo.format = swapChainImageFormat;
createInfo.components.r = VK_COMPONENT_SWIZZLE_IDENTITY; createInfo.components.g = VK_COMPONENT_SWIZZLE_IDENTITY; createInfo.components.b = VK_COMPONENT_SWIZZLE_IDENTITY; createInfo.components.a = VK_COMPONENT_SWIZZLE_IDENTITY;createInfo.subresourceRange.aspectMask =
VK_IMAGE_ASPECT_COLOR_BIT;
createInfo.subresourceRange.baseMipLevel = 0;
createInfo.subresourceRange.levelCount = 1;
createInfo.subresourceRange.baseArrayLayer = 0;
createInfo.subresourceRange.layerCount = 1
if (vkCreateImageView(device, &createInfo, nullptr, &swapChainImageViews[i]) != VK_SUCCESS) {
throw std::runtime_error("failed to create image views!");
}
}
}


原文源码: source code

为什么csdn 传不了资源了???
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  vulkan imageView