From cf5a8b3e1b969c54406d9fb84b874aef1811b9c5 Mon Sep 17 00:00:00 2001 From: jgk Date: Sun, 21 Mar 2021 12:50:27 +0100 Subject: [PATCH] Reorganise shaders --- shader/{ => Old}/wall.frag | 0 shader/{ => Old}/wall.geom | 0 shader/{ => Old}/wall.vert | 0 shader/{ => Old}/wallLight.frag | 0 shader/{ => Old}/wallLight.geom | 0 shader/{ => Old}/wallLight.vert | 0 shader/{ => lighting}/lightmapCircle.frag | 0 shader/{ => lighting}/lightmapCircle.geom | 0 shader/{ => lighting}/lightmapCircle.vert | 0 shader/{ => lighting}/lightmapWall.frag | 0 shader/{ => lighting}/lightmapWall.geom | 0 shader/{ => lighting}/lightmapWall.vert | 0 shader/{ => lighting}/wallShadow.frag | 0 shader/{ => lighting}/wallShadow.geom | 0 shader/{ => lighting}/wallShadow.vert | 0 shader/{ => twoD}/arc.frag | 0 shader/{ => twoD}/arc.geom | 0 shader/{ => twoD}/arc.vert | 0 shader/{ => twoD}/basic.frag | 0 shader/{ => twoD}/basic.vert | 0 shader/{ => twoD}/bezierQuad.frag | 0 shader/{ => twoD}/bezierQuad.geom | 0 shader/{ => twoD}/bezierQuad.vert | 0 shader/{ => twoD}/character.frag | 0 shader/{ => twoD}/character.geom | 0 shader/{ => twoD}/character.vert | 0 shader/{ => twoD}/ellipse.frag | 0 shader/{ => twoD}/ellipse.geom | 0 shader/{ => twoD}/ellipse.vert | 0 src/Dodge/Rendering.hs | 52 +++++------------------ src/Picture/Preload.hs | 29 ++++++------- src/Picture/Render.hs | 1 - 32 files changed, 22 insertions(+), 60 deletions(-) rename shader/{ => Old}/wall.frag (100%) rename shader/{ => Old}/wall.geom (100%) rename shader/{ => Old}/wall.vert (100%) rename shader/{ => Old}/wallLight.frag (100%) rename shader/{ => Old}/wallLight.geom (100%) rename shader/{ => Old}/wallLight.vert (100%) rename shader/{ => lighting}/lightmapCircle.frag (100%) rename shader/{ => lighting}/lightmapCircle.geom (100%) rename shader/{ => lighting}/lightmapCircle.vert (100%) rename shader/{ => lighting}/lightmapWall.frag (100%) rename shader/{ => lighting}/lightmapWall.geom (100%) rename shader/{ => lighting}/lightmapWall.vert (100%) rename shader/{ => lighting}/wallShadow.frag (100%) rename shader/{ => lighting}/wallShadow.geom (100%) rename shader/{ => lighting}/wallShadow.vert (100%) rename shader/{ => twoD}/arc.frag (100%) rename shader/{ => twoD}/arc.geom (100%) rename shader/{ => twoD}/arc.vert (100%) rename shader/{ => twoD}/basic.frag (100%) rename shader/{ => twoD}/basic.vert (100%) rename shader/{ => twoD}/bezierQuad.frag (100%) rename shader/{ => twoD}/bezierQuad.geom (100%) rename shader/{ => twoD}/bezierQuad.vert (100%) rename shader/{ => twoD}/character.frag (100%) rename shader/{ => twoD}/character.geom (100%) rename shader/{ => twoD}/character.vert (100%) rename shader/{ => twoD}/ellipse.frag (100%) rename shader/{ => twoD}/ellipse.geom (100%) rename shader/{ => twoD}/ellipse.vert (100%) diff --git a/shader/wall.frag b/shader/Old/wall.frag similarity index 100% rename from shader/wall.frag rename to shader/Old/wall.frag diff --git a/shader/wall.geom b/shader/Old/wall.geom similarity index 100% rename from shader/wall.geom rename to shader/Old/wall.geom diff --git a/shader/wall.vert b/shader/Old/wall.vert similarity index 100% rename from shader/wall.vert rename to shader/Old/wall.vert diff --git a/shader/wallLight.frag b/shader/Old/wallLight.frag similarity index 100% rename from shader/wallLight.frag rename to shader/Old/wallLight.frag diff --git a/shader/wallLight.geom b/shader/Old/wallLight.geom similarity index 100% rename from shader/wallLight.geom rename to shader/Old/wallLight.geom diff --git a/shader/wallLight.vert b/shader/Old/wallLight.vert similarity index 100% rename from shader/wallLight.vert rename to shader/Old/wallLight.vert diff --git a/shader/lightmapCircle.frag b/shader/lighting/lightmapCircle.frag similarity index 100% rename from shader/lightmapCircle.frag rename to shader/lighting/lightmapCircle.frag diff --git a/shader/lightmapCircle.geom b/shader/lighting/lightmapCircle.geom similarity index 100% rename from shader/lightmapCircle.geom rename to shader/lighting/lightmapCircle.geom diff --git a/shader/lightmapCircle.vert b/shader/lighting/lightmapCircle.vert similarity index 100% rename from shader/lightmapCircle.vert rename to shader/lighting/lightmapCircle.vert diff --git a/shader/lightmapWall.frag b/shader/lighting/lightmapWall.frag similarity index 100% rename from shader/lightmapWall.frag rename to shader/lighting/lightmapWall.frag diff --git a/shader/lightmapWall.geom b/shader/lighting/lightmapWall.geom similarity index 100% rename from shader/lightmapWall.geom rename to shader/lighting/lightmapWall.geom diff --git a/shader/lightmapWall.vert b/shader/lighting/lightmapWall.vert similarity index 100% rename from shader/lightmapWall.vert rename to shader/lighting/lightmapWall.vert diff --git a/shader/wallShadow.frag b/shader/lighting/wallShadow.frag similarity index 100% rename from shader/wallShadow.frag rename to shader/lighting/wallShadow.frag diff --git a/shader/wallShadow.geom b/shader/lighting/wallShadow.geom similarity index 100% rename from shader/wallShadow.geom rename to shader/lighting/wallShadow.geom diff --git a/shader/wallShadow.vert b/shader/lighting/wallShadow.vert similarity index 100% rename from shader/wallShadow.vert rename to shader/lighting/wallShadow.vert diff --git a/shader/arc.frag b/shader/twoD/arc.frag similarity index 100% rename from shader/arc.frag rename to shader/twoD/arc.frag diff --git a/shader/arc.geom b/shader/twoD/arc.geom similarity index 100% rename from shader/arc.geom rename to shader/twoD/arc.geom diff --git a/shader/arc.vert b/shader/twoD/arc.vert similarity index 100% rename from shader/arc.vert rename to shader/twoD/arc.vert diff --git a/shader/basic.frag b/shader/twoD/basic.frag similarity index 100% rename from shader/basic.frag rename to shader/twoD/basic.frag diff --git a/shader/basic.vert b/shader/twoD/basic.vert similarity index 100% rename from shader/basic.vert rename to shader/twoD/basic.vert diff --git a/shader/bezierQuad.frag b/shader/twoD/bezierQuad.frag similarity index 100% rename from shader/bezierQuad.frag rename to shader/twoD/bezierQuad.frag diff --git a/shader/bezierQuad.geom b/shader/twoD/bezierQuad.geom similarity index 100% rename from shader/bezierQuad.geom rename to shader/twoD/bezierQuad.geom diff --git a/shader/bezierQuad.vert b/shader/twoD/bezierQuad.vert similarity index 100% rename from shader/bezierQuad.vert rename to shader/twoD/bezierQuad.vert diff --git a/shader/character.frag b/shader/twoD/character.frag similarity index 100% rename from shader/character.frag rename to shader/twoD/character.frag diff --git a/shader/character.geom b/shader/twoD/character.geom similarity index 100% rename from shader/character.geom rename to shader/twoD/character.geom diff --git a/shader/character.vert b/shader/twoD/character.vert similarity index 100% rename from shader/character.vert rename to shader/twoD/character.vert diff --git a/shader/ellipse.frag b/shader/twoD/ellipse.frag similarity index 100% rename from shader/ellipse.frag rename to shader/twoD/ellipse.frag diff --git a/shader/ellipse.geom b/shader/twoD/ellipse.geom similarity index 100% rename from shader/ellipse.geom rename to shader/twoD/ellipse.geom diff --git a/shader/ellipse.vert b/shader/twoD/ellipse.vert similarity index 100% rename from shader/ellipse.vert rename to shader/twoD/ellipse.vert diff --git a/src/Dodge/Rendering.hs b/src/Dodge/Rendering.hs index 47a3be055..ad0963400 100644 --- a/src/Dodge/Rendering.hs +++ b/src/Dodge/Rendering.hs @@ -71,9 +71,7 @@ worldPictures w , afterPtPicts' , wlPicts' , wlPicts --- , wallShadows , smokeShadows --- , itLabels , ppLabels , btLabels , testPic w @@ -87,11 +85,10 @@ worldPictures w ppPicts = map ppDraw (IM.elems (_pressPlates w)) crPicts = map crDraw $ IM.elems $ _creatures w clPicts = map clDraw $ IM.elems $ _clouds w - wallShadows = map (drawWallShadow w) $ wallShadowsToDraw w smokeShadows = map (drawSmokeShadow w) $ _smoke w - wlPicts = map drawWall (wallsToDraw w) - wlPicts' = map (drawWall' w) (wallsToDraw w) - itFloorPicts = map (drawItem) (IM.elems (_floorItems w)) + wlPicts = map drawWallFloor (wallFloorsToDraw w) + wlPicts' = map (drawWall w) (wallShadowsToDraw w) + itFloorPicts = map drawItem (IM.elems (_floorItems w)) yourPos = _crPos $ you w yourRot = _crDir $ you w yourRad = _crRad $ you w @@ -199,8 +196,8 @@ mapWall wl = (x:y:_) = _wlLine wl c = _wlColor wl -wallsToDraw :: World -> [Wall] -wallsToDraw w = filter isVisible $ IM.elems $ wallsOnScreen w +wallFloorsToDraw :: World -> [Wall] +wallFloorsToDraw w = filter isVisible $ IM.elems $ wallsOnScreen w where onScreen wall = lineOnScreen w (_wlLine wall) isVisible wl | wl ^? blVisible == Just False = False | otherwise = onScreen wl @@ -245,11 +242,10 @@ drawSmokeShadow w sm@(Smoke {_smPos = p, _smRad = r', _smColor = c, _smPs = ps, trap' p' = line [pa' p', pb' p', pbo' p', pao' p',pa' p'] semiCirc' p' = uncurry translate p' $ rotate (0 - (a p')) $ arcSolid 0 180 r' -drawWall :: Wall -> Drawing -drawWall (Wall {_wlIsSeeThrough = False, _wlLine = ps, _wlColor = c}) +drawWallFloor :: Wall -> Drawing +drawWallFloor (Wall {_wlIsSeeThrough = False, _wlLine = ps, _wlColor = c}) = onLayerL [levLayer WlLayer, 2] $ color c $ polygon $ ps -drawWall wl = case _wlDraw wl of --- Nothing -> onLayerL [levLayer WlLayer, layer2] $ color c $ polygon $ _wlLine wl +drawWallFloor wl = case _wlDraw wl of Nothing -> onLayerL [levLayer WlLayer, layer2] $ color c $ polygon [x,x +.+ n2,y +.+ n2, y] Just d -> d wl where @@ -261,7 +257,6 @@ drawWall wl = case _wlDraw wl of layer2 | _wlIsSeeThrough wl = 0 | isJust $ wl ^? doorMech = 1 | otherwise = 2 --- wallOrdering wl = (not $ _wlIsSeeThrough wl, not $ isJust $ wl ^? doorMech) errorNormalizeVDR :: Point2 -> Point2 errorNormalizeVDR (0,0) = error $ "problem with function: errorNormalizeVDR in DodgeRendering" @@ -312,8 +307,8 @@ lineOnScreen w (p1:p2:_) = errorPointInPolygon 8 p1 sp || errorPointInPolygon 9 where sp = screenPolygon w sps = zip sp (tail sp ++ [head sp]) -drawWall' :: World -> Wall -> Drawing -drawWall' w wall +drawWall :: World -> Wall -> Drawing +drawWall w wall | isRHS sightFrom x y = blank | otherwise = colorAndLayer $ polygon $ points where @@ -341,33 +336,6 @@ drawWall' w wall wallBase | _wlIsSeeThrough wall = polygon $ _wlLine wall | otherwise = blank -drawWallShadow :: World -> Wall -> Drawing -drawWallShadow w wall - | isRHS sightFrom x y = blank - | otherwise = colorAndLayer $ polygon $ points - where - colorAndLayer | _wlIsSeeThrough wall = setLayer 2 - . onLayerL [levLayer ShadowLayer] - . color (withAlpha 0.2 $ _wlColor wall) - | otherwise = setLayer 1 - . onLayerL [levLayer ShadowLayer,2] - . color black - (x:y:_) = _wlLine wall - ps = linePointsBetween x y - ds = map (\p -> safeNormalizeV (p -.- sightFrom)) ps - p's = zipWith (\d x -> (15 *.* d) +.+ x) ds ps - sightFrom = _cameraCenter w - corns = screenPolygon w - borders = filter g $ zip corns (tail corns ++ [head corns]) - g (a,b) = isLHS a b sightFrom - borderps = mapMaybe f borders ++ mapMaybe f' borders ++ shadowedCorners - coneTop = nub $ concatMap (\(a,b) -> [a,b]) $ borders - shadowedCorners = filter isShadowed coneTop - isShadowed p = isLHS sightFrom x p && isRHS sightFrom y p - f (bpa,bpb) = intersectSegLineFrom' bpa bpb x (head p's) - f' (bpa,bpb) = intersectSegLineFrom' bpa bpb y (last p's) - points = orderPolygon (borderps ++ p's) - linePointsBetween :: Point2 -> Point2 -> [Point2] linePointsBetween p p' | d > 99 = map (\m -> p +.+ fromIntegral m *.* p'') [0..n-1] ++ [p'] | otherwise = [p,p'] diff --git a/src/Picture/Preload.hs b/src/Picture/Preload.hs index 3d066fbc9..d57b62b32 100644 --- a/src/Picture/Preload.hs +++ b/src/Picture/Preload.hs @@ -26,7 +26,7 @@ data RenderData = RenderData , _wallLightShader :: FullShader (Point2,Point2) , _backgroundShader :: FullShader (Point2,Point2,Point2,Point2) , _fullscreenShader :: FullShader () - , _wallShader :: FullShader (Point3,Point4) +-- , _wallShader :: FullShader (Point3,Point4) , _listShaders :: [FullShader RenderType] , _dummyVBO :: BufferObject , _dummyPtr :: Ptr Float @@ -39,32 +39,31 @@ makeLenses ''RenderData preloadRender :: IO RenderData preloadRender = do -- compile shader programs - lsShad <- makeShader "lightmapCircle" [vert,geom,frag] [(0,4)] Points (return . return . flat4) + lsShad <- makeShader "lighting/lightmapCircle" [vert,geom,frag] [(0,4)] Points (return . return . flat4) -- fcs <- makeSourcedShader "lightmapCircle" [VertexShader,GeometryShader,FragmentShader] bgShad <- makeTextureShader "background" [vert,geom,frag] [(0,4),(1,2)] Points pokeBGStrat "data/texture/smudgedDirt.png" - wsShad <- makeShaderCustomUnis "wallShadow" [vert,geom,frag] [(0,4)] Points pokeWPStrat + wsShad <- makeShaderCustomUnis "lighting/wallShadow" [vert,geom,frag] [(0,4)] Points pokeWPStrat ["lightPos","perpMat","facesToDraw"] wlLightShad - <- makeShaderCustomUnis "lightmapWall" [vert,geom,frag] [(0,4)] Points pokeWPStrat + <- makeShaderCustomUnis "lighting/lightmapWall" [vert,geom,frag] [(0,4)] Points pokeWPStrat ["lightPos","perpMat","radLum"] - wlShad <- makeShader "wall" [vert,frag] [(0,3),(1,4)] TriangleStrip pokeWlStrat +-- wlShad <- makeShader "wall" [vert,frag] [(0,3),(1,4)] TriangleStrip pokeWlStrat - bslist <- makeShader "basic" [vert,frag] [(0,3),(1,4)] Triangles pokeTriStrat - lslist <- makeShader "basic" [vert,frag] [(0,3),(1,4)] Lines pokeLineStrat - aslist <- makeShader "arc" [vert,geom,frag] [(0,3),(1,4),(2,4)] Points pokeArcStrat - eslist <- makeShader "ellipse" [vert,geom,frag] [(0,3),(1,4)] Triangles pokeEllStrat - cslist <- makeTextureShader "character" [vert,geom,frag] + bslist <- makeShader "twoD/basic" [vert,frag] [(0,3),(1,4)] Triangles pokeTriStrat + lslist <- makeShader "twoD/basic" [vert,frag] [(0,3),(1,4)] Lines pokeLineStrat + aslist <- makeShader "twoD/arc" [vert,geom,frag] [(0,3),(1,4),(2,4)] Points pokeArcStrat + eslist <- makeShader "twoD/ellipse" [vert,geom,frag] [(0,3),(1,4)] Triangles pokeEllStrat + bezierQuadShader <- makeShader + "twoD/bezierQuad" [vert,frag] [(0,3),(1,4),(2,4)] TriangleStrip pokeBezQStrat + cslist <- makeTextureShader "twoD/character" [vert,geom,frag] [(0,3),(1,4),(2,3)] Points pokeCharStrat "data/texture/charMap.png" - bezierQuadShader - <- makeShader "bezierQuad" [vert,frag] [(0,3),(1,4),(2,4)] TriangleStrip pokeBezQStrat - fsShad <- makeShader "fullscreen" [vert,frag] [(0,2),(1,2)] TriangleStrip (const [[[-1, 1],[0,1]] ,[[ 1, 1],[1,1]] @@ -97,7 +96,6 @@ preloadRender = do , _lightSourceShader = lsShad , _wallShadowShader = wsShad , _wallLightShader = wlLightShad - , _wallShader = wlShad , _backgroundShader = bgShad , _fullscreenShader = fsShad , _spareFBO = fbo @@ -150,9 +148,6 @@ pokeTriStrat :: RenderType -> [[[Float]]] pokeTriStrat (RenderPoly vs) = fmap (\((x,y,z),(r,g,b,a)) -> [[x,y,z],[r,g,b,a]]) vs pokeTriStrat _ = [] -pokeWlStrat :: (Point3,Point4) -> [[[Float]]] -pokeWlStrat ((x,y,z),(r,g,b,a)) = [[[x,y,z],[r,g,b,a]]] - pokeCharStrat (RenderText vs) = fmap (\(a,b,c) -> flat3 (flat3 a, flat4 b, flat3 c)) vs pokeCharStrat _ = [] diff --git a/src/Picture/Render.hs b/src/Picture/Render.hs index 3892713af..106b19b9c 100644 --- a/src/Picture/Render.hs +++ b/src/Picture/Render.hs @@ -48,7 +48,6 @@ renderPicture' pdata rot zoom (tranx,trany) (winx,winy) wallPoints lightPoints ( (extractProgAndUnis $ _lightSourceShader pdata) : (extractProgAndUnis $ _wallShadowShader pdata) : (extractProgAndUnis $ _wallLightShader pdata) - : (extractProgAndUnis $ _wallShader pdata) : (extractProgAndUnis $ _backgroundShader pdata) : (map extractProgAndUnis $ _listShaders pdata) )