バルカン。開発者ガイド。画像ビュー

他に私に精通していない人は、私はイジェフスクの会社CGTribeの技術翻訳者であり、Vulkan API(vulkan-tutorial.com)のマニュアルを翻訳しています



この出版物は、三角形の描画セクション、プレゼンテーションサブセクションからの画像ビューの章の翻訳を提供します。



コンテンツ
1.



2.



3.



4.







  1. (pipeline)


5.



  1. Staging


6. Uniform-



  1. layout
  2. sets


7.



  1. Image view image sampler
  2. image sampler


8.



9.



10. -



11. Multisampling



FAQ









画像ビュー



VkImageを使用するに は、グラフィックスパイプラインにVkImageViewオブジェクトを作成する必要があります 画像ビューは文字通り画像を調べることです。画像の解釈方法と、画像のどの部分が使用されるかについて説明します。



この章では、createImageViews



後でカラーターゲットとして使用するスワップチェーン内の各画像のベース画像ビューを作成する関数記述します



まず、画像ビューを保持するメンバーを追加します。



std::vector<VkImageView> swapChainImageViews;
      
      





関数createImageView



を作成し、スワップチェーンを作成した直後にそれを呼び出しましょう



void initVulkan() {
    createInstance();
    setupDebugMessenger();
    createSurface();
    pickPhysicalDevice();
    createLogicalDevice();
    createSwapChain();
    createImageViews();
}

void createImageViews() {

}
      
      





最初に行うことは、すべての画像ビューを含むためにコンテナ内に必要なスペースを割り当てることです。



void createImageViews() {
    swapChainImageViews.resize(swapChainImages.size());

}
      
      





次に、スワップチェーンからすべての画像をトラバースするループを作成しましょう。



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

}
      
      





画像ビューを作成するためのパラメーターは、VkImageViewCreateInfo構造体に渡され ます。最初のいくつかのパラメーターは単純です。



VkImageViewCreateInfo createInfo{};
createInfo.sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO;
createInfo.image = swapChainImages[i];
      
      





viewType



および フィールド format



は、画像データの解釈方法を示します。このパラメータを viewType



使用すると、画像を1D、2D、3Dテクスチャまたはキューブマップとして使用できます。



createInfo.viewType = VK_IMAGE_VIEW_TYPE_2D;
createInfo.format = swapChainImageFormat;
      
      





このフィールドで components



は、カラーチャンネルを切り替えることができます。たとえば、r



コンポーネントからのみすべてのカラーチャネルを読み取ることができる ため、モノクロ画像を取得できます。または、たとえば、アルファチャネルの定数として1



または 0



割り当て ます。ここでは、デフォルト設定を使用します。



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;
      
      





このフィールド subresourceRange



は、画像のどの部分が使用されるかを示します。私たちの画像は、詳細レベルのない1つのレイヤーのみで構成されており、カラーバッファーとして使用されます。



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





ステレオイメージを使用している場合は、複数のレイヤーを持つスワップチェーンを作成する必要があります。次に、画像ごとに、目ごとに別々の画像を使用して複数の画像ビューを作成します。



画像ビューを作成するには、vkCreateImageView関数を呼び出す必要があります



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





オブジェクトとは異なり VkImage



、画像ビューは私たちが作成したものなので、プログラムを終了する前にそれらを破棄するための同様のサイクルを説明する必要があります。



void cleanup() {
    for (auto imageView : swapChainImageViews) {
        vkDestroyImageView(device, imageView, nullptr);
    }

    ...
}
      
      





画像をテクスチャとして使用するには画像ビューで十分ですが、画像をレンダリングターゲットとして使用するには、フレームバッファを作成する必要があります。しかし、最初に、グラフィックスパイプラインを設定しましょう。



C ++



All Articles