vulkan-utils-0.5.11.0: src/Vulkan/Utils/Framebuffer.hs
{-# LANGUAGE OverloadedLists #-}
{-| Tiny helpers for the boilerplate that each rendering example needs:
a framebuffer over a single image view, and a vanilla 2D color image view.
-}
module Vulkan.Utils.Framebuffer
( allocateFramebuffer
) where
import Control.Monad.Trans.Resource (MonadResource, ReleaseKey, allocate)
import Vulkan.Core10 as Extent2D (Extent2D (..))
import qualified Vulkan.Core10 as Vk
import Vulkan.Zero (zero)
-- | Create a framebuffer covering the whole image with a single attachment.
allocateFramebuffer
:: (MonadResource m)
=> Vk.Device
-> Vk.RenderPass
-> Vk.ImageView
-> Vk.Extent2D
-> m (ReleaseKey, Vk.Framebuffer)
allocateFramebuffer dev renderPass imageView Vk.Extent2D{width, height} =
Vk.withFramebuffer dev framebufferCreateInfo Nothing allocate
where
framebufferCreateInfo :: Vk.FramebufferCreateInfo '[]
framebufferCreateInfo =
zero
{ Vk.renderPass = renderPass
, Vk.attachments = [imageView]
, Vk.width = width
, Vk.height = height
, Vk.layers = 1
}