FragmentStreams implement the Functor class, which provides the
fmap method that you can use to manipulate those streams. This corresponds to writing and using
fragment shaders, but in a much more modular way. You may for instance apply fmap
several times in a sequence, effectively creating complex shaders.
Instances are also provided for the Monoid class, so several streams (of the same type) can be
concatenated. The order is preserved, meaning that the fragments in stream a in a mappend b will be
drawn before the fragments in b.
All atomic values except textures in fragment streams uses the Fragment type constructor.
Composite types are created by composing the atomic Fragment types, rather than wrapping the
composite type in the Fragment type constructors.
Fragment instances for are provided for most of Prelude's numerical classes. Since Eq, Ord
and Show are prerequisites for these classes, instances are provided for them too, even though
their methods all will generate errors if used (except min and max). Use the instances of
EqB, OrdB and IfB from the Boolean package if you want to compare Fragment values.
Hyperbolic trigonometrical functions aren't provided either.
Rewrite rule specializations are provided for the Vec package functions norm, normalize,
dot and cross on vectors of Fragment Float, so the use of these functions (and others
from that package that is defined in terms of them) are highly encouraged.
|A stream of fragments on the GPU, parameterized on the fragments type
(built up of atoms of type Fragment).
|An opaque type constructor for atomic values in a fragment on the GPU, e.g. Fragment Float.
|Various fragment functions
|The derivative in x using local differencing of the rasterized value.
|The derivative in y using local differencing of the rasterized value.
|The sum of the absolute derivative in x and y using local differencing of the rasterized value.
|Filters out fragments in a stream where the provided function returns true.
|Creating fragment streams
|The context of types that can be rasterized from vertices in PrimitiveStreams to fragments in FragmentStreams.
Create your own instances in terms of the existing ones, e.g. convert your vertex data to Vertex Floats,
turn them into Fragment Floats with toFragment and then convert them to your fragment data representation.
|Turns a vertex value into a fragment value in the Rasterizer monad. This should not be strict on its argument.
Its definition should also always use the same series of toFragment calls to convert values of the same type. This unfortunatly
rules out ordinary lists (but instances for fixed length lists from the Vec package are however provided).
|VertexOutput (Vertex Float)|
|(VertexOutput a, VertexOutput b) => VertexOutput (a, b)|
|(VertexOutput a, VertexOutput b) => VertexOutput (:. a b)|
|(VertexOutput a, VertexOutput b, VertexOutput c) => VertexOutput (a, b, c)|
|(VertexOutput a, VertexOutput b, VertexOutput c, VertexOutput d) => VertexOutput (a, b, c, d)|
|A monad in which vertex data gets converted to fragment data.
Use toFragment in the existing instances of VertexOutput to operate in this monad.
|When using the rasterize functions, give the vertices positions in canonical view space, i.e. where x, y and z
is in the interval [-1, 1]. These aren't interpolated back to the fragments by default, so you
must duplicate these positions into the vertices interpolated values if you need them in the fragments (which is very unusual).
|Produced by Haddock version 2.6.0|