From 1a85d9d562ca7f6f003eaa63cf05fca6bd6cb083 Mon Sep 17 00:00:00 2001 From: justin Date: Mon, 10 Nov 2025 19:15:07 +0000 Subject: [PATCH] Use vertex pulling for ceiling stencil --- shader/ceiling/stencil.vert | 16 ++++++++++++++-- src/Dodge/Render.hs | 15 +++------------ src/Preload/Render.hs | 6 ++++-- 3 files changed, 21 insertions(+), 16 deletions(-) diff --git a/shader/ceiling/stencil.vert b/shader/ceiling/stencil.vert index ffb827dbb..76812fc0c 100644 --- a/shader/ceiling/stencil.vert +++ b/shader/ceiling/stencil.vert @@ -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); } diff --git a/src/Dodge/Render.hs b/src/Dodge/Render.hs index c7f13a87d..147ef11ba 100644 --- a/src/Dodge/Render.hs +++ b/src/Dodge/Render.hs @@ -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 diff --git a/src/Preload/Render.hs b/src/Preload/Render.hs index 297a24b92..b4bbb5531 100644 --- a/src/Preload/Render.hs +++ b/src/Preload/Render.hs @@ -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