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
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()
{
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
unless (debugOn Remove_LOS cfig) $ do
glUseProgram (pdata ^. ceilingStencilShader . shaderUINT)
-- glProgramUniform3f
-- (pdata ^. ceilingStencilShader . shaderUINT)
-- 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
-- glBindVertexArray $ pdata ^. ceilingStencilShader . shaderVAO . vaoName
glBindVertexArray $ pdata ^. dummyVAO . vaoName
glEnable GL_DEPTH_CLAMP
glDrawArrays
(_unPrimitiveMode $ pdata ^. ceilingStencilShader . shaderPrimitive)
0
(fromIntegral trueNWalls)
(fromIntegral (trueNWalls * 6))
glDisable GL_DEPTH_CLAMP
glStencilMask 127 -- to alter last seven bits
glStencilOp GL_KEEP GL_KEEP GL_KEEP
+4 -2
View File
@@ -88,8 +88,10 @@ 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
ceilingstencilshader <- makeShaderUsingVAO "ceiling/stencil" [vert] pmTriangles
(VAO dummyvao)
-- makeShaderUsingVBO "ceiling/stencil" [vert, geom] (toFloatVAs [4]) pmPoints wallvbo
putStrLn "Setup 2D shaders"
bslist <- makeShaderVBO "dualTwoD/basic" [vert, frag] (toFloatVAs [3, 4]) pmTriangles