From be7bf986e2b83e958106cbef2967951d37200914 Mon Sep 17 00:00:00 2001 From: jgk Date: Mon, 5 Jul 2021 21:31:35 +0200 Subject: [PATCH] Add trail to bloom --- shader/fullscreen/alphaHalve.frag | 3 +++ shader/fullscreen/alphaHalve.vert | 4 ++++ shader/texture/bloomBlur.frag | 2 +- src/Data/Preload/Render.hs | 1 + src/Dodge/Render.hs | 8 +++++++- src/Preload/Render.hs | 12 ++++++++++++ 6 files changed, 28 insertions(+), 2 deletions(-) create mode 100644 shader/fullscreen/alphaHalve.frag create mode 100644 shader/fullscreen/alphaHalve.vert diff --git a/shader/fullscreen/alphaHalve.frag b/shader/fullscreen/alphaHalve.frag new file mode 100644 index 000000000..3d71d0ae8 --- /dev/null +++ b/shader/fullscreen/alphaHalve.frag @@ -0,0 +1,3 @@ +#version 430 core +out vec4 fColor; +void main () { fColor = vec4(0,0,0,0.5);} diff --git a/shader/fullscreen/alphaHalve.vert b/shader/fullscreen/alphaHalve.vert new file mode 100644 index 000000000..cd3e48618 --- /dev/null +++ b/shader/fullscreen/alphaHalve.vert @@ -0,0 +1,4 @@ +#version 430 core +layout (location = 0) in vec2 position; +void main() +{ gl_Position = vec4 (position, 0 , 1);} diff --git a/shader/texture/bloomBlur.frag b/shader/texture/bloomBlur.frag index c7d9939ce..59339aa93 100644 --- a/shader/texture/bloomBlur.frag +++ b/shader/texture/bloomBlur.frag @@ -46,7 +46,7 @@ void main() float alph = 0.0; for (int i = 0; i < 9; i++) alph += sampleTex[i].a; - alph = sampleTex[5].a + alph/9.0; + alph = max(sampleTex[4].a, alph/9.0); // //fColor = col; fColor = vec4(col.rgb/col.a,alph); diff --git a/src/Data/Preload/Render.hs b/src/Data/Preload/Render.hs index ba224378e..424370da4 100644 --- a/src/Data/Preload/Render.hs +++ b/src/Data/Preload/Render.hs @@ -16,6 +16,7 @@ data RenderData = RenderData , _textureShader :: FullShader , _textureArrayShader :: FullShader , _fullscreenShader :: FullShader + , _fullscreenAlphaHalveShader :: FullShader , _boxBlurShader :: FullShader , _grayscaleShader :: FullShader , _pictureShaders :: [FullShader] diff --git a/src/Dodge/Render.hs b/src/Dodge/Render.hs index d6236d3ee..a5c00a2d9 100644 --- a/src/Dodge/Render.hs +++ b/src/Dodge/Render.hs @@ -84,12 +84,18 @@ doDrawing pdata w = do depthFunc $= Just Always --blend $= Disabled textureBinding Texture2D $= Just (snd $ _fboBloom pdata) - clear [ColorBuffer] + --clear [ColorBuffer] --blendFunc $= (SrcAlpha,OneMinusSrcAlpha) + blendFuncSeparate $= ((Zero,One), (Zero,SrcAlpha)) + bindShaderBuffers [_fullscreenAlphaHalveShader pdata] [4] + drawShader (_fullscreenAlphaHalveShader pdata) 4 blendFunc $= (One,Zero) bindShaderBuffers [_boxBlurShader pdata] [4] + blendFunc $= (SrcAlpha,OneMinusSrcAlpha) drawShader (_boxBlurShader pdata) 4 + blendFunc $= (One,Zero) pingPongBlur pdata + replicateM_ 5 $ pingPongBlur pdata --blend $= Enabled blendFunc $= (SrcAlpha,OneMinusSrcAlpha) diff --git a/src/Preload/Render.hs b/src/Preload/Render.hs index c16d140d1..ec3870921 100644 --- a/src/Preload/Render.hs +++ b/src/Preload/Render.hs @@ -47,6 +47,10 @@ preloadRender = do cslist <- makeShader "twoD/character" [vert,frag] [3,4,2] ETriangles pokeCharStrat >>= addTexture "data/texture/charMap.png" basicTweakZShad <- makeShader "twoD/basicTweakZ" [vert,frag] [4,4] ETriangles pokeTriTweakZ +-- fullscreen shaders + fullscreenAlphaHalveShad <- makeShader "fullscreen/alphaHalve" [vert,frag] [2] ETriangleStrip $ + const cornerListNoCoord + pokeArray (_vboPointer $ _vaoVBO $ _shaderVAO fullscreenAlphaHalveShad) $ concat cornerListNoCoord -- texture shaders, no textures attached fsShad <- makeShader "texture/simple" [vert,frag] [2,2] ETriangleStrip $ const cornerList -- note we directly poke the shader vertex data here @@ -103,6 +107,7 @@ preloadRender = do , _textureShader = textShad , _textureArrayShader = textArrayShad , _fullscreenShader = fsShad + , _fullscreenAlphaHalveShader = fullscreenAlphaHalveShad , _boxBlurShader = boxBlurShad , _grayscaleShader = grayscaleShad , _spareFBO = fbo @@ -125,6 +130,13 @@ cornerList = ,[-1,-1,0,0] ,[ 1,-1,1,0] ] +cornerListNoCoord :: [[Float]] +cornerListNoCoord = + [[-1, 1] + ,[ 1, 1] + ,[-1,-1] + ,[ 1,-1] + ] --------------------end preloadRender setupFramebufferWithStencil :: IO (FramebufferObject, TextureObject,RenderbufferObject)