vulkan-tutorial/src/Framebuffers.hs

45 lines
1.1 KiB
Haskell
Raw Normal View History

2022-07-13 01:41:33 +00:00
{-# 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)
2022-07-14 05:02:10 +00:00
=> Vk.Device
-> Vk.RenderPass
2022-07-13 01:41:33 +00:00
-> V.Vector Vk.ImageView
2022-12-28 03:18:54 +00:00
-> Vk.ImageView
2022-07-13 01:41:33 +00:00
-> V2 CInt
2022-07-16 14:36:51 +00:00
-> m (V.Vector Vk.Framebuffer)
2022-12-28 03:18:54 +00:00
createFramebuffer
logicalDevice
renderPass
swapchainImageViews
depthImageView
(V2 swapchainWidth swapchainHeight)
2022-07-13 01:41:33 +00:00
= do
let framebufferCreateInfo = Vk.zero
{ Vk.renderPass = renderPass
, Vk.width = fromIntegral swapchainWidth
2022-12-28 03:18:54 +00:00
, Vk.height = fromIntegral swapchainHeight
2022-07-13 01:41:33 +00:00
, Vk.layers = 1
}
2022-07-16 14:36:51 +00:00
V.mapM
(\imageView -> do
let createInfo = framebufferCreateInfo
2022-12-28 03:18:54 +00:00
{ Vk.attachments = V.fromList [ imageView, depthImageView ]
2022-07-16 14:36:51 +00:00
} :: Vk.FramebufferCreateInfo '[]
2023-04-29 00:10:27 +00:00
snd <$> Vk.withFramebuffer logicalDevice createInfo Nothing allocate
2022-07-13 01:41:33 +00:00
)
2022-07-16 14:36:51 +00:00
swapchainImageViews