Add framebuffers with shared renderbufferobject
This commit is contained in:
@@ -24,6 +24,7 @@ data RenderData = RenderData
|
||||
, _fboRenderbufferObject :: RenderbufferObject
|
||||
, _fbo2 :: (FramebufferObject, TextureObject, RenderbufferObject)
|
||||
, _fbo3 :: (FramebufferObject, TextureObject, RenderbufferObject)
|
||||
, _fbos :: ( [(FramebufferObject, TextureObject) ] , RenderbufferObject )
|
||||
, _matUBO :: BufferObject
|
||||
}
|
||||
makeLenses ''RenderData
|
||||
|
||||
+30
-11
@@ -14,6 +14,7 @@ import Data.Preload.Render
|
||||
|
||||
import Graphics.Rendering.OpenGL hiding (Point,translate,scale,imageHeight)
|
||||
--import Control.Lens
|
||||
import Control.Monad
|
||||
import Foreign
|
||||
|
||||
preloadRender :: IO RenderData
|
||||
@@ -69,6 +70,9 @@ preloadRender = do
|
||||
(fbo,fboTO,fboRBO) <- setupFramebufferWithStencil
|
||||
framebuf2 <- setupFramebufferWithStencil
|
||||
framebuf3 <- setupFramebufferWithStencil
|
||||
|
||||
frameBufs <- setupFramebuffersSharedStencil 6
|
||||
|
||||
-- reset to default framebuffer, ready for drawing direct to screen
|
||||
bindFramebuffer Framebuffer $= defaultFramebufferObject
|
||||
|
||||
@@ -94,6 +98,7 @@ preloadRender = do
|
||||
, _fboRenderbufferObject = fboRBO
|
||||
, _fbo2 = framebuf2
|
||||
, _fbo3 = framebuf3
|
||||
, _fbos = frameBufs
|
||||
, _matUBO = theUBO
|
||||
}
|
||||
cornerList :: [[Float]]
|
||||
@@ -127,17 +132,31 @@ setupFramebufferWithStencil = do
|
||||
|
||||
return (fboName, fboTO, fboRBO)
|
||||
|
||||
setupFramebuffersSharedStencil :: IO
|
||||
( ( (FramebufferObject, TextureObject)
|
||||
, (FramebufferObject, TextureObject)
|
||||
, (FramebufferObject, TextureObject)
|
||||
, (FramebufferObject, TextureObject)
|
||||
, (FramebufferObject, TextureObject)
|
||||
, (FramebufferObject, TextureObject)
|
||||
)
|
||||
, RenderbufferObject
|
||||
)
|
||||
setupFramebuffersSharedStencil = undefined
|
||||
setupFramebuffersSharedStencil :: Int -> IO ( [(FramebufferObject,TextureObject)] , RenderbufferObject)
|
||||
setupFramebuffersSharedStencil n = do
|
||||
rboName <- genObjectName
|
||||
bindRenderbuffer Renderbuffer $= rboName
|
||||
renderbufferStorage Renderbuffer Depth24Stencil8 (RenderbufferSize 800 600)
|
||||
fbs <- replicateM n (newFramebufferGivenStencil rboName)
|
||||
return (fbs,rboName)
|
||||
|
||||
newFramebufferGivenStencil
|
||||
:: RenderbufferObject
|
||||
-> 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 = do
|
||||
|
||||
@@ -38,6 +38,9 @@ resizeSpareFBO xsize ysize xfull yfull pdata = do
|
||||
|
||||
resizeTextureFBO (_fbo2 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
|
||||
|
||||
@@ -62,3 +65,32 @@ resizeTextureFBO (fboName,fboTO,fboRBO) xsize ysize = do
|
||||
|
||||
fboStatus <- framebufferStatus Framebuffer
|
||||
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