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
, _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))
+15 -9
View File
@@ -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
+16 -3
View File
@@ -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)
+4 -4
View File
@@ -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