Files
loop/src/Framebuffer/Setup.hs
T
2023-03-24 13:14:49 +00:00

73 lines
2.7 KiB
Haskell

-- | For initialising framebuffers.
module Framebuffer.Setup (
newTextureFramebuffer,
setupFramebufferGivenStencil,
setupFramebuffer2GivenStencil,
setupFramebuffer3GivenStencil,
setupShadowFramebuffer,
) where
import Shader.Data
import Framebuffer.Check
import GLHelp
import Graphics.GL.Core45
-- the framebuffer is not complete after this
newTextureFramebuffer :: IO (FBO, TO)
{-# INLINE newTextureFramebuffer #-}
newTextureFramebuffer = do
fboName <- mglCreate glCreateFramebuffers
to <- mglCreate (glCreateTextures GL_TEXTURE_2D)
return (FBO fboName, TO to)
-- the framebuffer is not complete after this
setupShadowFramebuffer :: IO (FBO, (TO, TO))
setupShadowFramebuffer = do
fboName <- mglCreate glCreateFramebuffers
to1 <- mglCreate (glCreateTextures GL_TEXTURE_2D_ARRAY)
to2 <- mglCreate (glCreateTextures GL_TEXTURE_2D_ARRAY)
return (FBO fboName, (TO to1,TO to2))
setupFramebufferGivenStencil ::
GLuint -> -- RenderbufferObject
IO (FBO, TO)
{-# INLINE setupFramebufferGivenStencil #-}
setupFramebufferGivenStencil rboName = do
--fboName <- genObjectName
--bindFramebuffer Framebuffer $= fboName
fboName <- mglCreate glCreateFramebuffers
--toName <- genObjectName
to1 <- mglCreate (glCreateTextures GL_TEXTURE_2D)
--framebufferRenderbuffer Framebuffer DepthStencilAttachment Renderbuffer rboName
glNamedFramebufferRenderbuffer fboName GL_DEPTH_STENCIL_ATTACHMENT GL_RENDERBUFFER rboName
checkFBO $ FBO fboName
return (FBO fboName, TO to1)
setupFramebuffer2GivenStencil ::
GLuint -> -- RenderbufferObject
IO (FBO, (TO, TO))
setupFramebuffer2GivenStencil rboName = do
--fboName <- genObjectName
--bindFramebuffer Framebuffer $= fboName
fboName <- mglCreate glCreateFramebuffers
-- toName <- genObjectName
-- toName2 <- genObjectName
to1 <- mglCreate (glCreateTextures GL_TEXTURE_2D)
to2 <- mglCreate (glCreateTextures GL_TEXTURE_2D)
--framebufferRenderbuffer Framebuffer DepthStencilAttachment Renderbuffer rboName
glNamedFramebufferRenderbuffer fboName GL_DEPTH_STENCIL_ATTACHMENT GL_RENDERBUFFER rboName
checkFBO $ FBO fboName
return (FBO fboName, (TO to1, TO to2))
setupFramebuffer3GivenStencil ::
GLuint -> -- RenderbufferObject
IO (FBO, (TO, TO, TO))
setupFramebuffer3GivenStencil rboName = do
fboName <- mglCreate glCreateFramebuffers
to1 <- mglCreate (glCreateTextures GL_TEXTURE_2D)
to2 <- mglCreate (glCreateTextures GL_TEXTURE_2D)
to3 <- mglCreate (glCreateTextures GL_TEXTURE_2D)
glNamedFramebufferRenderbuffer fboName GL_DEPTH_STENCIL_ATTACHMENT GL_RENDERBUFFER rboName
checkFBO $ FBO fboName
return (FBO fboName, (TO to1, TO to2, TO to3))