49 lines
1.3 KiB
Haskell
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
|