From 1635ce0176a6e1637bca9c125d9a8e8baa09395d Mon Sep 17 00:00:00 2001 From: justin Date: Sun, 30 Nov 2025 11:47:14 +0000 Subject: [PATCH] Use downscaling to sixteenth res for bloom --- src/Data/Preload/Render.hs | 4 ++-- src/Dodge/Render.hs | 24 +++++++++++++++--------- src/Framebuffer/Update.hs | 19 ++++++++++++++++--- src/Preload/Render.hs | 8 ++++---- 4 files changed, 37 insertions(+), 18 deletions(-) diff --git a/src/Data/Preload/Render.hs b/src/Data/Preload/Render.hs index 4c83e3583..95e151305 100644 --- a/src/Data/Preload/Render.hs +++ b/src/Data/Preload/Render.hs @@ -29,8 +29,8 @@ data RenderData = RenderData , _silhouetteEBO :: UintBO , _pictureShaders :: MV.MVector (PrimState IO) (GLuint,VBO) , _fboFullscreen :: (FBO,TO) - , _fboHalf1 :: (FBO, TO) - , _fboHalf2 :: (FBO, TO) + , _fboHalf :: (FBO, TO) + , _fboQuarter :: (FBO, TO) , _fboBase :: (FBO, (TO, TO, TO)) , _fboCloud :: (FBO, (TO, TO, TO)) , _fboWindow :: (FBO, (TO, TO)) diff --git a/src/Dodge/Render.hs b/src/Dodge/Render.hs index a97e2beeb..57da65a6f 100644 --- a/src/Dodge/Render.hs +++ b/src/Dodge/Render.hs @@ -205,7 +205,7 @@ doDrawing' win pdata u = do --setup downscale viewport for blurring bloom setViewport _gr_downsize_res cfig - glBindFramebuffer GL_FRAMEBUFFER (_unFBO (fst (_fboHalf1 pdata))) + glBindFramebuffer GL_FRAMEBUFFER (_unFBO (fst (_fboHalf pdata))) glDepthFunc GL_ALWAYS glBindTextureUnit 0 (pdata ^. fboBloom . _2 . unTO) glGenerateTextureMipmap (pdata ^. fboBloom . _2 . unTO) @@ -221,13 +221,19 @@ doDrawing' win pdata u = do glUseProgram (_bloomBlurShader pdata) --glDrawArrays GL_TRIANGLES 0 6 glDrawArrays GL_TRIANGLES 0 3 - when (cfig ^. gr_bloom) $ do - replicateM_ 1 $ - pingPongBetween - (_fboHalf1 pdata) - (_fboHalf2 pdata) - (_bloomBlurShader pdata) - glEnable GL_BLEND + glBindFramebuffer GL_FRAMEBUFFER $ pdata ^. fboQuarter . _1 . unFBO + glGenerateTextureMipmap (pdata ^. fboHalf . _2 . unTO) + glBindTextureUnit 0 (pdata ^. fboHalf . _2 . unTO) + setViewport (const SixteenthRes) cfig + glDrawArrays GL_TRIANGLES 0 3 + glEnable GL_BLEND +-- when (cfig ^. gr_bloom) $ do +-- replicateM_ 1 $ +-- pingPongBetween +-- (_fboHalf1 pdata) +-- (_fboHalf2 pdata) +-- (_bloomBlurShader pdata) +-- glEnable GL_BLEND setViewport _gr_world_res cfig --draw clouds onto cloud buffer glBindFramebuffer GL_FRAMEBUFFER (pdata ^. fboCloud . _1 . unFBO) @@ -354,7 +360,7 @@ doDrawing' win pdata u = do glEnable GL_BLEND glBlendFunc GL_SRC_ALPHA GL_ONE --glBlendFunc GL_ONE GL_ONE - glBindTextureUnit 0 (_unTO . snd $ _fboHalf1 pdata) + glBindTextureUnit 0 (_unTO . snd $ _fboQuarter pdata) glUseProgram (pdata ^. fullscreenShader) --glDrawArrays GL_TRIANGLES 0 6 glDrawArrays GL_TRIANGLES 0 3 diff --git a/src/Framebuffer/Update.hs b/src/Framebuffer/Update.hs index 7fd67d926..05292e416 100644 --- a/src/Framebuffer/Update.hs +++ b/src/Framebuffer/Update.hs @@ -66,7 +66,6 @@ sizeFBOs cfig rdata = GL_LINEAR_MIPMAP_LINEAR GL_LINEAR GL_RGBA16F - -- [fboBloom] -- fboPos probably doesn't need the alpha channel ) >>= fboPos ( resizeFBOTO @@ -75,12 +74,26 @@ sizeFBOs cfig rdata = GL_NEAREST GL_RGBA16F -- possibly doesn't need the alpha channel... ) + >>= fboHalf + ( resizeFBOTO' + (getWindowSize (const EighthRes) cfig) + 5 + GL_LINEAR_MIPMAP_LINEAR + GL_LINEAR + GL_RGBA16F + ) +-- >>= foldUpdateFBOTO +-- _gr_downsize_res +-- GL_LINEAR_MIPMAP_LINEAR +-- GL_LINEAR +-- GL_RGBA16F +-- [fboHalf] >>= foldUpdateFBOTO - _gr_downsize_res + (const SixteenthRes) GL_LINEAR_MIPMAP_LINEAR GL_LINEAR GL_RGBA16F - [fboHalf1, fboHalf2] + [fboQuarter] >>= fboWindow ( resizeFBOTO2 (getWindowSize _gr_world_res cfig) diff --git a/src/Preload/Render.hs b/src/Preload/Render.hs index 5ef7b78bd..18093333a 100644 --- a/src/Preload/Render.hs +++ b/src/Preload/Render.hs @@ -179,8 +179,8 @@ preloadRender = do fboLightingName <- setupFramebufferGivenStencil rboBaseBloomName fbofullscreen <- newTextureFramebuffer - fboHalf1Name <- newTextureFramebuffer - fboHalf2Name <- newTextureFramebuffer + fbohalf <- newTextureFramebuffer + fboquarter <- newTextureFramebuffer -- reset to default framebuffer, ready for drawing direct to screen glBindFramebuffer GL_FRAMEBUFFER 0 @@ -208,8 +208,8 @@ preloadRender = do , _barrelShader = (barrelShad,distvbo) -- , _fbo2 = framebuf2 , _fboFullscreen = fbofullscreen - , _fboHalf1 = fboHalf1Name - , _fboHalf2 = fboHalf2Name + , _fboHalf = fbohalf + , _fboQuarter = fboquarter , _fboLighting = fboLightingName , _fboBase = fboBaseName , _fboWindow = fbowindow