Copyright | (C) 2015 Dimitri Sabadie |
---|---|
License | BSD3 |
Maintainer | Dimitri Sabadie <dimitri.sabadie@gmail.com> |
Stability | experimental |
Portability | portable |
Safe Haskell | None |
Language | Haskell2010 |
- data Geometry
- data GeometryMode
- createGeometry :: forall f m v. (Foldable f, MonadIO m, MonadResource m, Storable v, Vertex v) => f v -> Maybe (f Word32) -> GeometryMode -> m Geometry
- nubDirect :: (Foldable f, Ord a, Integral i) => f a -> ([a], [i])
Geometry creation
A Geometry
represents a GPU version of a mesh; that is, vertices attached with indices and a
geometry mode. You can have Geometry
in two flavours:
- direct geometry: doesn’t require any indices as all vertices are unique and in the right order to connect vertices between each other ;
- indexed geometry: requires indices to know how to connect and share vertices between each other.
data GeometryMode Source
The GeometryMode
is used to specify how vertices should be connected between each other.
A Point
mode won’t connect vertices at all and will leave them as a vertices cloud.
A Line
mode will connect vertices two-by-two. You then have to provide pairs of indices to
correctly connect vertices and form lines.
A Triangle
mode will connect vertices three-by-three. You then have to provide triplets of
indices to correctly connect vertices and form triangles.
createGeometry :: forall f m v. (Foldable f, MonadIO m, MonadResource m, Storable v, Vertex v) => f v -> Maybe (f Word32) -> GeometryMode -> m Geometry Source
This function is the single one to create Geometry
. It takes a Foldable
type of vertices
used to provide the Geometry
with vertices and might take a Foldable
of indices (Word32
).
If you don’t pass indices (Nothing
), you end up with a direct geometry. Otherwise, you get an
indexed geometry. You also have to provide a GeometryMode
to state how you want the vertices
to be connected with each other.