From 4d09927d42ecd5b3a873c675147fa433c262d4da Mon Sep 17 00:00:00 2001 From: justin Date: Fri, 24 Mar 2023 13:14:49 +0000 Subject: [PATCH] Refactor framebuffer update --- appDodge/Main.hs | 38 +++++++++++++++----------------- data/texture/charMapVertBig.png | Bin 12096 -> 12110 bytes src/Data/Preload/Render.hs | 1 + src/Dodge/Config/Update.hs | 7 ------ src/Dodge/Render.hs | 25 +++++++++------------ src/Framebuffer/Setup.hs | 30 +++++-------------------- src/Framebuffer/Update.hs | 13 ++++++----- src/Preload/Render.hs | 13 ++++++----- src/Preload/Update.hs | 15 +++++++------ 9 files changed, 59 insertions(+), 83 deletions(-) diff --git a/appDodge/Main.hs b/appDodge/Main.hs index d63743d65..8298f0b51 100644 --- a/appDodge/Main.hs +++ b/appDodge/Main.hs @@ -27,9 +27,10 @@ import Music import Preload import Preload.Render --import Render + +import SDL (($=)) import qualified SDL import qualified SDL.Mixer as Mix -import SDL (($=)) import Sound import System.Directory @@ -77,27 +78,25 @@ firstWorldLoad :: Configuration -> IO Universe firstWorldLoad theConfig = do SDL.cursorVisible $= False pdata <- doPreload >>= applyWorldConfig theConfig - --return $ startNewGame $ Universe cancontinue <- doesFileExist "saveSlot/0" mseed <- loadSeed - let u = Universe - { --{_uvWorld = initialWorld - _uvWorld = splashScreen - , _uvConfig = theConfig - , _preloadData = pdata - , _uvScreenLayers = [] - , _uvIOEffects = return - , _uvTestString = testStringInit - , _uvSideEffects = mempty - , _uvCanContinue = cancontinue - , _uvMSeed = mseed - , _uvLastFrameTicks = 0 - , _uvFrameTicks = 0 - } + let u = + Universe + { _uvWorld = splashScreen + , _uvConfig = theConfig + , _preloadData = pdata + , _uvScreenLayers = [] + , _uvIOEffects = return + , _uvTestString = testStringInit + , _uvSideEffects = mempty + , _uvCanContinue = cancontinue + , _uvMSeed = mseed + , _uvLastFrameTicks = 0 + , _uvFrameTicks = 0 + } return $ Universe - { --{_uvWorld = initialWorld - _uvWorld = splashScreen + { _uvWorld = splashScreen , _uvConfig = theConfig , _preloadData = pdata , _uvScreenLayers = [splashMenu u] @@ -115,8 +114,7 @@ theUpdateStep win = doSideEffects <=< updateRenderSplit win updateRenderSplit :: SDL.Window -> Universe -> IO Universe updateRenderSplit win u = do - let preData = _preloadData u - updateUniverse u `par` void (doDrawing win (_renderData preData) u) + updateUniverse u `par` void (doDrawing win u) return $! updateUniverse u playSoundUnlessRewinding :: Universe -> IO (M.Map SoundOrigin Sound) diff --git a/data/texture/charMapVertBig.png b/data/texture/charMapVertBig.png index 948001ed1520d96dc8563c26626fdeab9eb7c7f1..c1f0cf27a0b704a32637eba54b676a28756e8019 100644 GIT binary patch literal 12110 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 literal 12096 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 $)qoCg|4Js0hWK5z;M7t_&*L< z+8S`8fMwY$Go!O$611FK!TLW1<)Ek*?T5@sWK!|me{}k43R&j(gy93Rdn6RHosoRA zze-nMixIn0h#p3p?t|MSI_N#pU#;pKjQUxa_y5E1fIhDodr#$#1h<~rwxw=fn;EoV z!^ulR5*2sVt@BMG;oaAe;G^mSWf9x)$KR%eyi3%TM&0PV#E3uLxx7@~t*8DuW0hx@ za;HT64lGN#u`5-<+6hrzMM1pdfn9?lk`&Co^8LRm5dhFv>b-!Q=IRv}hAz>QS9@<) zFO&{HVkQvuweAldbUh)3jGe#!Zf|X(U8LG1oMLIjmv6v%2IH{d_*B_6a$C@Dfjntn z6BAp8Hdvjg8!5r-KS~71scv5Ag?P>w=sM@?RBagW_436jfCY&R3VoHzW)MlF1&?z2 z&%gut;8~}ps02N;O$ct#O*KBM#PSnSl$y=&HJYEr!^!Q6(f8>{r1TgUF8qhovfih& z{#()w#8;vdhWT7EpccqgwQpEzh@LtJmTvLXY+k@eH*he5QUC$!AnoxfuR=PYW6h}2)hiFQ_mIM3+NBZ`a!h!2VNjJH1Bf$%(MEk2 z0^_V!h%8%X@RRwW`Z*2Qb4*ZcO)@PK1$+#i`RH6j)<;Exd0ONK69HY}(48&hB{$E7 z_;9KDZ^&4Ai_R|Cv66@*f&A-4)5maVly!iX*q2)G)QN)2%WBiyF=cxXG<=OGdx5B{ z=`G(46CNS>7gPF5&S>}>7{ajG{RhJbK0@tRV7&XVcu3o&Q4|;2!_II(Kgm~ zu^yB7%wF)ck`6ZqG`RJ|GIzgv61#u%m+a6MZz)AULsg$!z_bZzboIER1G|PfUQFc% zLG7DF3dDdG7<=tRM-Ss-FjeYFA_y@?Q6d~@yOsb<=MC#eLE!ZVagoPEA zEclaLD(B)uKJfh3fMMXcmNlW36a8NxXNkoI)xVqeDI8zG`N{H+h{A8*ORR|0DU0`r zlUNFUIck>&WJV?iaqbpM7xW8SdAk-!7FpQ6 zyT?t4+t84@tnO0_l8ZhjNtx@L!t9U@&1m%{3jVvhc68`Da1zOGcXGbpa9OvSy9-tl zMf~pQLUg9b#1b91+^h!R0}&=C*Iw z*71%ec8YPfM<|_BgfW}j_gQ|_a&m|6UMsTgyW;JX13h9H&RL+f#|G7TlxWdKEC<!yzs0Ta}RU`gaHv#EC?5v}CA^L4TPQqHIz4u4vmFUh{!C#x;FmO|Lcukff%G?hyl zRRWGyn0bX>2(x%yxTo?z#^{%@?XqB!D78CAJWByr&M^0)d{-NsUr(US>3?_pzLZX? zp5(D@%?MWWzL{*AOs};Hb0W``7wuzL1T- z{b%w?I4o#PQm{+f`g(>Jaf^8n*1TGBpXC9j&t#MVu{Yw^Vwkaj(lmAKapG=cTW^%4 zBvM}MHt{tz!t{Utpo{F{Fd^5o!8e6%AUJ3H-$)_O4+Q@O>( z@teocO~Lc+_nE1B&Y$I_fn~On?VL)nx17e`_J5btci{ARVmo|b|0^@zQLbt(-HN&z mKA$vhK2?2fCBTnp@e;syxJWOK1zfy3^-@Ynvhanm|NjADS2^|o diff --git a/src/Data/Preload/Render.hs b/src/Data/Preload/Render.hs index 755fd2c67..cc3199784 100644 --- a/src/Data/Preload/Render.hs +++ b/src/Data/Preload/Render.hs @@ -40,6 +40,7 @@ data RenderData = RenderData , _fboCloud :: (FBO, (TO, TO, TO)) , _fboBloom :: (FBO, TO) , _fboPos :: (FBO, TO) + , _fboOverlay :: (FBO, TO) , _fboLighting :: (FBO, TO) , _fboShadow :: (FBO, (TO, TO)) , _rboBaseBloom :: GLuint -- RenderbufferObject id diff --git a/src/Dodge/Config/Update.hs b/src/Dodge/Config/Update.hs index ba6a46732..0463b136b 100644 --- a/src/Dodge/Config/Update.hs +++ b/src/Dodge/Config/Update.hs @@ -3,7 +3,6 @@ IO actions that apply config side effects and save configuration settings to dis -} module Dodge.Config.Update ( saveConfig, - setVolThen, applyWorldConfig, setVol, ) where @@ -33,12 +32,6 @@ setVol cfig = do setSoundVolume (_volume_master cfig * _volume_sound cfig) setMusicVolume (_volume_master cfig * _volume_music cfig) --- what? -setVolThen :: Configuration -> (a -> IO a) -> a -> IO a -setVolThen cfig f a = do - setVol cfig - f a - {- | Apply /all/ of the values in the world configuration to the running game. -} diff --git a/src/Dodge/Render.hs b/src/Dodge/Render.hs index 4141f1fef..d79da3598 100644 --- a/src/Dodge/Render.hs +++ b/src/Dodge/Render.hs @@ -31,10 +31,12 @@ import Shader.Data import Shader.Poke import Shader.Poke.Cloud -doDrawing :: SDL.Window -> RenderData -> Universe -> IO () -doDrawing window rdata u +doDrawing :: SDL.Window -> Universe -> IO () +doDrawing window u | SDL.ScancodeT `M.member` (u ^. uvWorld . input . pressedKeys) = doTestDrawing rdata u | otherwise = doDrawing' window rdata u + where + rdata = u ^. preloadData . renderData doTestDrawing :: RenderData -> Universe -> IO () doTestDrawing _ _ = do @@ -49,9 +51,7 @@ doDrawing' win pdata u = do rot = w ^. cWorld . camPos . camRot camzoom = w ^. cWorld . camPos . camZoom trans = w ^. cWorld . camPos . camCenter - wins@(V2 winx winy) = V2 (_windowX cfig) (_windowY cfig) - worldres = resFactorNum $ cfig ^. graphics_world_resolution - downres = resFactorNum $ cfig ^. graphics_downsize_resolution + wins = V2 (_windowX cfig) (_windowY cfig) (windowPoints, wallSPics, wallsToPoke) = wallsToDraw w lightPoints = lightsToRender cfig (w ^. cWorld . camPos) (w ^. cWorld . lWorld) viewFroms@(V2 vfx vfy) = w ^. cWorld . camPos . camViewFrom @@ -107,7 +107,7 @@ doDrawing' win pdata u = do glBindBufferBase GL_UNIFORM_BUFFER 0 (pdata ^. matUBO) withArray (perspectiveMatrixb rot camzoom trans wins viewFroms) $ \ptr -> glNamedBufferSubData (pdata ^. matUBO) 0 64 ptr - setViewportSize (round winx `div` worldres) (round winy `div` worldres) + setViewport _graphics_world_resolution cfig glBindFramebuffer GL_FRAMEBUFFER (pdata ^. fboBase ._1 . unFBO) glDepthMask GL_TRUE glDisable GL_BLEND @@ -218,7 +218,7 @@ doDrawing' win pdata u = do renderLayer BloomLayer shadV layerCounts --setup downscale viewport for blurring bloom --setViewportSize (round winx `div` (2 * resFact)) (round winy `div` (2 * resFact)) - setViewportSize (round winx `div` downres) (round winy `div` downres) + setViewport _graphics_downsize_resolution cfig glBindFramebuffer GL_FRAMEBUFFER (_unFBO (fst (_fboHalf1 pdata))) glDepthFunc GL_ALWAYS glBindTextureUnit 0 (pdata ^. fboBloom . _2 . unTO) @@ -226,7 +226,7 @@ doDrawing' win pdata u = do drawShader (_bloomBlurShader pdata) 4 replicateM_ 2 $ pingPongBetween (_fboHalf1 pdata) (_fboHalf2 pdata) (_bloomBlurShader pdata) glEnable GL_BLEND - setViewportSize (round winx `div` worldres) (round winy `div` worldres) + setViewport _graphics_world_resolution cfig --draw clouds onto cloud buffer glBindFramebuffer GL_FRAMEBUFFER (_unFBO (fst (_fboCloud pdata))) glDepthFunc GL_LEQUAL @@ -335,7 +335,7 @@ doDrawing' win pdata u = do drawShader (_fullscreenShader pdata) 4 --set viewport for radial distortion --setViewportSize (round winx) (round winy) - setViewportType _graphics_overlay_resolution cfig + setViewport _graphics_overlay_resolution cfig glDepthFunc GL_ALWAYS glBlendFunc GL_ONE GL_ZERO -- perform any radial distortion @@ -372,8 +372,5 @@ getDistortions cfig w | cfig ^. graphics_distortions = w ^. cWorld . lWorld . distortions | otherwise = [] -setViewportSize :: Int -> Int -> IO () -setViewportSize x y = glViewport 0 0 (fromIntegral x) (fromIntegral y) - -setViewportType :: (Configuration -> ResFactor) -> Configuration -> IO () -setViewportType f = uncurry (glViewport 0 0) . getWindowSize f +setViewport :: (Configuration -> ResFactor) -> Configuration -> IO () +setViewport f = uncurry (glViewport 0 0) . getWindowSize f diff --git a/src/Framebuffer/Setup.hs b/src/Framebuffer/Setup.hs index 143882f21..182b64e31 100644 --- a/src/Framebuffer/Setup.hs +++ b/src/Framebuffer/Setup.hs @@ -1,6 +1,6 @@ -- | For initialising framebuffers. module Framebuffer.Setup ( - setupTextureFramebuffer, + newTextureFramebuffer, setupFramebufferGivenStencil, setupFramebuffer2GivenStencil, setupFramebuffer3GivenStencil, @@ -9,41 +9,23 @@ module Framebuffer.Setup ( import Shader.Data import Framebuffer.Check -import Unsafe.Coerce import GLHelp import Graphics.GL.Core45 -setupTextureFramebuffer :: - GLsizei -> - GLsizei -> - IO (FBO, TO) -{-# INLINE setupTextureFramebuffer #-} -setupTextureFramebuffer x y = do - --fboName <- genObjectName - --bindFramebuffer Framebuffer $= fboName +-- the framebuffer is not complete after this +newTextureFramebuffer :: IO (FBO, TO) +{-# INLINE newTextureFramebuffer #-} +newTextureFramebuffer = do fboName <- mglCreate glCreateFramebuffers - --fboTO <- genObjectName to <- mglCreate (glCreateTextures GL_TEXTURE_2D) - --textureBinding Texture2D $= Just fboTO - --glTexStorage2D GL_TEXTURE_2D 1 GL_RGBA8 x y - glTextureStorage2D to 1 GL_RGBA8 x y - glTextureParameteri to GL_TEXTURE_MIN_FILTER (unsafeCoerce GL_NEAREST) - glTextureParameteri to GL_TEXTURE_MAG_FILTER (unsafeCoerce GL_NEAREST) - --textureFilter Texture2D $= minMagFilter - --framebufferTexture2D Framebuffer (ColorAttachment 0) Texture2D fboTO 0 - glNamedFramebufferTexture fboName GL_COLOR_ATTACHMENT0 to 0 - checkFBO $ FBO fboName return (FBO fboName, TO to) +-- the framebuffer is not complete after this setupShadowFramebuffer :: IO (FBO, (TO, TO)) setupShadowFramebuffer = do - --fboName <- genObjectName - --bindFramebuffer Framebuffer $= fboName fboName <- mglCreate glCreateFramebuffers to1 <- mglCreate (glCreateTextures GL_TEXTURE_2D_ARRAY) to2 <- mglCreate (glCreateTextures GL_TEXTURE_2D_ARRAY) - --textureBinding Texture2DArray $= Just toName - --framebufferRenderbuffer Framebuffer DepthStencilAttachment Renderbuffer rboName return (FBO fboName, (TO to1,TO to2)) setupFramebufferGivenStencil :: diff --git a/src/Framebuffer/Update.hs b/src/Framebuffer/Update.hs index 8a0f3f180..69d174cf6 100644 --- a/src/Framebuffer/Update.hs +++ b/src/Framebuffer/Update.hs @@ -46,9 +46,7 @@ sizeFBOs cfig rdata = do (uncurry updateFBOTO (getWindowSize _graphics_downsize_resolution cfig) GL_LINEAR_MIPMAP_LINEAR GL_LINEAR GL_RGBA16F) rdata''' [fboHalf1, fboHalf2, fboHalf3] - newShadowFBO <- uncurry (resizeShadowFBO (rdata ^. fboShadow)) - (getWindowSize _graphics_world_resolution cfig) - return $ rdata4 & fboShadow .~ newShadowFBO + resizeShadowFBO' cfig rdata4 resizeRBO :: GLuint -> -- RenderbufferObject @@ -113,13 +111,16 @@ updateFBOTO3 xsize ysize minfilt magfilt inFormat1 inFormat2 inFormat3 pdata tar newfbo2 <- resizeFBOTO3 (pdata ^# target) xsize ysize minfilt magfilt inFormat1 inFormat2 inFormat3 return $ storing target newfbo2 pdata +resizeShadowFBO' :: Configuration -> RenderData -> IO RenderData +resizeShadowFBO' cfig = fboShadow (uncurry resizeShadowFBO (getWindowSize _graphics_world_resolution cfig)) + -- note we only really "change" the texture objects resizeShadowFBO :: + Int -> + Int -> (FBO, (TO, TO)) -> - Int -> - Int -> IO (FBO, (TO, TO)) -resizeShadowFBO (fbo, (oldto1, oldto2)) x y = do +resizeShadowFBO x y (fbo, (oldto1, oldto2)) = do glBindFramebuffer GL_FRAMEBUFFER (_unFBO fbo) mglDelete glDeleteTextures $ _unTO oldto1 mglDelete glDeleteTextures $ _unTO oldto2 diff --git a/src/Preload/Render.hs b/src/Preload/Render.hs index b921a8296..9f7397d34 100644 --- a/src/Preload/Render.hs +++ b/src/Preload/Render.hs @@ -115,8 +115,8 @@ preloadRender = do cloudvbo <- setupVBO (sum cloudverxsizes) (cloudshader, cloudebo) <- makeShaderEBO "cloud/basic" [vert, frag] cloudverxsizes pmTriangles cloudvbo - framebuf2 <- setupTextureFramebuffer 800 600 - framebuf3 <- setupTextureFramebuffer 800 600 + framebuf2 <- newTextureFramebuffer + framebuf3 <- newTextureFramebuffer rboBaseBloomName <- mglCreate glCreateRenderbuffers glNamedRenderbufferStorage @@ -133,9 +133,11 @@ preloadRender = do fboShadowName <- setupShadowFramebuffer - fboHalf1Name <- setupTextureFramebuffer 300 300 - fboHalf2Name <- setupTextureFramebuffer 300 300 - fboHalf3Name <- setupTextureFramebuffer 300 300 + fbooverlay <- newTextureFramebuffer + + fboHalf1Name <- newTextureFramebuffer + fboHalf2Name <- newTextureFramebuffer + fboHalf3Name <- newTextureFramebuffer -- reset to default framebuffer, ready for drawing direct to screen glBindFramebuffer GL_FRAMEBUFFER 0 @@ -183,6 +185,7 @@ preloadRender = do , _fboCloud = fboCloudName , _fboBloom = fboBloomName , _fboPos = fboPosName + , _fboOverlay = fbooverlay , _rboBaseBloom = rboBaseBloomName , _matUBO = theUBO , _orthonormalMatUBO = orthonormalUBO diff --git a/src/Preload/Update.hs b/src/Preload/Update.hs index 3c43709f1..53772beb1 100644 --- a/src/Preload/Update.hs +++ b/src/Preload/Update.hs @@ -5,12 +5,12 @@ module Preload.Update ( renderDataResizeUpdate, ) where -import Dodge.WindowSize -import Dodge.Data.Universe import Control.Lens import qualified Data.ByteString as BS import qualified Data.ByteString.Char8 as BSC import Data.Preload.Render +import Dodge.Data.Universe +import Dodge.WindowSize import Framebuffer.Update import Shader.Compile import Shader.Data @@ -18,9 +18,10 @@ import Shader.Data -- i don't like this being here pulling in the dodge universe dependency, but -- splitting it out would be overkill updatePreload :: Universe -> IO Universe -updatePreload u = do - pdata <- renderDataResizeUpdate (u ^. uvConfig) (u ^. preloadData . renderData) - return $ u & preloadData . renderData .~ pdata +updatePreload u = + (preloadData . renderData) + (renderDataResizeUpdate (u ^. uvConfig)) + u renderDataResizeUpdate :: Configuration -> @@ -30,7 +31,7 @@ renderDataResizeUpdate cfig rdata = do rdata' <- sizeFBOs cfig rdata bbVert <- BS.readFile "shader/texture/bloomBlur.vert" bbFrag <- BS.readFile "shader/texture/bloomBlur.frag" - let (xsize,ysize) = getWindowSize _graphics_downsize_resolution cfig :: (Int,Int) + let (xsize, ysize) = getWindowSize _graphics_downsize_resolution cfig :: (Int, Int) (bh, bmid) = BS.breakSubstring "(" bbFrag (_, btt) = BS.breakSubstring ")" bmid bbFrag' = BS.append bh $ BS.append (BSC.pack $ '(' : show xsize ++ "," ++ show ysize) btt @@ -40,4 +41,4 @@ renderDataResizeUpdate cfig rdata = do [(vert, bbVert), (frag, bbFrag')] pmTriangleStrip (rdata ^. screenTextureVAO) - return (rdata'{_bloomBlurShader = bbShad}) + return rdata'{_bloomBlurShader = bbShad}