Use downscaling to sixteenth res for bloom

This commit is contained in:
2025-11-30 11:47:14 +00:00
parent 6ebf3f4ef7
commit 1635ce0176
4 changed files with 37 additions and 18 deletions
+2 -2
View File
@@ -29,8 +29,8 @@ data RenderData = RenderData
, _silhouetteEBO :: UintBO , _silhouetteEBO :: UintBO
, _pictureShaders :: MV.MVector (PrimState IO) (GLuint,VBO) , _pictureShaders :: MV.MVector (PrimState IO) (GLuint,VBO)
, _fboFullscreen :: (FBO,TO) , _fboFullscreen :: (FBO,TO)
, _fboHalf1 :: (FBO, TO) , _fboHalf :: (FBO, TO)
, _fboHalf2 :: (FBO, TO) , _fboQuarter :: (FBO, TO)
, _fboBase :: (FBO, (TO, TO, TO)) , _fboBase :: (FBO, (TO, TO, TO))
, _fboCloud :: (FBO, (TO, TO, TO)) , _fboCloud :: (FBO, (TO, TO, TO))
, _fboWindow :: (FBO, (TO, TO)) , _fboWindow :: (FBO, (TO, TO))
+14 -8
View File
@@ -205,7 +205,7 @@ doDrawing' win pdata u = do
--setup downscale viewport for blurring bloom --setup downscale viewport for blurring bloom
setViewport _gr_downsize_res cfig setViewport _gr_downsize_res cfig
glBindFramebuffer GL_FRAMEBUFFER (_unFBO (fst (_fboHalf1 pdata))) glBindFramebuffer GL_FRAMEBUFFER (_unFBO (fst (_fboHalf pdata)))
glDepthFunc GL_ALWAYS glDepthFunc GL_ALWAYS
glBindTextureUnit 0 (pdata ^. fboBloom . _2 . unTO) glBindTextureUnit 0 (pdata ^. fboBloom . _2 . unTO)
glGenerateTextureMipmap (pdata ^. fboBloom . _2 . unTO) glGenerateTextureMipmap (pdata ^. fboBloom . _2 . unTO)
@@ -221,13 +221,19 @@ doDrawing' win pdata u = do
glUseProgram (_bloomBlurShader pdata) glUseProgram (_bloomBlurShader pdata)
--glDrawArrays GL_TRIANGLES 0 6 --glDrawArrays GL_TRIANGLES 0 6
glDrawArrays GL_TRIANGLES 0 3 glDrawArrays GL_TRIANGLES 0 3
when (cfig ^. gr_bloom) $ do glBindFramebuffer GL_FRAMEBUFFER $ pdata ^. fboQuarter . _1 . unFBO
replicateM_ 1 $ glGenerateTextureMipmap (pdata ^. fboHalf . _2 . unTO)
pingPongBetween glBindTextureUnit 0 (pdata ^. fboHalf . _2 . unTO)
(_fboHalf1 pdata) setViewport (const SixteenthRes) cfig
(_fboHalf2 pdata) glDrawArrays GL_TRIANGLES 0 3
(_bloomBlurShader pdata)
glEnable GL_BLEND 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 setViewport _gr_world_res cfig
--draw clouds onto cloud buffer --draw clouds onto cloud buffer
glBindFramebuffer GL_FRAMEBUFFER (pdata ^. fboCloud . _1 . unFBO) glBindFramebuffer GL_FRAMEBUFFER (pdata ^. fboCloud . _1 . unFBO)
@@ -354,7 +360,7 @@ doDrawing' win pdata u = do
glEnable GL_BLEND glEnable GL_BLEND
glBlendFunc GL_SRC_ALPHA GL_ONE glBlendFunc GL_SRC_ALPHA GL_ONE
--glBlendFunc GL_ONE GL_ONE --glBlendFunc GL_ONE GL_ONE
glBindTextureUnit 0 (_unTO . snd $ _fboHalf1 pdata) glBindTextureUnit 0 (_unTO . snd $ _fboQuarter pdata)
glUseProgram (pdata ^. fullscreenShader) glUseProgram (pdata ^. fullscreenShader)
--glDrawArrays GL_TRIANGLES 0 6 --glDrawArrays GL_TRIANGLES 0 6
glDrawArrays GL_TRIANGLES 0 3 glDrawArrays GL_TRIANGLES 0 3
+17 -4
View File
@@ -66,7 +66,6 @@ sizeFBOs cfig rdata =
GL_LINEAR_MIPMAP_LINEAR GL_LINEAR_MIPMAP_LINEAR
GL_LINEAR GL_LINEAR
GL_RGBA16F GL_RGBA16F
-- [fboBloom] -- fboPos probably doesn't need the alpha channel
) )
>>= fboPos >>= fboPos
( resizeFBOTO ( resizeFBOTO
@@ -75,12 +74,26 @@ sizeFBOs cfig rdata =
GL_NEAREST GL_NEAREST
GL_RGBA16F -- possibly doesn't need the alpha channel... GL_RGBA16F -- possibly doesn't need the alpha channel...
) )
>>= foldUpdateFBOTO >>= fboHalf
_gr_downsize_res ( resizeFBOTO'
(getWindowSize (const EighthRes) cfig)
5
GL_LINEAR_MIPMAP_LINEAR GL_LINEAR_MIPMAP_LINEAR
GL_LINEAR GL_LINEAR
GL_RGBA16F GL_RGBA16F
[fboHalf1, fboHalf2] )
-- >>= foldUpdateFBOTO
-- _gr_downsize_res
-- GL_LINEAR_MIPMAP_LINEAR
-- GL_LINEAR
-- GL_RGBA16F
-- [fboHalf]
>>= foldUpdateFBOTO
(const SixteenthRes)
GL_LINEAR_MIPMAP_LINEAR
GL_LINEAR
GL_RGBA16F
[fboQuarter]
>>= fboWindow >>= fboWindow
( resizeFBOTO2 ( resizeFBOTO2
(getWindowSize _gr_world_res cfig) (getWindowSize _gr_world_res cfig)
+4 -4
View File
@@ -179,8 +179,8 @@ preloadRender = do
fboLightingName <- setupFramebufferGivenStencil rboBaseBloomName fboLightingName <- setupFramebufferGivenStencil rboBaseBloomName
fbofullscreen <- newTextureFramebuffer fbofullscreen <- newTextureFramebuffer
fboHalf1Name <- newTextureFramebuffer fbohalf <- newTextureFramebuffer
fboHalf2Name <- newTextureFramebuffer fboquarter <- newTextureFramebuffer
-- reset to default framebuffer, ready for drawing direct to screen -- reset to default framebuffer, ready for drawing direct to screen
glBindFramebuffer GL_FRAMEBUFFER 0 glBindFramebuffer GL_FRAMEBUFFER 0
@@ -208,8 +208,8 @@ preloadRender = do
, _barrelShader = (barrelShad,distvbo) , _barrelShader = (barrelShad,distvbo)
-- , _fbo2 = framebuf2 -- , _fbo2 = framebuf2
, _fboFullscreen = fbofullscreen , _fboFullscreen = fbofullscreen
, _fboHalf1 = fboHalf1Name , _fboHalf = fbohalf
, _fboHalf2 = fboHalf2Name , _fboQuarter = fboquarter
, _fboLighting = fboLightingName , _fboLighting = fboLightingName
, _fboBase = fboBaseName , _fboBase = fboBaseName
, _fboWindow = fbowindow , _fboWindow = fbowindow