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.