Add framebuffers with shared renderbufferobject
This commit is contained in:
@@ -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
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user