Fix bug involving number of foreground vertices rendered

This commit is contained in:
jgk
2021-06-30 00:59:58 +02:00
parent 357206f060
commit 1cfd1663d1
2 changed files with 15 additions and 12 deletions
+2 -8
View File
@@ -61,17 +61,11 @@ doDrawing pdata w = do
-- set the coordinate uniform ready for drawing elements using world coordinates
bufferUBO $ perspectiveMatrixb rot camzoom trans wins viewFroms
-- store floor position into buffer
let addC (xx,yy) = (xx,yy,0)
nsurfVs <- F.foldM (pokeShader (_lightingSurfaceShader pdata))
$ [Render3 $ polyToTris $ map addC $ screenPolygon w ]
++ concatMap polyToGeoRender (foregroundPics w)
bindShaderBuffers [_lightingSurfaceShader pdata] [nsurfVs]
depthFunc $= Just Less
let scPol = screenPolygon w
-- draw the lightmap. Probably changes the bound framebufferObject
createLightMap pdata (w ^. config . shadow_resolution) wallPoints lightPoints viewFroms
(foregroundPics w)
(foregroundPics w) scPol
clear [DepthBuffer]
depthFunc $= Just Less
-- set blending to depend upon the alpha level already present
+13 -4
View File
@@ -7,7 +7,7 @@ import Shader.Poke
import Data.Preload.Render
import Picture.Data
--import Picture.Tree
--import Geometry
import Geometry
import Geometry.Data
import Polyhedra.Data
import Polyhedra
@@ -57,8 +57,9 @@ createLightMap
-> [(Point3,Float,Float)] -- Lights
-> (Float,Float) -- View from position
-> [Polyhedra] -- foreground geometry
-> [Point2]
-> IO ()
createLightMap pdata resDiv wallPoints lightPoints (viewFromx,viewFromy) fpics = do
createLightMap pdata resDiv wallPoints lightPoints (viewFromx,viewFromy) fpics scPol = do
-- get viewport size so we can reset it later
(vppos,vpsize) <- get viewport
-- set the viewport size to that of the render buffer
@@ -75,6 +76,14 @@ createLightMap pdata resDiv wallPoints lightPoints (viewFromx,viewFromy) fpics =
nSils <- F.foldM (pokeShader $ _lightingLineShadowShader pdata) (concatMap polyToRender fpics)
bindShaderBuffers [_lightingLineShadowShader pdata] [nSils]
-- store foreground geometry and floor into buffer
let addC (xx,yy) = (xx,yy,0)
nsurfVs <- F.foldM (pokeShader (_lightingSurfaceShader pdata))
$ [Render3 $ polyToTris $ map addC $ scPol ]
++ concatMap polyToGeoRender (fpics)
bindShaderBuffers [_lightingSurfaceShader pdata] [nsurfVs]
-- clear buffer to full alpha and furthest depth
-- clearColor is specified in preloadRender
clear [ColorBuffer,DepthBuffer]
@@ -91,7 +100,7 @@ createLightMap pdata resDiv wallPoints lightPoints (viewFromx,viewFromy) fpics =
---- draw foreground elements to set z buffer
--_ <- renderFoldable pdata $ picToLTree (Just 0) (polysToPic fpics)
currentProgram $= Just (_shaderProgram $ _lightingSurfaceShader pdata)
drawShader (_lightingSurfaceShader pdata) nWallLights
drawShader (_lightingSurfaceShader pdata) nsurfVs
-- for each of the lights:
-- stencil out the walls from this light's point of view
@@ -138,7 +147,7 @@ createLightMap pdata resDiv wallPoints lightPoints (viewFromx,viewFromy) fpics =
$= Vector3 x y z
uniform (_shaderCustomUnis (_lightingSurfaceShader pdata) !! 1)
$= Vector2 r lum
drawShader (_lightingSurfaceShader pdata) nWallLights
drawShader (_lightingSurfaceShader pdata) nsurfVs
-- draw wall light "circles"
currentProgram $= Just (_shaderProgram $ _lightingWallShader pdata)