When creating graphic libraries you most likely end up dealing with
points and rectangles. If you're particularly unlucky, you may end
up dealing with affine matrices and 2D transformations. If you're
writing a graphic library with 3D transformations, though, you are
going to hit the jackpot: 4x4 matrices, projections, transformations,
vectors, and quaternions.

Most of this stuff exists, in various forms, in other libraries,
but it has the major drawback of coming along with the rest of those
libraries, which may or may not be what you want. Those libraries
are also available in various languages, as long as those languages
are C++; again, it may or may not be something you want.

For this reason, I decided to write the thinnest, smallest possible
layer needed to write a canvas library; given its relative size, and
the propensity for graphics libraries to have a pun in their name,
I decided to call it Graphene.

This library provides types and their relative API; it does not deal
with windowing system surfaces, drawing, scene graphs, or input. You're
supposed to do that yourself, in your own canvas implementation,
which is the whole point of writing the library in the first place.
