Start implementing ceiling stencil shader

This commit is contained in:
2025-11-01 11:24:08 +00:00
parent 71006e24fd
commit d35a41944c
4 changed files with 60 additions and 35 deletions
+1
View File
@@ -15,6 +15,7 @@ data RenderData = RenderData
, _lightingLineShadowShader :: Shader
, _lightingCapShader :: Shader
, _lightingTextureShader :: Shader
, _ceilingStencilShader :: Shader
, _alphaDivideShader :: Shader
, _windowShader :: Shader
, _fullscreenShader :: Shader
+14 -10
View File
@@ -122,28 +122,33 @@ doDrawing' win pdata u = do
glDepthMask GL_TRUE
glDisable GL_BLEND
glDepthFunc GL_LESS
with 1 $
glClearNamedFramebufferfv
-- clear depth and stencil buffers
glStencilMask 255 -- to alter the entire stencil
glClearNamedFramebufferfi
(pdata ^. fboBase . _1 . unFBO)
GL_DEPTH
GL_DEPTH_STENCIL
0
1
0
-- draw wall occlusions from the camera's point of view
glDisable GL_CULL_FACE
-- glEnable GL_STENCIL_TEST
-- glStencilFunc
unless (debugOn Remove_LOS cfig) $ do
glUseProgram (pdata ^. lightingWallShadShader . shaderUINT)
glUseProgram (pdata ^. ceilingStencilShader . shaderUINT)
glProgramUniform3f
(pdata ^. lightingWallShadShader . shaderUINT)
(pdata ^. ceilingStencilShader . shaderUINT)
0
vfx
vfy
20
glProgramUniform1f
(pdata ^. lightingWallShadShader . shaderUINT)
(pdata ^. ceilingStencilShader . shaderUINT)
1
1000 -- this should be the furthest on screen distance from the viewpoint
glBindVertexArray $ pdata ^. lightingWallShadShader . shaderVAO . vaoName
glBindVertexArray $ pdata ^. ceilingStencilShader . shaderVAO . vaoName
glDrawArrays
(_unPrimitiveMode $ pdata ^. lightingWallShadShader . shaderPrimitive)
(_unPrimitiveMode $ pdata ^. ceilingStencilShader . shaderPrimitive)
0
(fromIntegral trueNWalls)
-- clear color and normals
@@ -182,12 +187,11 @@ doDrawing' win pdata u = do
glEnable GL_STENCIL_TEST
glStencilFunc GL_ALWAYS 0 255
glStencilOp GL_INCR GL_INCR GL_INCR
with 0 $ \ptr ->
with 0 $
glClearNamedFramebufferiv
(pdata ^. fboBase . _1 . unFBO)
GL_STENCIL
0
ptr
glDrawArrays
(_unPrimitiveMode $ pdata ^. chasmShader . shaderPrimitive)
0
+3
View File
@@ -73,6 +73,8 @@ preloadRender = do
makeShaderUsingVAO "lighting/cap" [vert, geom] pmTriangles shPosVAO
lightingLineShadowShad <-
makeShaderUsingVAO "lighting/lineShadow" [vert, geom] pmLinesAdjacency shedgevao
ceilingstencilshader <-
makeShaderUsingVBO "ceiling/stencil" [vert, geom] (toFloatVAs [4]) pmPoints wallvbo
putStrLn "Setup 2D shaders"
bslist <- makeShaderVBO "dualTwoD/basic" [vert, frag] (toFloatVAs [3, 4]) pmTriangles
@@ -161,6 +163,7 @@ preloadRender = do
, _lightingCapShader = lightingCapShad
, _lightingLineShadowShader = lightingLineShadowShad
, _lightingWallShadShader = lightingWallShadShad
, _ceilingStencilShader = ceilingstencilshader
, _windowShader = windowshader
, _fullscreenShader = fsShad
, _alphaDivideShader = alphadivideshader