Implement something like deferred lighting

This commit is contained in:
2021-09-01 00:37:07 +01:00
parent 2d139adc8f
commit 1c587d4b9a
13 changed files with 90 additions and 71 deletions
+36 -16
View File
@@ -95,28 +95,41 @@ createLightMap pdata lightPoints nWalls nSils nsurfVs = do
drawShader (_lightingCapShader pdata) (nSils - 6)
-- depthClamp $= Disabled
-- use Lequal to redraw surfaces above already drawn surfaces
depthFunc $= Just Lequal
-- draw geometry surfaces
--cullFace $= Just Back
depthFunc $= Just Always
cullFace $= Nothing
--colorMask $= Color4 Disabled Disabled Disabled Enabled
bindTO $ snd $ snd $ _fboBase pdata
colorMask $= Color4 Enabled Enabled Enabled Enabled
stencilOp $= (OpKeep,OpKeep,OpKeep)
stencilFunc $= (Equal, 0, 255)
currentProgram $= Just (_shaderProgram $ _lightingSurfaceShader pdata)
uniform (head $ _shaderCustomUnis $ _lightingSurfaceShader pdata)
currentProgram $= Just (_shaderProgram $ _fullLightingShader pdata)
uniform (head $ _shaderCustomUnis $ _fullLightingShader pdata)
$= Vector3 x y z
uniform (_shaderCustomUnis (_lightingSurfaceShader pdata) !! 1)
uniform (_shaderCustomUnis (_fullLightingShader pdata) !! 1)
$= Vector4 r g b rad
drawShader (_lightingSurfaceShader pdata) nsurfVs
-- draw wall light "circles"
currentProgram $= Just (_shaderProgram $ _lightingWallShader pdata)
uniform (head $ _shaderCustomUnis $ _lightingWallShader pdata)
$= Vector3 x y z
uniform (_shaderCustomUnis (_lightingWallShader pdata) !! 1)
$= Vector4 r g b rad
drawShader (_lightingWallShader pdata) nWalls
drawShader (_fullLightingShader pdata) 4
-- -- use Lequal to redraw surfaces above already drawn surfaces
-- depthFunc $= Just Lequal
-- -- draw geometry surfaces
-- --cullFace $= Just Back
-- cullFace $= Nothing
-- --colorMask $= Color4 Disabled Disabled Disabled Enabled
-- colorMask $= Color4 Enabled Enabled Enabled Enabled
-- stencilOp $= (OpKeep,OpKeep,OpKeep)
-- stencilFunc $= (Equal, 0, 255)
-- currentProgram $= Just (_shaderProgram $ _lightingSurfaceShader pdata)
-- uniform (head $ _shaderCustomUnis $ _lightingSurfaceShader pdata)
-- $= Vector3 x y z
-- uniform (_shaderCustomUnis (_lightingSurfaceShader pdata) !! 1)
-- $= Vector4 r g b rad
-- drawShader (_lightingSurfaceShader pdata) nsurfVs
-- -- draw wall light "circles"
-- currentProgram $= Just (_shaderProgram $ _lightingWallShader pdata)
-- uniform (head $ _shaderCustomUnis $ _lightingWallShader pdata)
-- $= Vector3 x y z
-- uniform (_shaderCustomUnis (_lightingWallShader pdata) !! 1)
-- $= Vector4 r g b rad
-- drawShader (_lightingWallShader pdata) nWalls
cullFace $= Nothing
stencilTest $= Disabled
{- | Blur between two framebuffers.
@@ -211,3 +224,10 @@ pokeFourOff ptr n (x,y,z,w) = do
pokeElemOff ptr (4*n+1) y
pokeElemOff ptr (4*n+2) z
pokeElemOff ptr (4*n+3) w
bindTO :: TextureObject -> IO ()
bindTO t = textureBinding Texture2D $= Just t
bindFBO :: FramebufferObject -> IO ()
bindFBO fb = bindFramebuffer Framebuffer $= fb