Implement textured walls
This commit is contained in:
@@ -25,8 +25,8 @@ if (isLHS (p1.xy - lightPos, p2.xy - lightPos) < 0)
|
|||||||
lum = radLum.y;
|
lum = radLum.y;
|
||||||
float rad = radLum.x;
|
float rad = radLum.x;
|
||||||
|
|
||||||
vec4 p3 = vec4 (p1.xy,-0.2,1);
|
vec4 p3 = vec4 (p1.xy,-0.5,1);
|
||||||
vec4 p4 = vec4 (p2.xy,-0.2,1);
|
vec4 p4 = vec4 (p2.xy,-0.5,1);
|
||||||
|
|
||||||
vec2 d1 = p1.xy - lightPos;
|
vec2 d1 = p1.xy - lightPos;
|
||||||
vec2 d2 = p2.xy - lightPos;
|
vec2 d2 = p2.xy - lightPos;
|
||||||
|
|||||||
@@ -66,7 +66,7 @@ worldPictures w
|
|||||||
, ptPicts
|
, ptPicts
|
||||||
, ptPicts'
|
, ptPicts'
|
||||||
, afterPtPicts'
|
, afterPtPicts'
|
||||||
, wlPicts'
|
-- , wlPicts'
|
||||||
, wlPicts
|
, wlPicts
|
||||||
, smokeShadows
|
, smokeShadows
|
||||||
, ppLabels
|
, ppLabels
|
||||||
|
|||||||
@@ -69,7 +69,7 @@ preloadRender = do
|
|||||||
|
|
||||||
-- wallShader
|
-- wallShader
|
||||||
wlShad <- makeShader "wallFace" [vert,geom,frag] [(0,4),(1,4)] Points pokeWPColStrat
|
wlShad <- makeShader "wallFace" [vert,geom,frag] [(0,4),(1,4)] Points pokeWPColStrat
|
||||||
>>= addTexture "data/texture/smudgedDirt.png"
|
>>= addTexture "data/texture/grayscaleDirt.png"
|
||||||
>>= addUniforms ["perpMat"]
|
>>= addUniforms ["perpMat"]
|
||||||
|
|
||||||
-- framebuffer for lighting
|
-- framebuffer for lighting
|
||||||
|
|||||||
+21
-2
@@ -60,15 +60,34 @@ renderPicture' pdata rot zoom trans@(tranx,trany) wins@(winx,winy) wallPointsCol
|
|||||||
createLightMap pdata rot zoom trans wins wallPoints lightPoints viewFroms pmat
|
createLightMap pdata rot zoom trans wins wallPoints lightPoints viewFroms pmat
|
||||||
ticksAfterLighting <- SDL.ticks
|
ticksAfterLighting <- SDL.ticks
|
||||||
renderBackground pdata rot zoom trans wins
|
renderBackground pdata rot zoom trans wins
|
||||||
|
|
||||||
|
depthFunc $= Just Lequal
|
||||||
|
|
||||||
|
renderFoldable pdata $ picToLTree (Just 0) pic
|
||||||
|
|
||||||
renderWalls pdata wallPointsCol pmat
|
renderWalls pdata wallPointsCol pmat
|
||||||
renderPicture pdata pic
|
|
||||||
|
-- reset blend so that light map doesn't apply
|
||||||
|
blendFunc $= (SrcAlpha,OneMinusSrcAlpha)
|
||||||
|
renderFoldable pdata $ picToLTree (Just 1) pic
|
||||||
|
|
||||||
|
-- set drawing for on top
|
||||||
|
blendFuncSeparate $= ((SrcAlphaSaturate, OneMinusSrcAlpha), (Zero,One))
|
||||||
|
|
||||||
|
renderFoldable pdata $ picToLTree (Just 2) pic
|
||||||
|
|
||||||
|
resetShaderUniforms (map extractProgAndUnis $ _listShaders pdata)
|
||||||
endTicks <- SDL.ticks
|
endTicks <- SDL.ticks
|
||||||
return (ticksAfterLighting, endTicks - startTicks)
|
return (ticksAfterLighting, endTicks - startTicks)
|
||||||
|
|
||||||
renderWalls :: RenderData -> [((Point2,Point2),Point4)] -> GLmatrix GLfloat -> IO ()
|
renderWalls :: RenderData -> [((Point2,Point2),Point4)] -> GLmatrix GLfloat -> IO ()
|
||||||
renderWalls pdata wps pmat = do
|
renderWalls pdata wps pmat = do
|
||||||
n <- F.foldM (pokeShader $ _wallFaceShader pdata) wps
|
n <- F.foldM (pokeShader $ _wallFaceShader pdata) wps
|
||||||
return ()
|
bindShaderBuffers [_wallFaceShader pdata] [n]
|
||||||
|
currentProgram $= Just (_shaderProgram $ _wallFaceShader pdata)
|
||||||
|
uniform ( (fromJust $ _shaderCustomUnis $ _wallFaceShader pdata) !! 0)
|
||||||
|
$= pmat
|
||||||
|
drawShader (_wallFaceShader pdata) n
|
||||||
|
|
||||||
createLightMap :: RenderData -> Float -> Float -> (Float,Float) -> (Float,Float) ->
|
createLightMap :: RenderData -> Float -> Float -> (Float,Float) -> (Float,Float) ->
|
||||||
[(Point2,Point2)] -> [Point4] ->
|
[(Point2,Point2)] -> [Point4] ->
|
||||||
|
|||||||
Reference in New Issue
Block a user