Add framebuffers with shared renderbufferobject

This commit is contained in:
2021-07-04 14:41:46 +02:00
parent e3bd99868f
commit c627961aac
3 changed files with 63 additions and 11 deletions
+1
View File
@@ -24,6 +24,7 @@ data RenderData = RenderData
, _fboRenderbufferObject :: RenderbufferObject , _fboRenderbufferObject :: RenderbufferObject
, _fbo2 :: (FramebufferObject, TextureObject, RenderbufferObject) , _fbo2 :: (FramebufferObject, TextureObject, RenderbufferObject)
, _fbo3 :: (FramebufferObject, TextureObject, RenderbufferObject) , _fbo3 :: (FramebufferObject, TextureObject, RenderbufferObject)
, _fbos :: ( [(FramebufferObject, TextureObject) ] , RenderbufferObject )
, _matUBO :: BufferObject , _matUBO :: BufferObject
} }
makeLenses ''RenderData makeLenses ''RenderData
+30 -11
View File
@@ -14,6 +14,7 @@ import Data.Preload.Render
import Graphics.Rendering.OpenGL hiding (Point,translate,scale,imageHeight) import Graphics.Rendering.OpenGL hiding (Point,translate,scale,imageHeight)
--import Control.Lens --import Control.Lens
import Control.Monad
import Foreign import Foreign
preloadRender :: IO RenderData preloadRender :: IO RenderData
@@ -69,6 +70,9 @@ preloadRender = do
(fbo,fboTO,fboRBO) <- setupFramebufferWithStencil (fbo,fboTO,fboRBO) <- setupFramebufferWithStencil
framebuf2 <- setupFramebufferWithStencil framebuf2 <- setupFramebufferWithStencil
framebuf3 <- setupFramebufferWithStencil framebuf3 <- setupFramebufferWithStencil
frameBufs <- setupFramebuffersSharedStencil 6
-- reset to default framebuffer, ready for drawing direct to screen -- reset to default framebuffer, ready for drawing direct to screen
bindFramebuffer Framebuffer $= defaultFramebufferObject bindFramebuffer Framebuffer $= defaultFramebufferObject
@@ -94,6 +98,7 @@ preloadRender = do
, _fboRenderbufferObject = fboRBO , _fboRenderbufferObject = fboRBO
, _fbo2 = framebuf2 , _fbo2 = framebuf2
, _fbo3 = framebuf3 , _fbo3 = framebuf3
, _fbos = frameBufs
, _matUBO = theUBO , _matUBO = theUBO
} }
cornerList :: [[Float]] cornerList :: [[Float]]
@@ -127,17 +132,31 @@ setupFramebufferWithStencil = do
return (fboName, fboTO, fboRBO) return (fboName, fboTO, fboRBO)
setupFramebuffersSharedStencil :: IO setupFramebuffersSharedStencil :: Int -> IO ( [(FramebufferObject,TextureObject)] , RenderbufferObject)
( ( (FramebufferObject, TextureObject) setupFramebuffersSharedStencil n = do
, (FramebufferObject, TextureObject) rboName <- genObjectName
, (FramebufferObject, TextureObject) bindRenderbuffer Renderbuffer $= rboName
, (FramebufferObject, TextureObject) renderbufferStorage Renderbuffer Depth24Stencil8 (RenderbufferSize 800 600)
, (FramebufferObject, TextureObject) fbs <- replicateM n (newFramebufferGivenStencil rboName)
, (FramebufferObject, TextureObject) return (fbs,rboName)
)
, RenderbufferObject newFramebufferGivenStencil
) :: RenderbufferObject
setupFramebuffersSharedStencil = undefined -> IO (FramebufferObject, TextureObject)
newFramebufferGivenStencil rboName = do
fboName <- genObjectName
bindFramebuffer Framebuffer $= fboName
toName <- genObjectName
textureBinding Texture2D $= Just toName
texImage2D Texture2D NoProxy 0 RGBA8 (TextureSize2D 800 600) 0 (PixelData RGBA UnsignedByte nullPtr)
textureFilter Texture2D $= ((Linear',Just Linear') , Linear')
generateMipmap' Texture2D
framebufferTexture2D Framebuffer (ColorAttachment 0) Texture2D toName 0
framebufferRenderbuffer Framebuffer DepthStencilAttachment Renderbuffer rboName
fboStatus <- framebufferStatus Framebuffer
print fboStatus
return (fboName,toName)
setupFramebuffer :: IO (FramebufferObject, TextureObject) setupFramebuffer :: IO (FramebufferObject, TextureObject)
setupFramebuffer = do setupFramebuffer = do
+32
View File
@@ -38,6 +38,9 @@ resizeSpareFBO xsize ysize xfull yfull pdata = do
resizeTextureFBO (_fbo2 rdata) xfull yfull resizeTextureFBO (_fbo2 rdata) xfull yfull
resizeTextureFBO (_fbo3 rdata) xfull yfull resizeTextureFBO (_fbo3 rdata) xfull yfull
resizeRBO (snd $ _fbos rdata) xfull yfull
mapM_ (\p -> resizeFBOTO p xfull yfull) (fst $ _fbos rdata)
return pdata return pdata
@@ -62,3 +65,32 @@ resizeTextureFBO (fboName,fboTO,fboRBO) xsize ysize = do
fboStatus <- framebufferStatus Framebuffer fboStatus <- framebufferStatus Framebuffer
putStrLn $ "after resize, framebuffer status:" ++ show fboStatus putStrLn $ "after resize, framebuffer status:" ++ show fboStatus
resizeRBO
:: RenderbufferObject
-> Int
-> Int
-> IO ()
resizeRBO rboName xsize ysize = do
let xsize' = fromIntegral xsize
ysize' = fromIntegral ysize
bindRenderbuffer Renderbuffer $= rboName
renderbufferStorage Renderbuffer Depth24Stencil8 (RenderbufferSize xsize' ysize')
resizeFBOTO
:: (FramebufferObject , TextureObject)
-> Int
-> Int
-> IO ()
resizeFBOTO (fboName,fboTO) xsize ysize = do
let xsize' = fromIntegral xsize
ysize' = fromIntegral ysize
bindFramebuffer Framebuffer $= fboName
textureBinding Texture2D $= Just fboTO
texImage2D Texture2D NoProxy 0 RGBA8 (TextureSize2D xsize' ysize') 0 (PixelData RGBA UnsignedByte nullPtr)
textureFilter Texture2D $= ((Linear',Just Linear') , Nearest)
generateMipmap' Texture2D
framebufferTexture2D Framebuffer (ColorAttachment 0) Texture2D fboTO 0
fboStatus <- framebufferStatus Framebuffer
putStrLn $ "after resize, framebuffer status:" ++ show fboStatus