From d524a14da41379f35e783d4a8d9191cb0b03ce8a Mon Sep 17 00:00:00 2001 From: justin Date: Fri, 24 Mar 2023 11:52:40 +0000 Subject: [PATCH] Refactor preloading/rendering/update --- data/texture/charMapVertBig.png | Bin 12018 -> 12021 bytes shader/texture/bloomBlur.frag | 5 ++-- src/Dodge/Config/Update.hs | 6 +---- src/Dodge/Event.hs | 11 ++++---- src/Dodge/Menu.hs | 8 +++--- src/Dodge/PreloadData.hs | 23 ---------------- src/Dodge/Render.hs | 1 - src/Preload/Update.hs | 46 +++++++++++++------------------- 8 files changed, 32 insertions(+), 68 deletions(-) delete mode 100644 src/Dodge/PreloadData.hs diff --git a/data/texture/charMapVertBig.png b/data/texture/charMapVertBig.png index d43dcb22bcdb06de7898d23dd5bc8bac6cfc8335..4fb820394abd551f153391e4012fcfba534ed35a 100644 GIT binary patch delta 4786 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 A=>) where - x = fromIntegral x' - y = fromIntegral y' - V2 x' y' = windowSizeChangedEventSize sev - divRes = resFactorNum $ u ^. uvConfig . graphics_world_resolution + V2 x y = windowSizeChangedEventSize sev diff --git a/src/Dodge/Menu.hs b/src/Dodge/Menu.hs index 976d27836..b8408eb00 100644 --- a/src/Dodge/Menu.hs +++ b/src/Dodge/Menu.hs @@ -16,7 +16,7 @@ import Dodge.Data.Universe import Dodge.Menu.Option import Dodge.Menu.OptionType import Dodge.Menu.PushPop -import Dodge.PreloadData +import Preload.Update import Dodge.Save import Dodge.SoundLogic import Dodge.StartNewGame @@ -182,11 +182,11 @@ graphicsMenu = titleOptionsMenu "OPTIONS:GRAPHICS" graphicsMenuOptions graphicsMenuOptions :: [MenuOption] graphicsMenuOptions = - [ makeEnumOption graphics_world_resolution "World resolution" (uvIOEffects .~ updateFramebufferSize) + [ makeEnumOption graphics_world_resolution "World resolution" (uvIOEffects .~ updatePreload) , makeEnumOption graphics_downsize_resolution "Downsize resolution" - (uvIOEffects .~ updateFramebufferSize) + (uvIOEffects .~ updatePreload) , makeEnumOption graphics_overlay_resolution "Overlay resolution" - (uvIOEffects .~ updateFramebufferSize) + (uvIOEffects .~ updatePreload) , makeEnumOption graphics_object_shadows "SHADOW DETAIL" id , makeEnumOption graphics_distortions "ENABLE DISTORTIONS" id , makeEnumOption graphics_bloom "ENABLE BLOOM" id diff --git a/src/Dodge/PreloadData.hs b/src/Dodge/PreloadData.hs deleted file mode 100644 index 92cc51bb1..000000000 --- a/src/Dodge/PreloadData.hs +++ /dev/null @@ -1,23 +0,0 @@ -module Dodge.PreloadData where - -import Control.Lens -import Dodge.Data.Universe -import Preload.Update - -sideEffectUpdatePreload :: Int -> Int -> Int -> (Universe -> IO Universe) -> Universe -> IO Universe -sideEffectUpdatePreload divRes x y f u = do - -- GL.viewport $= (GL.Position 0 0, GL.Size (fromIntegral x) (fromIntegral y)) - pdata <- pdataResizeUpdate (u ^. uvConfig) (x `div` divRes) (y `div` divRes) x y (_preloadData u) - f $ u & preloadData .~ pdata - -updatePreload :: Int -> Int -> Int -> Universe -> IO Universe -updatePreload divRes x y u = do - pdata <- pdataResizeUpdate (u ^. uvConfig) (x `div` divRes) (y `div` divRes) x y (_preloadData u) - return $ u & preloadData .~ pdata - -updateFramebufferSize :: Universe -> IO Universe -updateFramebufferSize u = updatePreload divRes x y u - where - (x, y) = (round $ _windowX cfig, round $ _windowY cfig) - cfig = _uvConfig u - divRes = resFactorNum $ u ^. uvConfig . graphics_world_resolution diff --git a/src/Dodge/Render.hs b/src/Dodge/Render.hs index 57e381cc5..69a369431 100644 --- a/src/Dodge/Render.hs +++ b/src/Dodge/Render.hs @@ -51,7 +51,6 @@ doDrawing' win pdata u = do wins@(V2 winx winy) = V2 (_windowX cfig) (_windowY cfig) worldres = resFactorNum $ cfig ^. graphics_world_resolution downres = resFactorNum $ cfig ^. graphics_downsize_resolution - overlayres = resFactorNum $ cfig ^. graphics_overlay_resolution (windowPoints, wallSPics, wallsToPoke) = wallsToDraw w lightPoints = lightsToRender cfig (w ^. cWorld . camPos) (w ^. cWorld . lWorld) viewFroms@(V2 vfx vfy) = w ^. cWorld . camPos . camViewFrom diff --git a/src/Preload/Update.hs b/src/Preload/Update.hs index 307a78fab..b253e0f1a 100644 --- a/src/Preload/Update.hs +++ b/src/Preload/Update.hs @@ -1,52 +1,39 @@ {-# LANGUAGE OverloadedStrings #-} module Preload.Update ( + updatePreload, pdataResizeUpdate, ) where -import Dodge.Data.Config +import Dodge.Data.Universe import Control.Lens import qualified Data.ByteString as BS import qualified Data.ByteString.Char8 as BSC -import Data.Preload import Data.Preload.Render import Framebuffer.Update import Shader.Compile import Shader.Data -pdataResizeUpdate :: - Configuration -> - -- | Scaled width - Int -> - -- | Scaled height - Int -> - -- | Full width - Int -> - -- | Full height - Int -> - PreloadData -> - IO PreloadData -pdataResizeUpdate cfig xsize ysize xfull yfull pdata = do - rd <- renderDataResizeUpdate cfig xsize ysize xfull yfull (_renderData pdata) - return (pdata{_renderData = rd}) +updatePreload :: Universe -> IO Universe +updatePreload u = do + pdata <- pdataResizeUpdate (u ^. uvConfig) (u ^?! preloadData . renderData) + return $ u & preloadData . renderData .~ pdata + +pdataResizeUpdate :: Configuration -> RenderData -> IO RenderData +pdataResizeUpdate cfig pdata = do + rd <- renderDataResizeUpdate cfig pdata + return rd renderDataResizeUpdate :: Configuration -> - -- | Scaled width - Int -> - -- | Scaled height - Int -> - -- | Full width - Int -> - -- | Full height - Int -> RenderData -> IO RenderData -renderDataResizeUpdate cfig xsize ysize xfull yfull rdata = do +renderDataResizeUpdate cfig rdata = do rdata' <- sizeFBOs cfig rdata bbVert <- BS.readFile "shader/texture/bloomBlur.vert" bbFrag <- BS.readFile "shader/texture/bloomBlur.frag" - let (bh, bmid) = BS.breakSubstring "(" bbFrag + 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 --BSC.putStrLn bbFrag' @@ -57,3 +44,8 @@ renderDataResizeUpdate cfig xsize ysize xfull yfull rdata = do pmTriangleStrip (rdata ^. screenTextureVAO) return (rdata'{_bloomBlurShader = bbShad}) + +getWindowSize :: Integral a => (Configuration -> ResFactor) -> Configuration -> (a,a) +getWindowSize f cfig = (g _windowX,g _windowY) + where + g h = fromIntegral $ round (h cfig) `div` resFactorNum (f cfig)