From e6c76da6b3c4e5de1f69626388ba9895ce8105d9 Mon Sep 17 00:00:00 2001 From: jgk Date: Sun, 21 Mar 2021 20:09:11 +0100 Subject: [PATCH] Implement textured walls --- shader/lighting/lightmapWall.geom | 4 ++-- src/Dodge/Rendering.hs | 2 +- src/Picture/Preload.hs | 2 +- src/Picture/Render.hs | 23 +++++++++++++++++++++-- 4 files changed, 25 insertions(+), 6 deletions(-) diff --git a/shader/lighting/lightmapWall.geom b/shader/lighting/lightmapWall.geom index ca1cf858a..7027ee0c4 100644 --- a/shader/lighting/lightmapWall.geom +++ b/shader/lighting/lightmapWall.geom @@ -25,8 +25,8 @@ if (isLHS (p1.xy - lightPos, p2.xy - lightPos) < 0) lum = radLum.y; float rad = radLum.x; - vec4 p3 = vec4 (p1.xy,-0.2,1); - vec4 p4 = vec4 (p2.xy,-0.2,1); + vec4 p3 = vec4 (p1.xy,-0.5,1); + vec4 p4 = vec4 (p2.xy,-0.5,1); vec2 d1 = p1.xy - lightPos; vec2 d2 = p2.xy - lightPos; diff --git a/src/Dodge/Rendering.hs b/src/Dodge/Rendering.hs index 54649daf9..28ec2ab57 100644 --- a/src/Dodge/Rendering.hs +++ b/src/Dodge/Rendering.hs @@ -66,7 +66,7 @@ worldPictures w , ptPicts , ptPicts' , afterPtPicts' - , wlPicts' +-- , wlPicts' , wlPicts , smokeShadows , ppLabels diff --git a/src/Picture/Preload.hs b/src/Picture/Preload.hs index b23f9fa33..7bfc118d5 100644 --- a/src/Picture/Preload.hs +++ b/src/Picture/Preload.hs @@ -69,7 +69,7 @@ preloadRender = do -- wallShader wlShad <- makeShader "wallFace" [vert,geom,frag] [(0,4),(1,4)] Points pokeWPColStrat - >>= addTexture "data/texture/smudgedDirt.png" + >>= addTexture "data/texture/grayscaleDirt.png" >>= addUniforms ["perpMat"] -- framebuffer for lighting diff --git a/src/Picture/Render.hs b/src/Picture/Render.hs index 6cf0980af..e59e9cdd4 100644 --- a/src/Picture/Render.hs +++ b/src/Picture/Render.hs @@ -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 ticksAfterLighting <- SDL.ticks renderBackground pdata rot zoom trans wins + + depthFunc $= Just Lequal + + renderFoldable pdata $ picToLTree (Just 0) pic + 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 return (ticksAfterLighting, endTicks - startTicks) renderWalls :: RenderData -> [((Point2,Point2),Point4)] -> GLmatrix GLfloat -> IO () renderWalls pdata wps pmat = do 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) -> [(Point2,Point2)] -> [Point4] ->