From 56aa8c669723f1a747e86f5ee4c6c04b20dfa950 Mon Sep 17 00:00:00 2001 From: justin Date: Thu, 13 Nov 2025 11:18:28 +0000 Subject: [PATCH] Shaders: work on fullscreen, cleanup creation --- shader/texture/simple.vert | 7 +++---- shader/texture2D/alphaDivide.vert | 7 +++---- src/Data/Preload/Render.hs | 6 +++--- src/Dodge/Render.hs | 20 +++++++++++++------- src/Preload/Render.hs | 8 ++++---- 5 files changed, 26 insertions(+), 22 deletions(-) diff --git a/shader/texture/simple.vert b/shader/texture/simple.vert index fa5cbb7f5..927b83cec 100644 --- a/shader/texture/simple.vert +++ b/shader/texture/simple.vert @@ -1,8 +1,7 @@ #version 450 core -layout(location = 0) in vec2 pos; -layout(location = 1) in vec2 texPos; +layout (std140, binding = 2) uniform PosTex { vec4 posTex[6]; }; out vec2 vTexPos; void main() { - gl_Position = vec4(pos, 0.0, 1.0); - vTexPos = texPos; + gl_Position = vec4(posTex[gl_VertexID].xy,0,1); + vTexPos = posTex[gl_VertexID].zw; } diff --git a/shader/texture2D/alphaDivide.vert b/shader/texture2D/alphaDivide.vert index 066695822..927b83cec 100644 --- a/shader/texture2D/alphaDivide.vert +++ b/shader/texture2D/alphaDivide.vert @@ -1,8 +1,7 @@ #version 450 core -layout(location = 0) in vec2 position; -layout(location = 1) in vec2 texpos; +layout (std140, binding = 2) uniform PosTex { vec4 posTex[6]; }; out vec2 vTexPos; void main() { - gl_Position = vec4(position, 0, 1); - vTexPos = texpos; + gl_Position = vec4(posTex[gl_VertexID].xy,0,1); + vTexPos = posTex[gl_VertexID].zw; } diff --git a/src/Data/Preload/Render.hs b/src/Data/Preload/Render.hs index d51dd2163..972e59809 100644 --- a/src/Data/Preload/Render.hs +++ b/src/Data/Preload/Render.hs @@ -18,9 +18,9 @@ data RenderData = RenderData , _ceilingStencilShader :: Shader , _alphaDivideShader :: Shader -- , _windowShader :: Shader - , _windowPullShader :: Shader - , _pullWallShader :: Shader - , _fullscreenShader :: Shader + , _windowPullShader :: GLuint + , _pullWallShader :: GLuint + , _fullscreenShader :: GLuint , _transparencyCompShader :: Shader , _bloomBlurShader :: Shader , _colorBlurShader :: Shader diff --git a/src/Dodge/Render.hs b/src/Dodge/Render.hs index 66f5eecd1..a36108684 100644 --- a/src/Dodge/Render.hs +++ b/src/Dodge/Render.hs @@ -147,7 +147,7 @@ doDrawing' win pdata u = do -- (_unPrimitiveMode $ pdata ^. wallShader . shaderPrimitive) -- 0 -- (fromIntegral trueNWalls) - glUseProgram (pdata ^. pullWallShader . shaderUINT) + glUseProgram (pdata ^. pullWallShader) --glBindVertexArray $ pdata ^. dummyVAO . vaoName glDrawArrays GL_TRIANGLES 0 (fromIntegral trueNWalls * 6) --draw object shapes onto base buffer @@ -202,7 +202,8 @@ doDrawing' win pdata u = do glBindTextureUnit 0 (pdata ^. fboLighting . _2 . unTO) glEnable GL_BLEND glBlendFunc GL_ZERO GL_ONE_MINUS_SRC_COLOR - drawShader (_fullscreenShader pdata) 4 + glUseProgram (pdata ^. fullscreenShader) + glDrawArrays GL_TRIANGLES 0 6 with GL_COLOR_ATTACHMENT0 $ glInvalidateNamedFramebufferData (pdata ^. fboLighting . _1 . unFBO) 1 --draw bloom onto bloom buffer @@ -334,7 +335,9 @@ doDrawing' win pdata u = do ptr glBindTextureUnit 0 (pdata ^. fboCloud . _2 . _2 . unTO) glDepthMask GL_FALSE - drawShader (pdata ^. alphaDivideShader) 4 +-- drawShader (pdata ^. alphaDivideShader) 4 + glUseProgram (pdata ^. alphaDivideShader . shaderUINT) + glDrawArrays GL_TRIANGLES 0 6 ----draw lightmap for cloud buffer glDepthMask GL_TRUE glDepthFunc GL_LESS @@ -364,7 +367,7 @@ doDrawing' win pdata u = do glDisable GL_BLEND -- glDepthFunc GL_ALWAYS -- glDisable GL_CULL_FACE - glUseProgram $ pdata ^. windowPullShader . shaderUINT + glUseProgram $ pdata ^. windowPullShader glBindVertexArray $ pdata ^. dummyVAO . vaoName glDrawArrays GL_TRIANGLES 0 (fromIntegral nWins * 6) glDisable GL_DEPTH_CLAMP @@ -380,7 +383,8 @@ doDrawing' win pdata u = do glBindTextureUnit 0 (_unTO . snd $ _fboLighting pdata) glEnable GL_BLEND glBlendFuncSeparate GL_ZERO GL_ONE_MINUS_SRC_COLOR GL_ZERO GL_ONE - drawShader (_fullscreenShader pdata) 4 + glUseProgram (pdata ^. fullscreenShader) + glDrawArrays GL_TRIANGLES 0 6 glBlendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA -- bind base buffer for drawing clouds and bloom @@ -406,7 +410,8 @@ doDrawing' win pdata u = do glBlendFunc GL_SRC_ALPHA GL_ONE --glBlendFunc GL_ONE GL_ONE glBindTextureUnit 0 (_unTO . snd $ _fboHalf1 pdata) - drawShader (_fullscreenShader pdata) 4 + glUseProgram (pdata ^. fullscreenShader) + glDrawArrays GL_TRIANGLES 0 6 -- glBlendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA --set viewport for radial distortion @@ -420,7 +425,8 @@ doDrawing' win pdata u = do (rds, x) | null rds || not x -> do glBindTextureUnit 0 $ pdata ^. fboBase . _2 . _1 . unTO glBindFramebuffer GL_FRAMEBUFFER 0 - drawShader (_fullscreenShader pdata) 4 + glUseProgram (pdata ^. fullscreenShader) + glDrawArrays GL_TRIANGLES 0 6 (rds, _) -> do let bindDrawDist :: Distortion -> IO () bindDrawDist (RadialDistortion (V2 a b) (V2 c d) (V2 e f) g) = do diff --git a/src/Preload/Render.hs b/src/Preload/Render.hs index 87b147ae6..a40946c2e 100644 --- a/src/Preload/Render.hs +++ b/src/Preload/Render.hs @@ -95,9 +95,9 @@ preloadRender = do dummyvao <- mglCreate glGenVertexArrays - winpull <- makeShaderUsingVAO "pull/window" [vert, frag] pmTriangles (VAO dummyvao) - - wallpull <- makeShaderUsingVAO "pull/wall" [vert, frag] pmTriangles (VAO dummyvao) + --winpull <- makeShaderUsingVAO "pull/window" [vert, frag] pmTriangles (VAO dummyvao) + winpull <- makeSourcedShader "pull/window" [vert, frag] + wallpull <- makeSourcedShader "pull/wall" [vert, frag] shapeshader <- makeShaderUsingVAO "shape/basic" [vert, frag] pmTriangles (VAO dummyvao) @@ -137,7 +137,7 @@ preloadRender = do putStrLn "Setup full screen shaders" (_, screentexturevao) <- setupStaticVBOVAO (toFloatVAs [2, 2]) (concat cornerList) alphadivideshader <- makeShaderUsingVAO "texture2D/alphaDivide" [vert, frag] pmTriangleStrip screentexturevao - fsShad <- makeShaderUsingVAO "texture/simple" [vert, frag] pmTriangleStrip screentexturevao + fsShad <- makeSourcedShader "texture/simple" [vert, frag] transcompshader <- makeShaderUsingVAO "fullscreen/transparencyComp"