diff --git a/src/Preload/Render.hs b/src/Preload/Render.hs index 1be51330a..fe950dc3c 100644 --- a/src/Preload/Render.hs +++ b/src/Preload/Render.hs @@ -30,8 +30,11 @@ preloadRender = do wsShad <- makeShader "lighting/occlude" [vert,geom,frag] [4] EPoints pokeWPStrat >>= addUniforms ["lightPos"] wlLightShad - <- makeShader "lighting/wall" [vert,geom,frag] [4] EPoints pokeWPStrat + <- makeShaderUsingShaderVAO "lighting/wall" [vert,geom,frag] EPoints wsShad >>= addUniforms ["lightPos","radLum"] +-- wlLightShad +-- <- makeShader "lighting/wall" [vert,geom,frag] [4] EPoints pokeWPStrat +-- >>= addUniforms ["lightPos","radLum"] lightingSurfaceShad <- makeShader "lighting/surface" [vert,frag] [3] ETriangles poke3 >>= addUniforms ["lightPos","radLum"] diff --git a/src/Render.hs b/src/Render.hs index 24b761d22..cbb569fee 100644 --- a/src/Render.hs +++ b/src/Render.hs @@ -69,8 +69,8 @@ createLightMap pdata resDiv wallPoints lightPoints fpics scPol = do viewport $= (vppos, vsize) textureBinding Texture2D $= Just (snd $ _fboLighting pdata) -- store wall and light positions into buffer - nWallLights <- F.foldM (pokeShader $ _lightingWallShader pdata) (map Render22 wallPoints) - bindShaderBuffers [_lightingWallShader pdata] [nWallLights] +-- nWallLights <- F.foldM (pokeShader $ _lightingWallShader pdata) (map Render22 wallPoints) +-- bindShaderBuffers [_lightingWallShader pdata] [nWallLights] nWalls <- F.foldM (pokeShader $ _lightingOccludeShader pdata) (map Render22 wallPoints) bindShaderBuffers [_lightingOccludeShader pdata] [nWalls] -- store foreground silhouette geometry into buffer @@ -89,7 +89,8 @@ createLightMap pdata resDiv wallPoints lightPoints fpics scPol = do cullFace $= Just Back -- draw walls from your point of view in order to set z buffer currentProgram $= Just (_shaderProgram $ _lightingWallShader pdata) - drawShader (_lightingWallShader pdata) nWallLights + --drawShader (_lightingWallShader pdata) nWallLights + drawShader (_lightingWallShader pdata) nWalls --colorMask $= Color4 Disabled Disabled Disabled Disabled --currentProgram $= Just (_shaderProgram $ _lightingOccludeShader pdata) --uniform (head $ _shaderCustomUnis $ _lightingOccludeShader pdata) @@ -151,7 +152,8 @@ createLightMap pdata resDiv wallPoints lightPoints fpics scPol = do $= Vector3 x y z uniform (_shaderCustomUnis (_lightingWallShader pdata) !! 1) $= Vector2 r lum - drawShader (_lightingWallShader pdata) nWallLights + --drawShader (_lightingWallShader pdata) nWallLights + drawShader (_lightingWallShader pdata) nWalls cullFace $= Nothing stencilTest $= Disabled blend $= Disabled diff --git a/src/Shader/Compile.hs b/src/Shader/Compile.hs index 49936b711..d5d4187cb 100644 --- a/src/Shader/Compile.hs +++ b/src/Shader/Compile.hs @@ -1,5 +1,6 @@ module Shader.Compile ( makeShader + , makeShaderUsingShaderVAO , makeSourcedShader , setupVAO ) where @@ -13,6 +14,21 @@ import Control.Monad --import Control.Lens import Graphics.Rendering.OpenGL hiding (Point,translate,scale,imageHeight) +-- | Takes the VAO and poke strategy from another shader +makeShaderUsingShaderVAO + :: String -- ^ First part of the name of the shader + -> [ShaderType] -- ^ Filetype extensions + -> EPrimitiveMode + -> FullShader + -> IO FullShader +makeShaderUsingShaderVAO s shaderlist pm fs = do + prog <- makeSourcedShader s shaderlist + return $ fs + {_shaderProgram = prog + , _shaderDrawPrimitive = pm + , _shaderTexture = Nothing + , _shaderCustomUnis = [] + } {- | Compiles a full shader found within the shader directory. The shader is made up of files begining with the inputted string with extensions .vert, .geom etc.