Stencil out windows over ceilings
This commit is contained in:
+7
-6
@@ -132,8 +132,9 @@ doDrawing' win pdata u = do
|
|||||||
0
|
0
|
||||||
-- draw wall occlusions from the camera's point of view
|
-- draw wall occlusions from the camera's point of view
|
||||||
glDisable GL_CULL_FACE
|
glDisable GL_CULL_FACE
|
||||||
-- glEnable GL_STENCIL_TEST
|
glEnable GL_STENCIL_TEST
|
||||||
-- glStencilFunc
|
glStencilFunc GL_NOTEQUAL 128 255
|
||||||
|
glStencilOp GL_KEEP GL_KEEP GL_REPLACE
|
||||||
unless (debugOn Remove_LOS cfig) $ do
|
unless (debugOn Remove_LOS cfig) $ do
|
||||||
glUseProgram (pdata ^. ceilingStencilShader . shaderUINT)
|
glUseProgram (pdata ^. ceilingStencilShader . shaderUINT)
|
||||||
glProgramUniform3f
|
glProgramUniform3f
|
||||||
@@ -151,6 +152,8 @@ doDrawing' win pdata u = do
|
|||||||
(_unPrimitiveMode $ pdata ^. ceilingStencilShader . shaderPrimitive)
|
(_unPrimitiveMode $ pdata ^. ceilingStencilShader . shaderPrimitive)
|
||||||
0
|
0
|
||||||
(fromIntegral trueNWalls)
|
(fromIntegral trueNWalls)
|
||||||
|
glStencilMask 127 -- to alter last seven bits
|
||||||
|
glStencilOp GL_KEEP GL_KEEP GL_KEEP
|
||||||
-- clear color and normals
|
-- clear color and normals
|
||||||
withArray [0, 0, 0, 1] $
|
withArray [0, 0, 0, 1] $
|
||||||
glClearNamedFramebufferfv (pdata ^. fboBase . _1 . unFBO) GL_COLOR 0
|
glClearNamedFramebufferfv (pdata ^. fboBase . _1 . unFBO) GL_COLOR 0
|
||||||
@@ -168,8 +171,6 @@ doDrawing' win pdata u = do
|
|||||||
(_unPrimitiveMode $ pdata ^. wallShader . shaderPrimitive)
|
(_unPrimitiveMode $ pdata ^. wallShader . shaderPrimitive)
|
||||||
0
|
0
|
||||||
(fromIntegral trueNWalls)
|
(fromIntegral trueNWalls)
|
||||||
--draw object pictures onto base buffer (are there any?!)
|
|
||||||
-- renderLayer BottomLayer shadV layerCounts
|
|
||||||
--draw object shapes onto base buffer
|
--draw object shapes onto base buffer
|
||||||
let fs = _shapeShader pdata
|
let fs = _shapeShader pdata
|
||||||
glUseProgram (_shaderUINT fs)
|
glUseProgram (_shaderUINT fs)
|
||||||
@@ -184,8 +185,6 @@ doDrawing' win pdata u = do
|
|||||||
glBindVertexArray $ pdata ^. chasmShader . shaderVAO . vaoName
|
glBindVertexArray $ pdata ^. chasmShader . shaderVAO . vaoName
|
||||||
glDepthMask GL_FALSE
|
glDepthMask GL_FALSE
|
||||||
glDrawBuffer GL_NONE
|
glDrawBuffer GL_NONE
|
||||||
glEnable GL_STENCIL_TEST
|
|
||||||
glStencilFunc GL_ALWAYS 0 255
|
|
||||||
glStencilOp GL_INCR GL_INCR GL_INCR
|
glStencilOp GL_INCR GL_INCR GL_INCR
|
||||||
with 0 $
|
with 0 $
|
||||||
glClearNamedFramebufferiv
|
glClearNamedFramebufferiv
|
||||||
@@ -210,6 +209,8 @@ doDrawing' win pdata u = do
|
|||||||
glDisable GL_STENCIL_TEST
|
glDisable GL_STENCIL_TEST
|
||||||
glDisable GL_CULL_FACE
|
glDisable GL_CULL_FACE
|
||||||
glEnable GL_BLEND
|
glEnable GL_BLEND
|
||||||
|
-- reset stencil to not draw on ceilings
|
||||||
|
glStencilFunc GL_NOTEQUAL 128 255
|
||||||
--draw lightmap into its own buffer
|
--draw lightmap into its own buffer
|
||||||
createLightMap
|
createLightMap
|
||||||
cfig
|
cfig
|
||||||
|
|||||||
+1
-2
@@ -158,12 +158,11 @@ renderShadows shadrendertype nWalls nSils nCaps positiontexture normaltexture li
|
|||||||
-- setup stencil
|
-- setup stencil
|
||||||
glColorMask GL_FALSE GL_FALSE GL_FALSE GL_FALSE
|
glColorMask GL_FALSE GL_FALSE GL_FALSE GL_FALSE
|
||||||
glStencilMask 127 -- so we only affect the last 7 bits
|
glStencilMask 127 -- so we only affect the last 7 bits
|
||||||
with 0 $ \ptr ->
|
with 0 $
|
||||||
glClearNamedFramebufferiv
|
glClearNamedFramebufferiv
|
||||||
(pdata ^. fboLighting . _1 . unFBO)
|
(pdata ^. fboLighting . _1 . unFBO)
|
||||||
GL_STENCIL
|
GL_STENCIL
|
||||||
0
|
0
|
||||||
ptr
|
|
||||||
glDisable GL_CULL_FACE
|
glDisable GL_CULL_FACE
|
||||||
-- the first bit has been used to stencil out "ceilings" under which we never draw
|
-- the first bit has been used to stencil out "ceilings" under which we never draw
|
||||||
glStencilFunc GL_NOTEQUAL 128 255
|
glStencilFunc GL_NOTEQUAL 128 255
|
||||||
|
|||||||
Reference in New Issue
Block a user