vulkan-tutorial/src/Framebuffers.hs
2022-12-28 04:18:59 +01:00

49 lines
1.3 KiB
Haskell

{-# 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
-> Vk.ImageView
-> V2 CInt
-> m (V.Vector Vk.Framebuffer)
createFramebuffer
logicalDevice
renderPass
swapchainImageViews
depthImageView
(V2 swapchainWidth swapchainHeight)
= do
let framebufferCreateInfo = Vk.zero
{ Vk.renderPass = renderPass
, Vk.width = fromIntegral swapchainWidth
, Vk.height = fromIntegral swapchainHeight
, Vk.layers = 1
}
V.mapM
(\imageView -> do
let createInfo = framebufferCreateInfo
{ Vk.attachments = V.fromList [ imageView, depthImageView ]
} :: Vk.FramebufferCreateInfo '[]
snd <$> allocate
(Vk.createFramebuffer logicalDevice createInfo Nothing)
(\framebuffer -> do
putStrLn "destroying framebuffer"
Vk.destroyFramebuffer logicalDevice framebuffer Nothing
)
)
swapchainImageViews