Implement something like deferred lighting
This commit is contained in:
+36
-16
@@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user