Use vertex pulling for ceiling stencil

This commit is contained in:
2025-11-10 19:15:07 +00:00
parent 1f01147821
commit 1a85d9d562
3 changed files with 21 additions and 16 deletions
+14 -2
View File
@@ -1,6 +1,18 @@
#version 450 core #version 450 core
layout (location = 0) in vec4 poss; //layout (location = 0) in vec4 poss;
//void main()
//{
// gl_Position = poss;
//}
struct PosTex { vec4 pospos; vec4 texang; };
layout (std140, binding = 0) uniform TheMat { mat4 theMat; } ;
layout (std430, binding = 2) readonly buffer Pos { PosTex data[]; };
int indices[6] = {0,1,3,0,3,2};
void main() void main()
{ {
gl_Position = poss; vec4 pp = data[gl_VertexID / 6].pospos;
int j = indices[gl_VertexID % 6];
float z = (j > 1.5 ? 5000 : 100);
vec2 xy = (j % 2 > 0 ? pp.xy : pp.zw);
gl_Position = theMat * vec4(xy,z,1);
} }
+3 -12
View File
@@ -136,22 +136,13 @@ doDrawing' win pdata u = do
glCullFace GL_BACK glCullFace GL_BACK
unless (debugOn Remove_LOS cfig) $ do unless (debugOn Remove_LOS cfig) $ do
glUseProgram (pdata ^. ceilingStencilShader . shaderUINT) glUseProgram (pdata ^. ceilingStencilShader . shaderUINT)
-- glProgramUniform3f -- glBindVertexArray $ pdata ^. ceilingStencilShader . shaderVAO . vaoName
-- (pdata ^. ceilingStencilShader . shaderUINT) glBindVertexArray $ pdata ^. dummyVAO . vaoName
-- 0
-- vfx
-- vfy
-- 20
-- glProgramUniform1f
-- (pdata ^. ceilingStencilShader . shaderUINT)
-- 1
-- 1000 -- this should be the furthest on screen distance from the viewpoint
glBindVertexArray $ pdata ^. ceilingStencilShader . shaderVAO . vaoName
glEnable GL_DEPTH_CLAMP glEnable GL_DEPTH_CLAMP
glDrawArrays glDrawArrays
(_unPrimitiveMode $ pdata ^. ceilingStencilShader . shaderPrimitive) (_unPrimitiveMode $ pdata ^. ceilingStencilShader . shaderPrimitive)
0 0
(fromIntegral trueNWalls) (fromIntegral (trueNWalls * 6))
glDisable GL_DEPTH_CLAMP glDisable GL_DEPTH_CLAMP
glStencilMask 127 -- to alter last seven bits glStencilMask 127 -- to alter last seven bits
glStencilOp GL_KEEP GL_KEEP GL_KEEP glStencilOp GL_KEEP GL_KEEP GL_KEEP
+4 -2
View File
@@ -88,8 +88,10 @@ preloadRender = do
makeShaderUsingVAO "lighting/cap" [vert, geom] pmTriangles shPosVAO makeShaderUsingVAO "lighting/cap" [vert, geom] pmTriangles shPosVAO
lightingLineShadowShad <- lightingLineShadowShad <-
makeShaderUsingVAO "lighting/lineShadow" [vert, geom] pmLinesAdjacency shedgevao makeShaderUsingVAO "lighting/lineShadow" [vert, geom] pmLinesAdjacency shedgevao
ceilingstencilshader <-
makeShaderUsingVBO "ceiling/stencil" [vert, geom] (toFloatVAs [4]) pmPoints wallvbo ceilingstencilshader <- makeShaderUsingVAO "ceiling/stencil" [vert] pmTriangles
(VAO dummyvao)
-- makeShaderUsingVBO "ceiling/stencil" [vert, geom] (toFloatVAs [4]) pmPoints wallvbo
putStrLn "Setup 2D shaders" putStrLn "Setup 2D shaders"
bslist <- makeShaderVBO "dualTwoD/basic" [vert, frag] (toFloatVAs [3, 4]) pmTriangles bslist <- makeShaderVBO "dualTwoD/basic" [vert, frag] (toFloatVAs [3, 4]) pmTriangles