初めてのVulkanプログラミング step4 イメージビュー
ソースコードは以下の場所に置いておきます。各自のバージョンに合わせたプロパティ設定をしてから自由にご利用ください。
はじめに
Imageオブジェクトは、プログラムが直接読み書きできません。その代わりに、ImageViewを使います。
VkImageの取得
Vkimageは、ウィンドウをに直接表示する画像です
スワップチェーンからイメージを取得するには、vkGetSwapchainImagesKHRを使う必要があります。
void Window::_InitSwapchainImages()
{
std::vector<VkImage> _swapchain_Image;
std::vector<VkImageView> _swapchain_image_view;
vkGetSwapchainImagesKHR(device, _swapchain, &_swapchain_image_count, nullptr);
_swapchain_Image.resize(_swapchain_image_count);
_swapchain_image_view.resize(_swapchain_image_count);
vkGetSwapchainImagesKHR(device, _swapchain, &_swapchain_image_count, _swapchain_Image.data());
VKImageViewの作成
VkImageをレンダーパスで使えるようにするには、VKImageViewを作成する必要があります。
イメージを1Dテクスチャー、2Dテクスチャーで扱うといったように、VKImageViewは、どのようにイメージにアクセスするか指定します。
for (int i = 0; i < _swapchain_image_count; i++) {
VkImageViewCreateInfo image_view_create_info{};
image_view_create_info.sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO;
image_view_create_info.pNext = nullptr;
image_view_create_info.flags = 0;
image_view_create_info.image = _swapchain_Image[i];
viewtype、formatで画像の取り扱い方法を指定します。
componentsを指定することで、任意の色だけ取り出すことができます。
今回は任意の色だけ取り出すことを考えていないので、componentsの値はデフォルトにします。
image_view_create_info.viewType = VK_IMAGE_VIEW_TYPE_2D;
image_view_create_info.format = VK_FORMAT_B8G8R8A8_UNORM;
image_view_create_info.components.r = VK_COMPONENT_SWIZZLE_IDENTITY;
image_view_create_info.components.g = VK_COMPONENT_SWIZZLE_IDENTITY;
image_view_create_info.components.b = VK_COMPONENT_SWIZZLE_IDENTITY;
image_view_create_info.components.a = VK_COMPONENT_SWIZZLE_IDENTITY;
subresourceRangeは、画像の目的が何で、画像のどの部分にアクセスするべきか示しています
aspectMask...Imageから取得するデータを明示します。
image_view_create_info.subresourceRange.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT;
image_view_create_info.subresourceRange.baseMipLevel = 0;
image_view_create_info.subresourceRange.levelCount = 1;
image_view_create_info.subresourceRange.baseArrayLayer = 0;
image_view_create_info.subresourceRange.layerCount = 1;
imageViewCreateInfo完成したのでvkCreateImageView関数を呼び出します。
vkCreateImageView(_renderer->GetVulkanDevice(), &image_view_create_info, nullptr, &_swapchain_image_view[i]);
}
}
イメージビューの除去
イメージビュー、明示的に作成されたものであるため、プログラムが終了時に破棄する必要があります
void Window::_DeInitSwapchainImages()
{
for (auto view : _swapchain_image_view) {
vkDestroyImageView(_renderer->GetVulkanDevice(),view,nullptr);
}
}
終わりに
次回からは、グラフィクスパイプラインといった、まったく新しい概念に触れていきます。
連絡先
tweeter: tositada_nakada
mail: [email protected]
寄付
paypal: tositada_nakada
Amazon:欲しいものリスト
Author And Source
この問題について(初めてのVulkanプログラミング step4 イメージビュー), 我々は、より多くの情報をここで見つけました https://qiita.com/tositada_nakada/items/f46b638b1b21e75c4d45著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .