{-# LANGUAGE OverloadedLists #-} module Render.Pass ( usePass , setViewportScissor , beginInfo ) where import RIO import RIO.Vector.Partial ((!)) import Vulkan.Core10 qualified as Vk import Vulkan.Zero (zero) import Engine.Vulkan.Types (HasRenderPass(..)) usePass :: (MonadIO io, HasRenderPass a) => a -> Word32 -> Vk.CommandBuffer -> io r -> io r usePass :: forall (io :: * -> *) a r. (MonadIO io, HasRenderPass a) => a -> Word32 -> CommandBuffer -> io r -> io r usePass a render Word32 imageIndex CommandBuffer cb = forall (a :: [*]) (io :: * -> *) r. (Extendss RenderPassBeginInfo a, PokeChain a, MonadIO io) => CommandBuffer -> RenderPassBeginInfo a -> SubpassContents -> io r -> io r Vk.cmdUseRenderPass CommandBuffer cb (forall a. HasRenderPass a => a -> Word32 -> RenderPassBeginInfo '[] beginInfo a render Word32 imageIndex) SubpassContents Vk.SUBPASS_CONTENTS_INLINE beginInfo :: HasRenderPass a => a -> Word32 -> Vk.RenderPassBeginInfo '[] beginInfo :: forall a. HasRenderPass a => a -> Word32 -> RenderPassBeginInfo '[] beginInfo a rp Word32 imageIndex = forall a. Zero a => a zero { $sel:renderPass:RenderPassBeginInfo :: RenderPass Vk.renderPass = forall a. HasRenderPass a => a -> RenderPass getRenderPass a rp , $sel:framebuffer:RenderPassBeginInfo :: Framebuffer Vk.framebuffer = forall a. HasRenderPass a => a -> Vector Framebuffer getFramebuffers a rp forall (v :: * -> *) a. Vector v a => v a -> Int -> a ! forall a b. (Integral a, Num b) => a -> b fromIntegral Word32 imageIndex , $sel:renderArea:RenderPassBeginInfo :: Rect2D Vk.renderArea = forall a. HasRenderPass a => a -> Rect2D getRenderArea a rp , $sel:clearValues:RenderPassBeginInfo :: Vector ClearValue Vk.clearValues = forall a. HasRenderPass a => a -> Vector ClearValue getClearValues a rp } setViewportScissor :: ( HasRenderPass rp , MonadIO io ) => Vk.CommandBuffer -> Vk.Extent2D -> rp -> io () setViewportScissor :: forall rp (io :: * -> *). (HasRenderPass rp, MonadIO io) => CommandBuffer -> Extent2D -> rp -> io () setViewportScissor CommandBuffer cb Vk.Extent2D{Word32 $sel:width:Extent2D :: Extent2D -> Word32 width :: Word32 width, Word32 $sel:height:Extent2D :: Extent2D -> Word32 height :: Word32 height} rp rp = do forall (io :: * -> *). MonadIO io => CommandBuffer -> Word32 -> ("viewports" ::: Vector Viewport) -> io () Vk.cmdSetViewport CommandBuffer cb Word32 0 [ Vk.Viewport { $sel:x:Viewport :: Float x = Float 0 , $sel:y:Viewport :: Float y = Float 0 , $sel:width:Viewport :: Float width = forall a b. (Real a, Fractional b) => a -> b realToFrac Word32 width , $sel:height:Viewport :: Float height = forall a b. (Real a, Fractional b) => a -> b realToFrac Word32 height , $sel:minDepth:Viewport :: Float minDepth = Float 0 , $sel:maxDepth:Viewport :: Float maxDepth = Float 1 } ] forall (io :: * -> *). MonadIO io => CommandBuffer -> Word32 -> ("scissors" ::: Vector Rect2D) -> io () Vk.cmdSetScissor CommandBuffer cb Word32 0 [ forall a. HasRenderPass a => a -> Rect2D getRenderArea rp rp ]