Shaders: work on fullscreen, cleanup creation

This commit is contained in:
2025-11-13 11:18:28 +00:00
parent 8dee93991a
commit 56aa8c6697
5 changed files with 26 additions and 22 deletions
+3 -4
View File
@@ -1,8 +1,7 @@
#version 450 core #version 450 core
layout(location = 0) in vec2 pos; layout (std140, binding = 2) uniform PosTex { vec4 posTex[6]; };
layout(location = 1) in vec2 texPos;
out vec2 vTexPos; out vec2 vTexPos;
void main() { void main() {
gl_Position = vec4(pos, 0.0, 1.0); gl_Position = vec4(posTex[gl_VertexID].xy,0,1);
vTexPos = texPos; vTexPos = posTex[gl_VertexID].zw;
} }
+3 -4
View File
@@ -1,8 +1,7 @@
#version 450 core #version 450 core
layout(location = 0) in vec2 position; layout (std140, binding = 2) uniform PosTex { vec4 posTex[6]; };
layout(location = 1) in vec2 texpos;
out vec2 vTexPos; out vec2 vTexPos;
void main() { void main() {
gl_Position = vec4(position, 0, 1); gl_Position = vec4(posTex[gl_VertexID].xy,0,1);
vTexPos = texpos; vTexPos = posTex[gl_VertexID].zw;
} }
+3 -3
View File
@@ -18,9 +18,9 @@ data RenderData = RenderData
, _ceilingStencilShader :: Shader , _ceilingStencilShader :: Shader
, _alphaDivideShader :: Shader , _alphaDivideShader :: Shader
-- , _windowShader :: Shader -- , _windowShader :: Shader
, _windowPullShader :: Shader , _windowPullShader :: GLuint
, _pullWallShader :: Shader , _pullWallShader :: GLuint
, _fullscreenShader :: Shader , _fullscreenShader :: GLuint
, _transparencyCompShader :: Shader , _transparencyCompShader :: Shader
, _bloomBlurShader :: Shader , _bloomBlurShader :: Shader
, _colorBlurShader :: Shader , _colorBlurShader :: Shader
+13 -7
View File
@@ -147,7 +147,7 @@ doDrawing' win pdata u = do
-- (_unPrimitiveMode $ pdata ^. wallShader . shaderPrimitive) -- (_unPrimitiveMode $ pdata ^. wallShader . shaderPrimitive)
-- 0 -- 0
-- (fromIntegral trueNWalls) -- (fromIntegral trueNWalls)
glUseProgram (pdata ^. pullWallShader . shaderUINT) glUseProgram (pdata ^. pullWallShader)
--glBindVertexArray $ pdata ^. dummyVAO . vaoName --glBindVertexArray $ pdata ^. dummyVAO . vaoName
glDrawArrays GL_TRIANGLES 0 (fromIntegral trueNWalls * 6) glDrawArrays GL_TRIANGLES 0 (fromIntegral trueNWalls * 6)
--draw object shapes onto base buffer --draw object shapes onto base buffer
@@ -202,7 +202,8 @@ doDrawing' win pdata u = do
glBindTextureUnit 0 (pdata ^. fboLighting . _2 . unTO) glBindTextureUnit 0 (pdata ^. fboLighting . _2 . unTO)
glEnable GL_BLEND glEnable GL_BLEND
glBlendFunc GL_ZERO GL_ONE_MINUS_SRC_COLOR glBlendFunc GL_ZERO GL_ONE_MINUS_SRC_COLOR
drawShader (_fullscreenShader pdata) 4 glUseProgram (pdata ^. fullscreenShader)
glDrawArrays GL_TRIANGLES 0 6
with GL_COLOR_ATTACHMENT0 $ with GL_COLOR_ATTACHMENT0 $
glInvalidateNamedFramebufferData (pdata ^. fboLighting . _1 . unFBO) 1 glInvalidateNamedFramebufferData (pdata ^. fboLighting . _1 . unFBO) 1
--draw bloom onto bloom buffer --draw bloom onto bloom buffer
@@ -334,7 +335,9 @@ doDrawing' win pdata u = do
ptr ptr
glBindTextureUnit 0 (pdata ^. fboCloud . _2 . _2 . unTO) glBindTextureUnit 0 (pdata ^. fboCloud . _2 . _2 . unTO)
glDepthMask GL_FALSE 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 ----draw lightmap for cloud buffer
glDepthMask GL_TRUE glDepthMask GL_TRUE
glDepthFunc GL_LESS glDepthFunc GL_LESS
@@ -364,7 +367,7 @@ doDrawing' win pdata u = do
glDisable GL_BLEND glDisable GL_BLEND
-- glDepthFunc GL_ALWAYS -- glDepthFunc GL_ALWAYS
-- glDisable GL_CULL_FACE -- glDisable GL_CULL_FACE
glUseProgram $ pdata ^. windowPullShader . shaderUINT glUseProgram $ pdata ^. windowPullShader
glBindVertexArray $ pdata ^. dummyVAO . vaoName glBindVertexArray $ pdata ^. dummyVAO . vaoName
glDrawArrays GL_TRIANGLES 0 (fromIntegral nWins * 6) glDrawArrays GL_TRIANGLES 0 (fromIntegral nWins * 6)
glDisable GL_DEPTH_CLAMP glDisable GL_DEPTH_CLAMP
@@ -380,7 +383,8 @@ doDrawing' win pdata u = do
glBindTextureUnit 0 (_unTO . snd $ _fboLighting pdata) glBindTextureUnit 0 (_unTO . snd $ _fboLighting pdata)
glEnable GL_BLEND glEnable GL_BLEND
glBlendFuncSeparate GL_ZERO GL_ONE_MINUS_SRC_COLOR GL_ZERO GL_ONE 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 glBlendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
-- bind base buffer for drawing clouds and bloom -- 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_SRC_ALPHA GL_ONE
--glBlendFunc GL_ONE GL_ONE --glBlendFunc GL_ONE GL_ONE
glBindTextureUnit 0 (_unTO . snd $ _fboHalf1 pdata) 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 -- glBlendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
--set viewport for radial distortion --set viewport for radial distortion
@@ -420,7 +425,8 @@ doDrawing' win pdata u = do
(rds, x) | null rds || not x -> do (rds, x) | null rds || not x -> do
glBindTextureUnit 0 $ pdata ^. fboBase . _2 . _1 . unTO glBindTextureUnit 0 $ pdata ^. fboBase . _2 . _1 . unTO
glBindFramebuffer GL_FRAMEBUFFER 0 glBindFramebuffer GL_FRAMEBUFFER 0
drawShader (_fullscreenShader pdata) 4 glUseProgram (pdata ^. fullscreenShader)
glDrawArrays GL_TRIANGLES 0 6
(rds, _) -> do (rds, _) -> do
let bindDrawDist :: Distortion -> IO () let bindDrawDist :: Distortion -> IO ()
bindDrawDist (RadialDistortion (V2 a b) (V2 c d) (V2 e f) g) = do bindDrawDist (RadialDistortion (V2 a b) (V2 c d) (V2 e f) g) = do
+4 -4
View File
@@ -95,9 +95,9 @@ preloadRender = do
dummyvao <- mglCreate glGenVertexArrays dummyvao <- mglCreate glGenVertexArrays
winpull <- makeShaderUsingVAO "pull/window" [vert, frag] pmTriangles (VAO dummyvao) --winpull <- makeShaderUsingVAO "pull/window" [vert, frag] pmTriangles (VAO dummyvao)
winpull <- makeSourcedShader "pull/window" [vert, frag]
wallpull <- makeShaderUsingVAO "pull/wall" [vert, frag] pmTriangles (VAO dummyvao) wallpull <- makeSourcedShader "pull/wall" [vert, frag]
shapeshader <- shapeshader <-
makeShaderUsingVAO "shape/basic" [vert, frag] pmTriangles (VAO dummyvao) makeShaderUsingVAO "shape/basic" [vert, frag] pmTriangles (VAO dummyvao)
@@ -137,7 +137,7 @@ preloadRender = do
putStrLn "Setup full screen shaders" putStrLn "Setup full screen shaders"
(_, screentexturevao) <- setupStaticVBOVAO (toFloatVAs [2, 2]) (concat cornerList) (_, screentexturevao) <- setupStaticVBOVAO (toFloatVAs [2, 2]) (concat cornerList)
alphadivideshader <- makeShaderUsingVAO "texture2D/alphaDivide" [vert, frag] pmTriangleStrip screentexturevao alphadivideshader <- makeShaderUsingVAO "texture2D/alphaDivide" [vert, frag] pmTriangleStrip screentexturevao
fsShad <- makeShaderUsingVAO "texture/simple" [vert, frag] pmTriangleStrip screentexturevao fsShad <- makeSourcedShader "texture/simple" [vert, frag]
transcompshader <- transcompshader <-
makeShaderUsingVAO makeShaderUsingVAO
"fullscreen/transparencyComp" "fullscreen/transparencyComp"