-- | 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))