Note
|
Vulkan 1.2でコアに昇格 |
VkFramebuffer
を作成する場合、通常は VkFramebufferCreateInfo::pAttachments
に VkImageView
を渡す必要があります。
イメージレスな VkFramebuffer
を利用するには
-
VkPhysicalDeviceImagelessFramebufferFeatures::imagelessFramebuffer
またはVkPhysicalDeviceVulkan12Features::imagelessFramebuffer
をクエリして、実装がサポートしていることを確認します。 -
VkFramebufferCreateInfo::flags
にVK_FRAMEBUFFER_CREATE_IMAGELESS_BIT
を設定します。 -
VkFramebufferCreateInfo::pNext
にVkFramebufferAttachmentsCreateInfo
構造体を含めます。 -
レンダーパスの開始時に、
VkRenderPassAttachmentBeginInfo
構造体をVkRenderPassBeginInfo::pNext
に渡し、互換性のあるアタッチメントを指定します。
// アタッチメントに関する情報を埋める
VkFramebufferAttachmentImageInfo attachments_image_info = {};
// ...
VkFramebufferAttachmentsCreateInfo attachments_create_info = {};
// ...
attachments_create_info.attachmentImageInfoCount = 1;
attachments_create_info.pAttachmentImageInfos = &attachments_image_info;
// FrameBufferをイメージレスで作成する
VkFramebufferCreateInfo framebuffer_info = {};
framebuffer_info.pNext = &attachments_create_info;
framebuffer_info.flags |= VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT;
// ...
framebffer_info.pAttachments = NULL; // pAttachments はここでは無視される
vkCreateFramebuffer(device, &framebuffer_info, NULL, &framebuffer_object);
// ...
// コマンドバッファの記録開始
VkRenderPassAttachmentBeginInfo attachment_begin_info = {};
// attachment_begin_info.pAttachments に VkImageView オブジェクトが含まれる
VkRenderPassBeginInfo begin_info = {};
begin_info.pNext = &attachment_begin_info;
// ...
vkCmdBeginRenderPass(command_buffer, &begin_info, VK_SUBPASS_CONTENTS_INLINE);