From 9bdc6fddd71ad8683abf57b50fec4f5558b11dc3 Mon Sep 17 00:00:00 2001 From: jgk Date: Fri, 12 Mar 2021 01:22:10 +0100 Subject: [PATCH] Fix arc rendering bug (make vertex attribs correct size) --- moduleFlow.dia | Bin 0 -> 6378 bytes shader/arc.frag | 1 - shader/arc.geom | 7 +-- shader/basicTexture.frag | 15 ------ shader/basicTexture.geom | 36 ------------- shader/basicTexture.vert | 20 ------- shader/circle.frag | 18 ------- shader/circle.geom | 33 ------------ shader/circle.vert | 19 ------- shader/ellipse.frag | 2 - shader/ellipse.geom | 5 -- shader/fadeCircle.frag | 16 ------ shader/fadeCircle.geom | 30 ----------- shader/fadeCircle.vert | 15 ------ shader/fullFadeCircle.frag | 12 ----- shader/fullFadeCircle.geom | 30 ----------- shader/fullFadeCircle.vert | 12 ----- src/Dodge/Rooms.hs | 2 +- src/Dodge/Weapons.hs | 6 +-- src/Picture/Preload.hs | 105 +++++++++++++++++++------------------ src/Picture/Tree.hs | 26 --------- 21 files changed, 63 insertions(+), 347 deletions(-) create mode 100644 moduleFlow.dia delete mode 100644 shader/basicTexture.frag delete mode 100644 shader/basicTexture.geom delete mode 100644 shader/basicTexture.vert delete mode 100644 shader/circle.frag delete mode 100644 shader/circle.geom delete mode 100644 shader/circle.vert delete mode 100644 shader/fadeCircle.frag delete mode 100644 shader/fadeCircle.geom delete mode 100644 shader/fadeCircle.vert delete mode 100644 shader/fullFadeCircle.frag delete mode 100644 shader/fullFadeCircle.geom delete mode 100644 shader/fullFadeCircle.vert diff --git a/moduleFlow.dia b/moduleFlow.dia new file mode 100644 index 0000000000000000000000000000000000000000..b42527724d12c7a9ba937f407fe3221edae345f4 GIT binary patch literal 6378 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 literal 0 HcmV?d00001 diff --git a/shader/arc.frag b/shader/arc.frag index d906816a5..a6fcfcc82 100644 --- a/shader/arc.frag +++ b/shader/arc.frag @@ -29,7 +29,6 @@ void main() float onArcTest = max(dTest,aTest); - //gl_FragDepth = max(gl_FragCoord.z , step(gRadOut/2,distance(pos,cenPosT))); gl_FragDepth = max(gl_FragCoord.z , onArcTest); fColor = gColor; } diff --git a/shader/arc.geom b/shader/arc.geom index fb7101f8e..3d2887290 100644 --- a/shader/arc.geom +++ b/shader/arc.geom @@ -17,9 +17,10 @@ void main() angles = vparams[0].xy; vec3 cenPos = gl_in[0].gl_Position.xyz; gColor = vColor[0]; - float gWdth = vparams[0].w * 0.5; - gRadOut = (vparams[0].z + gWdth) * zoom * 2; - gRadIn = (vparams[0].z - gWdth) * zoom * 2; + float width = vparams[0].w * 0.5; + float rad = vparams[0].z; + gRadOut = (rad + width) * zoom * 2; + gRadIn = (rad - width) * zoom * 2; cenPosT = vec2 ( (cenPos.x + 1) * 0.5 * winSize.x , (cenPos.y + 1) * 0.5 * winSize.y); diff --git a/shader/basicTexture.frag b/shader/basicTexture.frag deleted file mode 100644 index a1cefb0e9..000000000 --- a/shader/basicTexture.frag +++ /dev/null @@ -1,15 +0,0 @@ -#version 430 core -out vec4 FragColor; - -in vec4 gColor; -in vec2 gTex; - -uniform sampler2D aTexture; - -void main() -{ - FragColor = texture(aTexture, gTex) * gColor; -// FragColor = texture(aTexture, vTexCoord); -// FragColor = gColor; -// FragColor = vec4 (1,1,1,1); -} diff --git a/shader/basicTexture.geom b/shader/basicTexture.geom deleted file mode 100644 index a3e1851e4..000000000 --- a/shader/basicTexture.geom +++ /dev/null @@ -1,36 +0,0 @@ -#version 430 core -layout (points) in; -layout (triangle_strip, max_vertices = 4) out; -in vec4 vColor []; -in vec2 vTexCoord []; -out vec4 gColor; -out vec2 gTex; -void main() -{ - vec3 cenPos = gl_in[0].gl_Position.xyz; - float size = vTexCoord[0].y; - //float size = 0.05; - gColor = vColor[0]; - float texPos = vTexCoord[0].x; - - gl_Position = vec4 (cenPos.x - size*0.5, cenPos.y - size, cenPos.z , 1); - //gl_Position = vec4 (0, 0 , 5 , 1); - gTex = vec2 (texPos*0.0078125, 1); - EmitVertex(); - gl_Position = vec4 (cenPos.x - size*0.5, cenPos.y + size, cenPos.z , 1); - //gl_Position = vec4 (0, 0.5 , 5 , 1); - gTex = vec2 (texPos*0.0078125, 0); - EmitVertex(); - gl_Position = vec4 (cenPos.x + size*0.5, cenPos.y - size, cenPos.z , 1); - //gl_Position = vec4 (0.5, 0.5 , -5 , 1); - gTex = vec2 ((texPos+1)*0.0078125, 1); - EmitVertex(); - gl_Position = vec4 (cenPos.x + size*0.5, cenPos.y + size, cenPos.z , 1); - gTex = vec2 ((texPos+1)*0.0078125, 0); - //gl_Position = vec4 (0.5, 0 , -5 , 1); - EmitVertex(); - - - EndPrimitive(); - -} diff --git a/shader/basicTexture.vert b/shader/basicTexture.vert deleted file mode 100644 index cc19a07cd..000000000 --- a/shader/basicTexture.vert +++ /dev/null @@ -1,20 +0,0 @@ -#version 430 core -layout (location = 0) in vec3 aPos; -layout (location = 1) in vec4 aColor; -layout (location = 2) in vec2 aTexCoord; - -uniform vec2 winSize; -uniform float zoom; -uniform vec2 translation; -uniform float rotation; - -out vec4 vColor; -out vec2 vTexCoord; - -void main() -{ - gl_Position = vec4(aPos, 1.0); - vColor = aColor; - vTexCoord = aTexCoord; -} - diff --git a/shader/circle.frag b/shader/circle.frag deleted file mode 100644 index 1396eaf73..000000000 --- a/shader/circle.frag +++ /dev/null @@ -1,18 +0,0 @@ -#version 430 core -in vec4 gColor; -in vec2 cenPosT; -in float gRad; -out vec4 fColor; -out float gl_FragDepth; - -void main() -{ - vec2 pos = gl_FragCoord.xy; - // fColor = vec4( gColor.xyz , 0 ); - // fColor = vec4( gColor.xyz , 1 - step(distance(pos,cenPos.xy),gRad) ); - // fColor = vec4( gColor.xyz , distance(pos,cenPos.xy)/gRad ); -// fColor = vec4( gColor.rgb, gColor.a * (1-step(gRad/2,distance(pos,cenPosT))) ); - gl_FragDepth = max(gl_FragCoord.z , step(gRad/2,distance(pos,cenPosT))); - fColor = gColor; -} -//note it is the fragdepth that stops this from being square diff --git a/shader/circle.geom b/shader/circle.geom deleted file mode 100644 index 2096c3d45..000000000 --- a/shader/circle.geom +++ /dev/null @@ -1,33 +0,0 @@ -#version 430 core -layout (points) in; -layout (triangle_strip, max_vertices = 4) out; -in vec4 vColor []; -in float vRad []; -out vec4 gColor; -out float gRad; -out vec2 cenPosT; - -uniform vec2 winSize; -uniform float zoom; - -void main() -{ - vec3 cenPos = gl_in[0].gl_Position.xyz; - //cenPos = vec3 (0.5,0,0); - gColor = vColor[0]; - gRad = vRad[0] * zoom * 2; -// gRad = 0.2; - - cenPosT = vec2 ( (cenPos.x + 1) * 0.5 * winSize.x , (cenPos.y + 1) * 0.5 * winSize.y); - - gl_Position = vec4 (cenPos.x + gRad/winSize.x, cenPos.y + gRad/winSize.y, cenPos.z , 1); - EmitVertex(); - gl_Position = vec4 (cenPos.x - gRad/winSize.x, cenPos.y + gRad/winSize.y, cenPos.z , 1); - EmitVertex(); - gl_Position = vec4 (cenPos.x + gRad/winSize.x, cenPos.y - gRad/winSize.y, cenPos.z , 1); - EmitVertex(); - gl_Position = vec4 (cenPos.x - gRad/winSize.x, cenPos.y - gRad/winSize.y, cenPos.z , 1); - EmitVertex(); - - EndPrimitive(); -} diff --git a/shader/circle.vert b/shader/circle.vert deleted file mode 100644 index e7e584a65..000000000 --- a/shader/circle.vert +++ /dev/null @@ -1,19 +0,0 @@ -#version 430 core -layout (location = 0) in vec3 position; -layout (location = 1) in vec4 color; -layout (location = 2) in float rad; -out vec4 vColor; -out float vRad; - -uniform vec2 winSize; -uniform float zoom; -uniform vec2 translation; -uniform float rotation; -uniform mat4 worldMat; - -void main() -{ - gl_Position = worldMat * vec4(position,1); - vColor = color; - vRad = rad; -} diff --git a/shader/ellipse.frag b/shader/ellipse.frag index 9f2073c76..5bd7df636 100644 --- a/shader/ellipse.frag +++ b/shader/ellipse.frag @@ -4,7 +4,6 @@ in vec4 gColorE; in vec2 gBoundingBox; out vec4 fColor; -//out float gl_FragDepth; void main() { @@ -12,4 +11,3 @@ void main() if ( d > 1) { discard; } fColor = mix (gColorE , gColorC, d); } -//note it is the fragdepth that stops this from being square diff --git a/shader/ellipse.geom b/shader/ellipse.geom index 9deea4868..07ed35f49 100644 --- a/shader/ellipse.geom +++ b/shader/ellipse.geom @@ -6,9 +6,6 @@ out vec4 gColorC; out vec4 gColorE; out vec2 gBoundingBox; -uniform vec2 winSize; -uniform float zoom; - void main() { vec3 pa = gl_in[0].gl_Position.xyz; @@ -19,14 +16,12 @@ void main() gBoundingBox = vec2 (-1,1); gl_Position = vec4 (pb, 1); - //gl_Position = vec4 (0.5,0,0, 1); EmitVertex(); gBoundingBox = vec2 (1,1); gl_Position = vec4 (pa, 1); EmitVertex(); gBoundingBox = vec2 (-1,-1); gl_Position = vec4 (pc, 1); -// gl_Position = vec4 (0.5,0.5,0, 1); EmitVertex(); gBoundingBox = vec2 (1,-1); gl_Position = vec4 (pa + pc - pb, 1); diff --git a/shader/fadeCircle.frag b/shader/fadeCircle.frag deleted file mode 100644 index 953111146..000000000 --- a/shader/fadeCircle.frag +++ /dev/null @@ -1,16 +0,0 @@ -#version 430 core -in vec2 cenPosT; -in vec2 gParams; -out vec4 fColor; - -void main() -{ - vec2 pos = gl_FragCoord.xy; - float dist = min(1 , 2*distance(pos,cenPosT) / (gParams.x)); - //float c = pow(gParams.y*dist,2); - float c = gParams.y * pow(1-dist,2); - //float c = gParams.y; - fColor = vec4( c,c,c ,c ); -// fColor = vec4( 1,0,0 , 1); -// fColor = vec4( 1,0,0 , pow(dist,2) ); -} diff --git a/shader/fadeCircle.geom b/shader/fadeCircle.geom deleted file mode 100644 index 1f1122440..000000000 --- a/shader/fadeCircle.geom +++ /dev/null @@ -1,30 +0,0 @@ -#version 430 core -layout (points) in; -layout (triangle_strip, max_vertices = 4) out; -in vec2 vParams []; -out vec2 gParams; -out vec2 cenPosT; - -uniform vec2 winSize; -uniform float zoom; - -void main() -{ - vec3 cenPos = gl_in[0].gl_Position.xyz; - //cenPos = vec3 (0.5,0,0); - gParams = vec2( vParams[0].x * zoom * 2, vParams[0].y); - float gRad = gParams.x; - - cenPosT = vec2 ( (cenPos.x + 1) * 0.5 * winSize.x , (cenPos.y + 1) * 0.5 * winSize.y); - - gl_Position = vec4 (cenPos.x + gRad/winSize.x, cenPos.y + gRad/winSize.y, 0.9 , 1); - EmitVertex(); - gl_Position = vec4 (cenPos.x - gRad/winSize.x, cenPos.y + gRad/winSize.y, 0.9 , 1); - EmitVertex(); - gl_Position = vec4 (cenPos.x + gRad/winSize.x, cenPos.y - gRad/winSize.y, 0.9 , 1); - EmitVertex(); - gl_Position = vec4 (cenPos.x - gRad/winSize.x, cenPos.y - gRad/winSize.y, 0.9 , 1); - EmitVertex(); - - EndPrimitive(); -} diff --git a/shader/fadeCircle.vert b/shader/fadeCircle.vert deleted file mode 100644 index 0498314fe..000000000 --- a/shader/fadeCircle.vert +++ /dev/null @@ -1,15 +0,0 @@ -#version 430 core -layout (location = 0) in vec4 position; -out vec2 vParams; - -uniform vec2 winSize; -uniform float zoom; -uniform vec2 translation; -uniform float rotation; -uniform mat4 worldMat; - -void main() -{ - gl_Position = vec4(position.xy,0,1); - vParams = position.zw; -} diff --git a/shader/fullFadeCircle.frag b/shader/fullFadeCircle.frag deleted file mode 100644 index 45ca0c969..000000000 --- a/shader/fullFadeCircle.frag +++ /dev/null @@ -1,12 +0,0 @@ -#version 430 core -in vec4 gColor; -in vec2 cenPosTrans; -in float gRad; -out vec4 fColor; - -void main() -{ - vec2 pos = gl_FragCoord.xy; - float dist = max(0 , 1 - 2 * distance(pos,cenPosTrans) / (gRad)); - fColor = vec4( gColor.xyz , pow(gColor.z*dist,2) ); -} diff --git a/shader/fullFadeCircle.geom b/shader/fullFadeCircle.geom deleted file mode 100644 index 4d696433c..000000000 --- a/shader/fullFadeCircle.geom +++ /dev/null @@ -1,30 +0,0 @@ -#version 430 core -layout (points) in; -layout (triangle_strip, max_vertices = 4) out; -in vec4 vColor []; -in float vRad []; -uniform vec2 winSize; -out vec4 gColor; -out float gRad; -out vec2 cenPosTrans; -void main() -{ - vec3 cenPos = gl_in[0].gl_Position.xyz; - vec2 cenPosa = cenPos.xy + vec2 (1,1); - cenPosTrans = vec2 (cenPosa * winSize * 0.5); - gColor = vColor[0]; - gRad = vRad[0]; - - gl_Position = vec4 (cenPos.x + gRad/winSize.x, cenPos.y + gRad/winSize.y, cenPos.z , 1); - EmitVertex(); - gl_Position = vec4 (cenPos.x - gRad/winSize.x, cenPos.y + gRad/winSize.y, cenPos.z , 1); - EmitVertex(); - gl_Position = vec4 (cenPos.x + gRad/winSize.x, cenPos.y - gRad/winSize.y, cenPos.z , 1); - EmitVertex(); - gl_Position = vec4 (cenPos.x - gRad/winSize.x, cenPos.y - gRad/winSize.y, cenPos.z , 1); - EmitVertex(); - - - EndPrimitive(); - -} diff --git a/shader/fullFadeCircle.vert b/shader/fullFadeCircle.vert deleted file mode 100644 index 2046f8894..000000000 --- a/shader/fullFadeCircle.vert +++ /dev/null @@ -1,12 +0,0 @@ -#version 430 core -layout (location = 0) in vec3 position; -layout (location = 1) in vec4 color; -layout (location = 2) in float rad; -out vec4 vColor; -out float vRad; -void main() -{ - gl_Position = vec4(position,1); - vColor = color; - vRad = rad; -} diff --git a/src/Dodge/Rooms.hs b/src/Dodge/Rooms.hs index c3bdc6534..fc8e03c83 100644 --- a/src/Dodge/Rooms.hs +++ b/src/Dodge/Rooms.hs @@ -546,7 +546,7 @@ deadEndRoom = Room ] , _rmLinks = lnks , _rmPath = [] - , _rmPS = [] + , _rmPS = [PS (0,-10) 0 basicLS] , _rmBound = rectNSWE 20 (-20) (-30) 30 } where lnks = [((0,30) ,0) diff --git a/src/Dodge/Weapons.hs b/src/Dodge/Weapons.hs index 5064c17cd..ddb933ede 100644 --- a/src/Dodge/Weapons.hs +++ b/src/Dodge/Weapons.hs @@ -2194,15 +2194,15 @@ flameShield = basicEquipment } frontArmour = basicEquipment { _itIdentity = FrontArmour - , _itName = "FRONTARMOUR" + , _itName = "FARMOUR" , _itMaxStack = 1 , _itAmount = 1 , _itFloorPict = onLayer FlItLayer $ translate 0 (-5) - $ pictures [color (greyN 0.1) $ thickArc 0 (pi/2) 10 5 + $ pictures [color (greyN 0.1) $ thickArc 0 (pi/2) 10 5 ,color (greyN 0.1) $ thickArc (3*pi/2) (2*pi) 10 5 ] , _itEquipPict = (\cr _ -> onLayer CrLayer - $ pictures [color (greyN 0.1) $ thickArc 0 (pi/2) 10 5 + $ pictures [color (greyN 0.1) $ thickArc 0 (pi/2) 10 5 ,color (greyN 0.1) $ thickArc (3*pi/2) (2*pi) 10 5 ] ) diff --git a/src/Picture/Preload.hs b/src/Picture/Preload.hs index 92285a06c..a6df89073 100644 --- a/src/Picture/Preload.hs +++ b/src/Picture/Preload.hs @@ -1,6 +1,10 @@ {-# LANGUAGE TemplateHaskell #-} --{-# LANGUAGE Strict #-} module Picture.Preload + ( RenderData (..) + , preloadRender + , cleanUpRenderPreload + ) where import Picture.Data @@ -25,6 +29,57 @@ data RenderData = RenderData makeLenses ''RenderData +preloadRender :: IO RenderData +preloadRender = do +-- compile shader programs + lsShad <- makeShader "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),(1,4)] Points pokeWPStrat + ["lightPos"] + + 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] + [(0,3),(1,4),(2,3)] Points pokeCharStrat + "data/texture/charMap.png" + +--the following vbo is set up to contain one fixed vertex + dummyvbo <- genObjectName + dummyptr <- mallocArray numDrawableElements + pokeArray dummyptr [0..2000] + bindBuffer ArrayBuffer $= Just dummyvbo + bufferData ArrayBuffer $= (fromIntegral floatSize, dummyptr, StaticDraw) + +-- input a list of (attribute location, attrib length) pairs +-- these will have buffers and pointers created + backgroundvao <- setupVAO [(0,4),(1,2)] + + return $ RenderData + { _listShaders = [bslist,lslist,cslist,aslist,eslist] + , _dummyVBO = dummyvbo + , _dummyPtr = dummyptr + , _lightSourceShader = lsShad + , _wallShadowShader = wsShad + , _backgroundShader = bgShad + } + + +--------------------end preloadRender +cleanUpRenderPreload :: RenderData -> IO () +cleanUpRenderPreload pd = do + mapM_ freeShaderPointers $ _listShaders pd + freeShaderPointers $ _lightSourceShader pd + freeShaderPointers $ _wallShadowShader pd + freeShaderPointers $ _backgroundShader pd + free $ _dummyPtr pd + +{-# INLINE pokeTriStrat #-} pokeTriStrat (RenderPoly vs) = fmap (\((x,y,z),(r,g,b,a)) -> [[x,y,z],[r,g,b,a]]) vs pokeTriStrat _ = [] @@ -53,53 +108,3 @@ pokeWPStrat ((x,y),(z,w),(a,b),(c,d)) = [[[x,y,z,w],[a,b,c,d]]] pokeBGStrat :: a -> [[[Float]]] pokeBGStrat = const [] -preloadRender :: IO RenderData -preloadRender = do --- compile shader programs - lsShad <- makeShader "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),(1,4)] Points pokeWPStrat - ["lightPos"] - - 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,3)] Points pokeArcStrat - eslist <- makeShader "ellipse" [vert,geom,frag] [(0,3),(1,4)] Triangles pokeEllStrat - cslist <- makeTextureShader "character" [vert,geom,frag] - [(0,3),(1,4),(2,3)] Points pokeCharStrat - "data/texture/charMap.png" - ---the following vbo is set up to contain one fixed vertex - dummyvbo <- genObjectName - dummyptr <- mallocArray numDrawableElements - pokeArray dummyptr [0..2000] - bindBuffer ArrayBuffer $= Just dummyvbo - bufferData ArrayBuffer $= (fromIntegral floatSize, dummyptr, StaticDraw) - --- input a list of (attribute location, attrib length) pairs --- these will have buffers and pointers created - backgroundvao <- setupVAO [(0,4),(1,2)] - - return $ RenderData - { _listShaders = [bslist,lslist,cslist,aslist,eslist] - , _dummyVBO = dummyvbo - , _dummyPtr = dummyptr - , _lightSourceShader = lsShad - , _wallShadowShader = wsShad - , _backgroundShader = bgShad - } - -vaoPointers :: VAO -> [Ptr Float] -vaoPointers = (\(_,ps,_) -> ps) . unzip3 . _vaoBufferTargets - -cleanUpRenderPreload :: RenderData -> IO () -cleanUpRenderPreload pd = do - mapM_ freeShaderPointers $ _listShaders pd - freeShaderPointers $ _lightSourceShader pd - freeShaderPointers $ _wallShadowShader pd - freeShaderPointers $ _backgroundShader pd - free $ _dummyPtr pd diff --git a/src/Picture/Tree.hs b/src/Picture/Tree.hs index a3224ca2f..b259cfc88 100644 --- a/src/Picture/Tree.hs +++ b/src/Picture/Tree.hs @@ -57,14 +57,6 @@ polyToTris :: [s] -> [s] polyToTris (a:b:c:as) = a : intercalate [a] (zipWith (\x y->[x,y]) (init (b:c:as)) (c:as)) polyToTris _ = [] -tripFirst :: (a -> a') -> (a,b,c) -> (a',b,c) -{-# INLINE tripFirst #-} -tripFirst f (x,y,z) = (f x,y,z) - -tripSecond :: (b -> b') -> (a,b,c) -> (a,b',c) -{-# INLINE tripSecond #-} -tripSecond f (x,y,z) = (x,f y,z) - scaleT :: (Float,Float) -> (Point3,Point4,Point3) -> (Point3,Point4,Point3) {-# INLINE scaleT #-} scaleT (x,y) (a,b,(o,s,t)) = (a,b,(o,s*x,t*y)) @@ -95,24 +87,6 @@ overSca :: (Point2 -> Point2) -> RenderType -> RenderType overSca f (RenderText vs) = RenderText $ map (scaleT (f (1,1))) vs overSca f p = p -scaleRen,translateRen :: Float -> Float -> RenderType -> RenderType -{-# INLINE scaleRen #-} -scaleRen x y (RenderText vs) = overPos (scale3 x y) $ RenderText $ map (scaleT (x,y)) vs -scaleRen x y rt = overPos (scale3 x y) rt -{-# INLINE translateRen #-} -translateRen x y = overPos $ translate3 x y -rotateRen,setDepthRen :: Float -> RenderType -> RenderType -{-# INLINE rotateRen #-} -rotateRen a (RenderArc (p,c,(as,ae,r,w))) = overPos (rotate3 a) $ RenderArc (p,c,(f as,f ae,r,w)) - --where f b = normalizeAngle $ a + b - where f b = a + b -rotateRen a pic = overPos (rotate3 a) pic -{-# INLINE setDepthRen #-} -setDepthRen d = overPos $ \(x,y,_) -> (x,y,-d) -{-# INLINE colorRen #-} -colorRen :: RGBA -> RenderType -> RenderType -colorRen c = overCol $ const c - stringToList :: String -> [(Point3,Point4,Point3)] {-# INLINE stringToList #-} stringToList s = zipWith (\x (a,b,c) -> (translate3 x 0 a,b,c))