この出版物は、三角形の描画セクション、プレゼンテーションサブセクションからの画像ビューの章の翻訳を提供します。
コンテンツ
1.
2.
3.
4.
5.
6. Uniform-
7.
8.
9.
10. -
11. Multisampling
FAQ
2.
3.
4.
-
-
- Window surface
- Swap chain
- Image views
- (pipeline)
5.
- Staging
6. Uniform-
- layout
- sets
7.
- Image view image sampler
- 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 ++