{-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE DuplicateRecordFields #-} {-# LANGUAGE DataKinds #-} module Framebuffers where import Linear import Control.Monad.Trans.Resource import qualified Data.Vector as V import Foreign.C.Types (CInt) import qualified Vulkan as Vk import qualified Vulkan.Zero as Vk createFramebuffer :: (MonadResource m) => Vk.Device -> Vk.RenderPass -> V.Vector Vk.ImageView -> V2 CInt -> m Vk.Framebuffer createFramebuffer logicalDevice renderPass swapchainImageViews (V2 swapchainWidth swapcheinHeight) = do let framebufferCreateInfo = Vk.zero { Vk.renderPass = renderPass , Vk.attachments = swapchainImageViews , Vk.width = fromIntegral swapchainWidth , Vk.height = fromIntegral swapcheinHeight , Vk.layers = 1 } snd <$> allocate (Vk.createFramebuffer logicalDevice framebufferCreateInfo Nothing) (\framebuffer -> do putStrLn "destroying framebuffer" Vk.destroyFramebuffer logicalDevice framebuffer Nothing )