Use downscaling to sixteenth res for bloom
This commit is contained in:
@@ -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))
|
||||||
|
|||||||
+15
-9
@@ -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
|
||||||
|
|||||||
@@ -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...
|
||||||
)
|
)
|
||||||
|
>>= 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
|
>>= foldUpdateFBOTO
|
||||||
_gr_downsize_res
|
(const SixteenthRes)
|
||||||
GL_LINEAR_MIPMAP_LINEAR
|
GL_LINEAR_MIPMAP_LINEAR
|
||||||
GL_LINEAR
|
GL_LINEAR
|
||||||
GL_RGBA16F
|
GL_RGBA16F
|
||||||
[fboHalf1, fboHalf2]
|
[fboQuarter]
|
||||||
>>= fboWindow
|
>>= fboWindow
|
||||||
( resizeFBOTO2
|
( resizeFBOTO2
|
||||||
(getWindowSize _gr_world_res cfig)
|
(getWindowSize _gr_world_res cfig)
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user