Move FBOs to opengl raw
This commit is contained in:
+46
-39
@@ -1,74 +1,81 @@
|
||||
{- | For initialising framebuffers.
|
||||
-}
|
||||
module Framebuffer.Setup
|
||||
( setupTextureFramebuffer
|
||||
, setupFramebufferGivenStencil
|
||||
, setupFramebuffer2GivenStencil
|
||||
, setupShadowFramebuffer
|
||||
) where
|
||||
import Graphics.Rendering.OpenGL hiding (Point,translate,scale,imageHeight)
|
||||
import Graphics.GL.Core43
|
||||
-- | For initialising framebuffers.
|
||||
module Framebuffer.Setup (
|
||||
setupTextureFramebuffer,
|
||||
setupFramebufferGivenStencil,
|
||||
setupFramebuffer2GivenStencil,
|
||||
setupShadowFramebuffer,
|
||||
) where
|
||||
|
||||
setupTextureFramebuffer
|
||||
:: GLsizei
|
||||
-> GLsizei
|
||||
-> IO (FramebufferObject, TextureObject)
|
||||
import Data.Preload.Render
|
||||
import GLHelp
|
||||
import Graphics.GL.Core45
|
||||
import Graphics.Rendering.OpenGL hiding (Point, imageHeight, scale, translate)
|
||||
|
||||
setupTextureFramebuffer ::
|
||||
GLsizei ->
|
||||
GLsizei ->
|
||||
IO (FBO, TextureObject)
|
||||
{-# INLINE setupTextureFramebuffer #-}
|
||||
setupTextureFramebuffer x y = do
|
||||
fboName <- genObjectName
|
||||
bindFramebuffer Framebuffer $= fboName
|
||||
|
||||
--fboName <- genObjectName
|
||||
--bindFramebuffer Framebuffer $= fboName
|
||||
fboName <- mglCreateSingle glCreateFramebuffers
|
||||
fboTO <- genObjectName
|
||||
textureBinding Texture2D $= Just fboTO
|
||||
glTexStorage2D GL_TEXTURE_2D 1 GL_RGBA8 x y
|
||||
textureFilter Texture2D $= minMagFilter
|
||||
framebufferTexture2D Framebuffer (ColorAttachment 0) Texture2D fboTO 0
|
||||
--framebufferTexture2D Framebuffer (ColorAttachment 0) Texture2D fboTO 0
|
||||
glNamedFramebufferTexture fboName GL_COLOR_ATTACHMENT0 (unTexture fboTO) 0
|
||||
fboStatus <- framebufferStatus Framebuffer
|
||||
case fboStatus of
|
||||
Complete -> return ()
|
||||
_ -> putStrLn $ "Texture framebuffer status: " ++ show fboStatus
|
||||
return (fboName, fboTO)
|
||||
return (FBO fboName, fboTO)
|
||||
|
||||
setupShadowFramebuffer :: IO (FramebufferObject,(TextureObject,TextureObject))
|
||||
setupShadowFramebuffer :: IO (FBO, (TextureObject, TextureObject))
|
||||
setupShadowFramebuffer = do
|
||||
fboName <- genObjectName
|
||||
bindFramebuffer Framebuffer $= fboName
|
||||
--fboName <- genObjectName
|
||||
--bindFramebuffer Framebuffer $= fboName
|
||||
fboName <- mglCreateSingle glCreateFramebuffers
|
||||
toName <- genObjectName
|
||||
toName2 <- genObjectName
|
||||
--textureBinding Texture2DArray $= Just toName
|
||||
--framebufferRenderbuffer Framebuffer DepthStencilAttachment Renderbuffer rboName
|
||||
return (fboName,(toName,toName2))
|
||||
return (FBO fboName, (toName, toName2))
|
||||
|
||||
setupFramebufferGivenStencil
|
||||
:: GLuint -- RenderbufferObject
|
||||
-> IO (FramebufferObject, TextureObject)
|
||||
setupFramebufferGivenStencil ::
|
||||
GLuint -> -- RenderbufferObject
|
||||
IO (FBO, TextureObject)
|
||||
{-# INLINE setupFramebufferGivenStencil #-}
|
||||
setupFramebufferGivenStencil rboName = do
|
||||
fboName <- genObjectName
|
||||
bindFramebuffer Framebuffer $= fboName
|
||||
--fboName <- genObjectName
|
||||
--bindFramebuffer Framebuffer $= fboName
|
||||
fboName <- mglCreateSingle glCreateFramebuffers
|
||||
toName <- genObjectName
|
||||
--framebufferRenderbuffer Framebuffer DepthStencilAttachment Renderbuffer rboName
|
||||
glFramebufferRenderbuffer GL_FRAMEBUFFER GL_DEPTH_STENCIL_ATTACHMENT GL_RENDERBUFFER rboName
|
||||
glNamedFramebufferRenderbuffer fboName GL_DEPTH_STENCIL_ATTACHMENT GL_RENDERBUFFER rboName
|
||||
fboStatus <- framebufferStatus Framebuffer
|
||||
case fboStatus of
|
||||
Complete -> return ()
|
||||
_ -> putStrLn $ "Framebuffer with given stencil status: " ++ show fboStatus
|
||||
return (fboName,toName)
|
||||
setupFramebuffer2GivenStencil
|
||||
:: GLuint -- RenderbufferObject
|
||||
-> IO (FramebufferObject, (TextureObject,TextureObject))
|
||||
return (FBO fboName, toName)
|
||||
|
||||
setupFramebuffer2GivenStencil ::
|
||||
GLuint -> -- RenderbufferObject
|
||||
IO (FBO, (TextureObject, TextureObject))
|
||||
setupFramebuffer2GivenStencil rboName = do
|
||||
fboName <- genObjectName
|
||||
bindFramebuffer Framebuffer $= fboName
|
||||
--fboName <- genObjectName
|
||||
--bindFramebuffer Framebuffer $= fboName
|
||||
fboName <- mglCreateSingle glCreateFramebuffers
|
||||
toName <- genObjectName
|
||||
toName2 <- genObjectName
|
||||
--framebufferRenderbuffer Framebuffer DepthStencilAttachment Renderbuffer rboName
|
||||
glFramebufferRenderbuffer GL_FRAMEBUFFER GL_DEPTH_STENCIL_ATTACHMENT GL_RENDERBUFFER rboName
|
||||
glNamedFramebufferRenderbuffer fboName GL_DEPTH_STENCIL_ATTACHMENT GL_RENDERBUFFER rboName
|
||||
fboStatus <- framebufferStatus Framebuffer
|
||||
case fboStatus of
|
||||
Complete -> return ()
|
||||
_ -> putStrLn $ "Framebuffer with given stencil and two texture objects status: " ++ show fboStatus
|
||||
return (fboName,(toName,toName2))
|
||||
return (FBO fboName, (toName, toName2))
|
||||
|
||||
minMagFilter :: ((TextureFilter, Maybe TextureFilter),TextureFilter)
|
||||
minMagFilter = ((Nearest,Nothing),Nearest)
|
||||
minMagFilter :: ((TextureFilter, Maybe TextureFilter), TextureFilter)
|
||||
minMagFilter = ((Nearest, Nothing), Nearest)
|
||||
|
||||
Reference in New Issue
Block a user