Move towards attaching a position texture to base framebuffer

This commit is contained in:
2021-08-31 22:25:37 +01:00
parent cf77163b3f
commit 2d139adc8f
5 changed files with 69 additions and 11 deletions
+1 -1
View File
@@ -32,7 +32,7 @@ data RenderData = RenderData
, _fbo3 :: (FramebufferObject, TextureObject) , _fbo3 :: (FramebufferObject, TextureObject)
, _fboFourth1 :: (FramebufferObject, TextureObject) , _fboFourth1 :: (FramebufferObject, TextureObject)
, _fboFourth2 :: (FramebufferObject, TextureObject) , _fboFourth2 :: (FramebufferObject, TextureObject)
, _fboBase :: (FramebufferObject, TextureObject) , _fboBase :: (FramebufferObject, (TextureObject, TextureObject))
, _fboBloom :: (FramebufferObject, TextureObject) , _fboBloom :: (FramebufferObject, TextureObject)
, _fboColor :: (FramebufferObject, TextureObject) , _fboColor :: (FramebufferObject, TextureObject)
, _fboPos :: (FramebufferObject, TextureObject) , _fboPos :: (FramebufferObject, TextureObject)
+6 -4
View File
@@ -19,6 +19,7 @@ import Shader.Data
import MatrixHelper import MatrixHelper
--import Polyhedra.Data --import Polyhedra.Data
import Polyhedra import Polyhedra
import Tuple
import Foreign import Foreign
--import Control.Applicative --import Control.Applicative
@@ -59,8 +60,9 @@ doDrawing pdata w = do
-- poke foreground geometry and floor -- poke foreground geometry and floor
let addC (V2 xx yy) = V3 xx yy 0 let addC (V2 xx yy) = V3 xx yy 0
nsurfVs <- pokePoint3s (shadVBOptr $ _lightingSurfaceShader pdata) nsurfVs <- pokePoint3s (shadVBOptr $ _lightingSurfaceShader pdata)
$ youBox w $
++ concatMap polyToGeoRender (foregroundPics w) --youBox w ++
concatMap polyToGeoRender (foregroundPics w)
++ polyToTris (map addC $ screenPolygon w) ++ polyToTris (map addC $ screenPolygon w)
-- bind wall points, silhouette data, surface geometry -- bind wall points, silhouette data, surface geometry
uncurry bindShaderBuffers $ unzip uncurry bindShaderBuffers $ unzip
@@ -187,7 +189,7 @@ doDrawing pdata w = do
-- perform any radial distortion -- perform any radial distortion
case _radDistortion w of case _radDistortion w of
[] -> do [] -> do
bindTO $ snd $ _fboBase pdata bindTO $ fst $ snd $ _fboBase pdata
bindFramebuffer Framebuffer $= defaultFramebufferObject bindFramebuffer Framebuffer $= defaultFramebufferObject
--bufferUBO $ perspectiveMatrixb rot camzoom trans wins viewFroms --bufferUBO $ perspectiveMatrixb rot camzoom trans wins viewFroms
drawShader (_fullscreenShader pdata) 4 drawShader (_fullscreenShader pdata) 4
@@ -200,7 +202,7 @@ doDrawing pdata w = do
drawShader (_barrelShader pdata) 1 drawShader (_barrelShader pdata) 1
fboList = take (length rds - 1) (concat (repeat [fst $ _fbo2 pdata,fst $ _fbo3 pdata])) fboList = take (length rds - 1) (concat (repeat [fst $ _fbo2 pdata,fst $ _fbo3 pdata]))
++ [defaultFramebufferObject] ++ [defaultFramebufferObject]
toList = snd (_fboBase pdata) : concat (repeat [snd $ _fbo2 pdata,snd $ _fbo3 pdata]) toList = fst (snd (_fboBase pdata)) : concat (repeat [snd $ _fbo2 pdata,snd $ _fbo3 pdata])
bindings = zipWith (>>) (map bindFBO fboList) (map bindTO toList) bindings = zipWith (>>) (map bindFBO fboList) (map bindTO toList)
activeTexture $= TextureUnit 1 activeTexture $= TextureUnit 1
zipWithM_ (>>) bindings $ map bindDrawDist rds zipWithM_ (>>) bindings $ map bindDrawDist rds
+13
View File
@@ -3,6 +3,7 @@
module Framebuffer.Setup module Framebuffer.Setup
( setupTextureFramebuffer ( setupTextureFramebuffer
, setupFramebufferGivenStencil , setupFramebufferGivenStencil
, setupFramebuffer2GivenStencil
) where ) where
import Graphics.Rendering.OpenGL hiding (Point,translate,scale,imageHeight) import Graphics.Rendering.OpenGL hiding (Point,translate,scale,imageHeight)
import Graphics.GL.Core43 import Graphics.GL.Core43
@@ -37,6 +38,18 @@ setupFramebufferGivenStencil rboName = do
fboStatus <- framebufferStatus Framebuffer fboStatus <- framebufferStatus Framebuffer
print fboStatus print fboStatus
return (fboName,toName) return (fboName,toName)
setupFramebuffer2GivenStencil
:: RenderbufferObject
-> IO (FramebufferObject, (TextureObject,TextureObject))
setupFramebuffer2GivenStencil rboName = do
fboName <- genObjectName
bindFramebuffer Framebuffer $= fboName
toName <- genObjectName
toName2 <- genObjectName
framebufferRenderbuffer Framebuffer DepthStencilAttachment Renderbuffer rboName
fboStatus <- framebufferStatus Framebuffer
print fboStatus
return (fboName,(toName,toName2))
minMagFilter :: ((TextureFilter, Maybe TextureFilter),TextureFilter) minMagFilter :: ((TextureFilter, Maybe TextureFilter),TextureFilter)
minMagFilter = ((Nearest,Nothing),Nearest) minMagFilter = ((Nearest,Nothing),Nearest)
+45 -2
View File
@@ -23,8 +23,9 @@ sizeFBOs
-> IO RenderData -> IO RenderData
sizeFBOs xsize ysize xfull yfull rdata = do sizeFBOs xsize ysize xfull yfull rdata = do
resizeRBO (_rboBaseBloom rdata) xsize ysize resizeRBO (_rboBaseBloom rdata) xsize ysize
rdata' <- foldM (updateFBOTO xsize ysize minMagFilter GL_RGBA8) rdata rdata' <- updateFBOTO2 xsize ysize minMagFilter GL_RGBA8 GL_RGBA16F rdata fboBase
[fboBase, fboColor,fboLighting,fboLightingHigh] >>= flip (foldM (updateFBOTO xsize ysize minMagFilter GL_RGBA8))
[fboColor,fboLighting,fboLightingHigh]
rdata'' <- foldM (updateFBOTO xsize ysize linMinMagFilter GL_RGBA16F) rdata' rdata'' <- foldM (updateFBOTO xsize ysize linMinMagFilter GL_RGBA16F) rdata'
[fboBloom, fboPos] [fboBloom, fboPos]
rdata''' <- foldM (updateFBOTO xfull yfull minMagFilter GL_RGBA8) rdata'' rdata''' <- foldM (updateFBOTO xfull yfull minMagFilter GL_RGBA8) rdata''
@@ -55,6 +56,48 @@ updateFBOTO xsize ysize mmfilt inFormat pdata target = do
newfbo2 <- resizeFBOTO (pdata ^# target) xsize ysize mmfilt inFormat newfbo2 <- resizeFBOTO (pdata ^# target) xsize ysize mmfilt inFormat
return $ storing target newfbo2 pdata return $ storing target newfbo2 pdata
updateFBOTO2
:: Int
-> Int
-> ((TextureFilter, Maybe TextureFilter),TextureFilter)
-> GLenum -- ^ internal color format texture1
-> GLenum -- ^ internal color format texture2
-> RenderData
-> ALens' RenderData (FramebufferObject, (TextureObject,TextureObject))
-> IO RenderData
updateFBOTO2 xsize ysize mmfilt inFormat1 inFormat2 pdata target = do
newfbo2 <- resizeFBOTO2 (pdata ^# target) xsize ysize mmfilt inFormat1 inFormat2
return $ storing target newfbo2 pdata
resizeFBOTO2
:: (FramebufferObject , (TextureObject,TextureObject))
-> Int
-> Int
-> ((TextureFilter, Maybe TextureFilter),TextureFilter)
-> GLenum -- ^ internal color format1
-> GLenum -- ^ internal color format2
-> IO (FramebufferObject, (TextureObject,TextureObject))
resizeFBOTO2 (fboName,(toOld1,toOld2)) xsize ysize mmfilt inFormat1 inFormat2 = do
bindFramebuffer Framebuffer $= fboName
let xsize' = fromIntegral xsize
ysize' = fromIntegral ysize
deleteObjectName toOld1
deleteObjectName toOld2
toName1 <- genObjectName
textureBinding Texture2D $= Just toName1
glTexStorage2D GL_TEXTURE_2D 1 inFormat1 xsize' ysize'
textureFilter Texture2D $= mmfilt
framebufferTexture2D Framebuffer (ColorAttachment 0) Texture2D toName1 0
toName2 <- genObjectName
textureBinding Texture2D $= Just toName2
glTexStorage2D GL_TEXTURE_2D 1 inFormat2 xsize' ysize'
textureFilter Texture2D $= mmfilt
framebufferTexture2D Framebuffer (ColorAttachment 1) Texture2D toName2 0
fboStatus <- framebufferStatus Framebuffer
putStrLn $ "after resize, framebuffer status:" ++ show fboStatus
return (fboName, (toName1,toName2))
resizeFBOTO resizeFBOTO
:: (FramebufferObject , TextureObject) :: (FramebufferObject , TextureObject)
-> Int -> Int
+4 -4
View File
@@ -101,16 +101,16 @@ preloadRender = do
framebuf2 <- setupTextureFramebuffer 800 600 framebuf2 <- setupTextureFramebuffer 800 600
framebuf3 <- setupTextureFramebuffer 800 600 framebuf3 <- setupTextureFramebuffer 800 600
rboLightingName <- genObjectName --rboLightingName <- genObjectName
bindRenderbuffer Renderbuffer $= rboLightingName --bindRenderbuffer Renderbuffer $= rboLightingName
renderbufferStorage Renderbuffer Depth24Stencil8 (RenderbufferSize 800 600) --renderbufferStorage Renderbuffer Depth24Stencil8 (RenderbufferSize 800 600)
--fboLightingName <- setupFramebufferGivenStencil rboLightingName --fboLightingName <- setupFramebufferGivenStencil rboLightingName
rboBaseBloomName <- genObjectName rboBaseBloomName <- genObjectName
bindRenderbuffer Renderbuffer $= rboBaseBloomName bindRenderbuffer Renderbuffer $= rboBaseBloomName
renderbufferStorage Renderbuffer Depth24Stencil8 (RenderbufferSize 800 600) renderbufferStorage Renderbuffer Depth24Stencil8 (RenderbufferSize 800 600)
fboBaseName <- setupFramebufferGivenStencil rboBaseBloomName fboBaseName <- setupFramebuffer2GivenStencil rboBaseBloomName
fboBloomName <- setupFramebufferGivenStencil rboBaseBloomName fboBloomName <- setupFramebufferGivenStencil rboBaseBloomName
fboColorName <- setupFramebufferGivenStencil rboBaseBloomName fboColorName <- setupFramebufferGivenStencil rboBaseBloomName
fboPosName <- setupFramebufferGivenStencil rboBaseBloomName fboPosName <- setupFramebufferGivenStencil rboBaseBloomName