Implement text rendering using geometry shader
This commit is contained in:
@@ -1,8 +1,10 @@
|
|||||||
module Geometry.Data
|
module Geometry.Data
|
||||||
( Point2 (..)
|
( Point2 (..)
|
||||||
, Point3 (..)
|
, Point3 (..)
|
||||||
|
, Point4 (..)
|
||||||
)
|
)
|
||||||
where
|
where
|
||||||
|
|
||||||
type Point2 = (Float,Float)
|
type Point2 = (Float,Float)
|
||||||
type Point3 = (Float,Float,Float)
|
type Point3 = (Float,Float,Float)
|
||||||
|
type Point4 = (Float,Float,Float,Float)
|
||||||
|
|||||||
+22
-11
@@ -113,7 +113,7 @@ scale3 a b (x,y,z) = (x*a,y*b,z)
|
|||||||
scale :: Float -> Float -> Picture -> Picture
|
scale :: Float -> Float -> Picture -> Picture
|
||||||
{-# INLINE scale #-}
|
{-# INLINE scale #-}
|
||||||
--scale x y = over scPosTri (mapVC $ scale3 x y) . over scPosChar (mapVC $ scale3 x y)
|
--scale x y = over scPosTri (mapVC $ scale3 x y) . over scPosChar (mapVC $ scale3 x y)
|
||||||
scale x y = overPos $ scale3 x y
|
scale x y pic = overPos (scale3 x y) $ over scTexChar (fmap (second (*x))) pic
|
||||||
|
|
||||||
rotate3 :: Float -> Point3 -> Point3
|
rotate3 :: Float -> Point3 -> Point3
|
||||||
{-# INLINE rotate3 #-}
|
{-# INLINE rotate3 #-}
|
||||||
@@ -170,20 +170,31 @@ charToScene :: Char -> Picture
|
|||||||
charToScene c = Scene
|
charToScene c = Scene
|
||||||
{_scPosTri = mempty
|
{_scPosTri = mempty
|
||||||
,_scColTri = mempty
|
,_scColTri = mempty
|
||||||
,_scPosChar = toVC [(0.0 ,0.0 ,0)
|
,_scPosChar = toVC [(0.0,0.0,0)]
|
||||||
,(dimText,0.0 ,0)
|
,_scColChar = toVC [white]
|
||||||
,(dimText,dimText*2,0)
|
,_scTexChar = toVC [(offset,100)]
|
||||||
,(0.0 ,0.0 ,0)
|
|
||||||
,(dimText,dimText*2,0)
|
|
||||||
,(0.0 ,dimText*2,0)
|
|
||||||
]
|
|
||||||
,_scColChar = toVC $ take 6 $ repeat white
|
|
||||||
,_scTexChar = toVC $ [(s,1) ,(e,1) ,(e,0) ,(s,1) ,(e,0) ,(s,0)]
|
|
||||||
}
|
}
|
||||||
where x = 1/128
|
where x = 1/128
|
||||||
s = offset * x
|
s = offset * x
|
||||||
e = s + x
|
|
||||||
offset = fromIntegral (fromEnum c) - 32
|
offset = fromIntegral (fromEnum c) - 32
|
||||||
|
--charToScene :: Char -> Picture
|
||||||
|
--charToScene c = Scene
|
||||||
|
-- {_scPosTri = mempty
|
||||||
|
-- ,_scColTri = mempty
|
||||||
|
-- ,_scPosChar = toVC [(0.0 ,0.0 ,0)
|
||||||
|
-- ,(dimText,0.0 ,0)
|
||||||
|
-- ,(dimText,dimText*2,0)
|
||||||
|
-- ,(0.0 ,0.0 ,0)
|
||||||
|
-- ,(dimText,dimText*2,0)
|
||||||
|
-- ,(0.0 ,dimText*2,0)
|
||||||
|
-- ]
|
||||||
|
-- ,_scColChar = toVC $ take 6 $ repeat white
|
||||||
|
-- ,_scTexChar = toVC $ [(s,1) ,(e,1) ,(e,0) ,(s,1) ,(e,0) ,(s,0)]
|
||||||
|
-- }
|
||||||
|
-- where x = 1/128
|
||||||
|
-- s = offset * x
|
||||||
|
-- e = s + x
|
||||||
|
-- offset = fromIntegral (fromEnum c) - 32
|
||||||
|
|
||||||
|
|
||||||
dimText = 100
|
dimText = 100
|
||||||
|
|||||||
@@ -78,7 +78,7 @@ renderPicture' pdata (Scene posTri colTri posChar colChar texChar) = do
|
|||||||
bindBuffer ArrayBuffer $= Just (_texVBO pdata)
|
bindBuffer ArrayBuffer $= Just (_texVBO pdata)
|
||||||
pokeArray (_ptrTexVBO pdata) $ mapFlat flat2 texChar
|
pokeArray (_ptrTexVBO pdata) $ mapFlat flat2 texChar
|
||||||
bufferData ArrayBuffer $= (fromIntegral (2 * numVertices' * vertexSize'), _ptrTexVBO pdata, StreamDraw)
|
bufferData ArrayBuffer $= (fromIntegral (2 * numVertices' * vertexSize'), _ptrTexVBO pdata, StreamDraw)
|
||||||
drawArrays Triangles (fromIntegral firstIndex) (fromIntegral $ numVertices')
|
drawArrays Points (fromIntegral firstIndex) (fromIntegral $ numVertices')
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -54,9 +54,11 @@ setupFadeShader = do
|
|||||||
makeTextureShader :: IO Program
|
makeTextureShader :: IO Program
|
||||||
makeTextureShader = do
|
makeTextureShader = do
|
||||||
vsSource <- BS.readFile "shader/basicTexture.vert"
|
vsSource <- BS.readFile "shader/basicTexture.vert"
|
||||||
|
gsSource <- BS.readFile "shader/basicTexture.geom"
|
||||||
fsSource <- BS.readFile "shader/basicTexture.frag"
|
fsSource <- BS.readFile "shader/basicTexture.frag"
|
||||||
|
|
||||||
makeShaderProgram [(VertexShader, vsSource )
|
makeShaderProgram [(VertexShader, vsSource )
|
||||||
|
,(GeometryShader, gsSource )
|
||||||
,(FragmentShader, fsSource )
|
,(FragmentShader, fsSource )
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user