GPipe-1.3.2: A functional graphics API for programmable GPUs

Safe HaskellSafe-Infered

Graphics.GPipe.Stream

Contents

Description

A GPipe program mainly consits of creating and manipulating streams of primitives and fragments. The modules Graphics.GPipe.Stream.Primitive and Graphics.GPipe.Stream.Fragment defines those streams.

All atomic values except textures in streams uses the Vertex or Fragment type constructors. Composite types are created by composing the atomic Vertex or Fragment types, rather than wrapping the composite type in any of those type constructors. This module provides the common classes for those atomic types, as well as reexports of imported common types and modules.

Synopsis

Common classes

class GPU a whereSource

Denotes a type on the GPU, that can be moved there from the CPU (through the internal use of uniforms). Use the existing instances of this class to create new ones.

Associated Types

type CPU a Source

The type on the CPU.

Methods

toGPU :: CPU a -> aSource

Converts a value from the CPU to the GPU.

Instances

GPU () 
GPU (Fragment Bool) 
GPU (Fragment Float) 
GPU (Fragment Int) 
GPU (Vertex Bool) 
GPU (Vertex Float) 
GPU (Vertex Int) 
(GPU a, GPU b) => GPU (a, b) 
(GPU a, GPU b) => GPU (:. a b) 
(GPU a, GPU b, GPU c) => GPU (a, b, c) 
(GPU a, GPU b, GPU c, GPU d) => GPU (a, b, c, d) 

class (Ord a, Floating a) => Real' a whereSource

This class provides the GPU functions either not found in Prelude's numerical classes, or that has wrong types. Instances are also provided for normal Floats and Doubles. Minimal complete definition: floor' and ceiling'.

Methods

rsqrt :: a -> aSource

exp2 :: a -> aSource

log2 :: a -> aSource

floor' :: a -> aSource

ceiling' :: a -> aSource

fract' :: a -> aSource

mod' :: a -> a -> aSource

clamp :: a -> a -> a -> aSource

saturate :: a -> aSource

mix :: a -> a -> a -> aSource

step :: a -> a -> aSource

smoothstep :: a -> a -> a -> aSource

class Convert a whereSource

Provides a common way to convert numeric types to integer and floating point representations.

Associated Types

type ConvertFloat a Source

type ConvertInt a Source

Methods

toFloat :: a -> ConvertFloat aSource

Convert to a floating point number.

toInt :: a -> ConvertInt aSource

Convert to an integral number, using truncation if necessary.

Reexports

data a :. b

The vector constructor. (:.) for vectors is like (:) for lists, and () takes the place of []. (The list of instances here is not meant to be readable.)

Constructors

!a :. !b 

Instances

ZipWith a b c (:. a ()) (:. b ()) (:. c ()) 
ZipWith a b c (:. a ()) (:. b (:. b bs)) (:. c ()) 
ZipWith a b c (:. a (:. a as)) (:. b ()) (:. c ()) 
ZipWith a b c (:. a' u) (:. b' v) (:. c' w) => ZipWith a b c (:. a (:. a' u)) (:. b (:. b' v)) (:. c (:. c' w)) 
Vec N1 a (:. a ()) 
Access N0 a (:. a v) 
Snoc () a (:. a ()) 
(Access n a r, Append p (:. a ()) p', GetDiagonal' (Succ n) p' (:. r m) v) => GetDiagonal' n p (:. r (:. r m)) v 
(Access n a r, Append p (:. a ()) (:. a p)) => GetDiagonal' n p (:. r ()) (:. a p) 
(Append p (:. a v) x, Append p (:. a ()) y, ReplConsec' a y v z) => ReplConsec' a p (:. a v) (:. x z) 
Map a b (:. a ()) (:. b ()) 
Map a b (:. a' u) (:. b' v) => Map a b (:. a (:. a' u)) (:. b (:. b' v)) 
(VecArrayRW (:. a v), PackedVec (:. a v)) => IArray UArray (Packed (:. a v)) 
(IfB bool a, IfB bool b) => IfB bool (:. a b) 
(EqB bool a, EqB bool b) => EqB bool (:. a b) 
(Show a, Fractional a, NearZero a) => Pivot1 a (:. (:. a ()) ()) 
(Fractional a, NearZero a, Map a a (:. a r) (:. a r)) => Pivot1 a (:. (:. a (:. a r)) ()) 
(Fractional a, NearZero a, Map a a (:. a r) (:. a r), ZipWith a a a (:. a r) (:. a r) (:. a r), Map (:. a r) (:. a r) (:. (:. a r) rs) (:. (:. a r) rs), Pivot1 a (:. (:. a r) rs)) => Pivot1 a (:. (:. a r) (:. (:. a r) rs)) 
Pivot a (:. () v) 
(Fractional a, NearZero a, Pivot1 a rs, Tail (:. a r) r, Map (:. a r) r (:. (:. a r) rs) (:. r rs'), Map r (:. a r) (:. r rs') (:. (:. a r) rs), Pivot1 a (:. (:. a r) rs), Pivot a (:. r rs')) => Pivot a (:. (:. a r) rs) 
(Num a, Pivot a (:. r ())) => GaussElim a (:. r ()) 
(Fractional a, Map (:. a r) r (:. (:. a r) rs) rs_, Map r (:. a r) rs_ (:. (:. a r) rs), Pivot a (:. (:. a r) (:. (:. a r) rs)), GaussElim a rs_) => GaussElim a (:. (:. a r) (:. (:. a r) rs)) 
VecList a (:. a ()) 
VecList a (:. a' v) => VecList a (:. a (:. a' v)) 
VecArrayRW (:. a v) => IArray UArray (:. a v) 
Reverse' (:. a p) v v' => Reverse' p (:. a v) v' 
(SetDiagonal' (Succ n) v m, Access n a r) => SetDiagonal' n (:. a v) (:. r m) 
DropConsec' p (:. a ()) (:. p ()) 
(Append p (:. a v) x, Append p (:. a ()) y, DropConsec' y (:. a v) z) => DropConsec' p (:. a (:. a v)) (:. x z) 
PackedVec (Vec2 Double) 
PackedVec (Vec2 Float) 
PackedVec (Vec2 Int) 
PackedVec (Vec3 Double) 
PackedVec (Vec3 Float) 
PackedVec (Vec3 Int) 
PackedVec (Vec4 Double) 
PackedVec (Vec4 Float) 
PackedVec (Vec4 Int) 
Vec (Succ n) a (:. a' v) => Vec (Succ (Succ n)) a (:. a (:. a' v)) 
Access n a v => Access (Succ n) a (:. a v) 
(VecArrayRW (:. a v), PackedVec (:. a v)) => MArray (STUArray s) (Packed (:. a v)) (ST s) 
Drop n (:. a v) v' => Drop (Succ n) (:. a (:. a v)) v' 
VecArrayRW (:. a v) => MArray (STUArray s) (:. a v) (ST s) 
Take n v v' => Take (Succ n) (:. a v) (:. a v') 
(Eq a, Eq b) => Eq (:. a b) 
(Eq u, ShowVec u, Fractional a, Ord (:. a u), ZipWith a a a (:. a u) (:. a u) (:. a u), Map a a (:. a u) (:. a u), Vec (Succ l) a (:. a u), Show (:. a u)) => Fractional (:. a u) 
(Eq u, ShowVec u, Num a, Map a a (:. a u) (:. a u), ZipWith a a a (:. a u) (:. a u) (:. a u), Vec (Succ l) a (:. a u)) => Num (:. a u) 
(Ord a, Ord b) => Ord (:. a b) 
(Read a, Read b) => Read (:. a b) 
(Show a, ShowVec v) => Show (:. a v) 
(Num a, NegateEvens v) => NegateOdds (:. a v) 
(Num a, NegateOdds v) => NegateEvens (:. a v) 
NearZero a => BackSubstitute (:. (:. a r) ()) 
(Map (:. a r) r (:. (:. a r) rs) rs_, Map r (:. a r) rs_ (:. (:. a r) rs), Fold aas (a, :. a r), ZipWith a a a (:. a r) (:. a r) (:. a r), Map a a (:. a r) (:. a r), ZipWith a (:. a r) (a, :. a r) r (:. (:. a r) rs) aas, Num a, NearZero a, BackSubstitute rs_) => BackSubstitute (:. (:. a r) (:. (:. a r) rs)) 
BackSubstitute' (:. (:. a r) ()) 
(Map (:. a r) r (:. (:. a r) rs) rs_, Map r (:. a r) rs_ (:. (:. a r) rs), Fold aas (a, :. a r), ZipWith a a a (:. a r) (:. a r) (:. a r), Map a a (:. a r) (:. a r), ZipWith a (:. a r) (a, :. a r) r (:. (:. a r) rs) aas, Num a, BackSubstitute' rs_) => BackSubstitute' (:. (:. a r) (:. (:. a r) rs)) 
(Show a, ShowVec v) => ShowVec (:. a v) 
VecArrayRW (:. Double ()) 
VecArrayRW (:. Double v) => VecArrayRW (:. Double (:. Double v)) 
VecArrayRW (:. Float ()) 
VecArrayRW (:. Float v) => VecArrayRW (:. Float (:. Float v)) 
VecArrayRW (:. Int ()) 
VecArrayRW (:. Int v) => VecArrayRW (:. Int (:. Int v)) 
VecArrayRW (:. Word8 ()) 
VecArrayRW (:. Word8 v) => VecArrayRW (:. Word8 (:. Word8 v)) 
Storable a => Storable (:. a ()) 
(Vec (Succ (Succ n)) a (:. a (:. a v)), Storable a, Storable (:. a v)) => Storable (:. a (:. a v)) 
(GPU a, GPU b) => GPU (:. a b) 
(VertexOutput a, VertexOutput b) => VertexOutput (:. a b) 
(VertexInput a, VertexInput b) => VertexInput (:. a b) 
Transpose' vs vs' => Transpose' (:. () vs) vs' 
Det' (:. (:. a ()) ()) a 
(~ * (:. a (:. a v)) r, ~ * (:. (:. a (:. a v)) (:. (:. a (:. a v)) vs)) m, ~ * (:. (:. a v) (:. (:. a v) vs_)) m_, ~ * (:. (:. (:. a v) vs_) (:. x y)) mm, Map (:. a (:. a v)) (:. a v) m m_, DropConsec m_ mm, Det' (:. (:. a v) vs_) a, Map (:. (:. a v) vs_) a mm r, Map r a m r, NegateOdds r, Fold r a, Num r, Num a) => Det' (:. (:. a (:. a v)) (:. (:. a (:. a v)) vs)) a 
Head (:. a as) a 
Tail (:. a as) as 
Fold (:. a ()) a 
Fold (:. a' u) a => Fold (:. a (:. a' u)) a 
Last (:. a ()) a 
Last (:. a' v) a => Last (:. a (:. a' v)) a 
Append (:. a ()) v (:. a v) 
Append (:. a' v1) v2 v3 => Append (:. a (:. a' v1)) v2 (:. a v3) 
Snoc v a (:. a v) => Snoc (:. a v) a (:. a (:. a v)) 
Length v n => Length (:. a v) (Succ n) 
(Vec (Succ n) s (:. s ra), Vec (Succ m) (:. s ra) (:. (:. s ra) a), Vec (Succ m) s (:. s rb), Vec (Succ n) (:. s rb) (:. (:. s rb) b), Transpose' (:. (:. s ra) a) (:. (:. s rb) b)) => Transpose (:. (:. s ra) a) (:. (:. s rb) b) 
Transpose' (:. (:. x ()) ()) (:. (:. x ()) ()) 
(Head xss_h xss_hh, Map xss_h xss_hh (:. xss_h xss_t) xs', Tail xss_h xss_ht, Map xss_h xss_ht (:. xss_h xss_t) xss_, Transpose' (:. xs xss_) xss') => Transpose' (:. (:. x xs) (:. xss_h xss_t)) (:. (:. x xs') xss') 

type Vec2 a = :. a (:. a ())

type Vec3 a = :. a (Vec2 a)

type Vec4 a = :. a (Vec3 a)