| HOpenGL Libraries (OpenGL package) | Source code | Contents | Index

Graphics.Rendering.OpenGL.GL.VertexSpec |

Portability | portable
Stability | stable
Maintainer | sven.panne@aedion.de

Contents

Vertex Coordinates
Auxiliary Vertex Attributes
  Texture Coordinates
  Normal
  Fog Coordinate
  Color and Secondary Color
Generic Vertex Attributes
Texture Units

Description
This module corresponds to section 2.7 (Vertex Specification) of the OpenGL 2.1 specs.
Synopsis

class Vertex a where

vertex :: a -> IO ()
vertexv :: Ptr a -> IO ()

class VertexComponent a
data Vertex2 a = Vertex2 !a !a
data Vertex3 a = Vertex3 !a !a !a
data Vertex4 a = Vertex4 !a !a !a !a
currentTextureCoords :: StateVar (TexCoord4 GLfloat)
class TexCoord a where

texCoord :: a -> IO ()
texCoordv :: Ptr a -> IO ()
multiTexCoord :: TextureUnit -> a -> IO ()
multiTexCoordv :: TextureUnit -> Ptr a -> IO ()

class TexCoordComponent a
newtype TexCoord1 a = TexCoord1 a
data TexCoord2 a = TexCoord2 !a !a
data TexCoord3 a = TexCoord3 !a !a !a
data TexCoord4 a = TexCoord4 !a !a !a !a
currentNormal :: StateVar (Normal3 GLfloat)
class Normal a where

normal :: a -> IO ()
normalv :: Ptr a -> IO ()

class NormalComponent a
data Normal3 a = Normal3 !a !a !a
currentFogCoord :: StateVar (FogCoord1 GLfloat)
class FogCoord a where

fogCoord :: a -> IO ()
fogCoordv :: Ptr a -> IO ()

class FogCoordComponent a
newtype FogCoord1 a = FogCoord1 a
rgbaMode :: GettableStateVar Bool
currentColor :: StateVar (Color4 GLfloat)
class Color a where

color :: a -> IO ()
colorv :: Ptr a -> IO ()

currentSecondaryColor :: StateVar (Color3 GLfloat)
class SecondaryColor a where

secondaryColor :: a -> IO ()
secondaryColorv :: Ptr a -> IO ()

class ColorComponent a
data Color3 a = Color3 !a !a !a
data Color4 a = Color4 !a !a !a !a
currentIndex :: StateVar (Index1 GLint)
class Index a where

index :: a -> IO ()
indexv :: Ptr a -> IO ()

class IndexComponent a
newtype Index1 a = Index1 a
newtype AttribLocation = AttribLocation GLuint
class VertexAttrib a
class VertexAttribComponent a where

vertexAttrib1 :: AttribLocation -> a -> IO ()
vertexAttrib2 :: AttribLocation -> a -> a -> IO ()
vertexAttrib3 :: AttribLocation -> a -> a -> a -> IO ()
vertexAttrib4 :: AttribLocation -> a -> a -> a -> a -> IO ()
vertexAttrib1v :: AttribLocation -> Ptr a -> IO ()
vertexAttrib2v :: AttribLocation -> Ptr a -> IO ()
vertexAttrib3v :: AttribLocation -> Ptr a -> IO ()
vertexAttrib4v :: AttribLocation -> Ptr a -> IO ()

newtype TextureUnit = TextureUnit GLuint
maxTextureUnit :: GettableStateVar TextureUnit

Vertex Coordinates
class Vertex a where

Specify the (x, y, z, w) coordinates of a four-dimensional vertex. This must only be done during `renderPrimitive`, otherwise the behaviour is unspecified. The current values of the auxiliary vertex attributes are associated with the vertex. Note that there is no such thing as a "current vertex" which could be retrieved.
Methods

vertex :: a -> IO ()
vertexv :: Ptr a -> IO ()

Instances

VertexComponent a => Vertex (Vertex2 a)
VertexComponent a => Vertex (Vertex3 a)
VertexComponent a => Vertex (Vertex4 a)

class VertexComponent a

The class of all types which can be used as a vertex coordinate.
Instances

VertexComponent GLdouble
VertexComponent GLfloat
VertexComponent GLint
VertexComponent GLshort

data Vertex2 a

A vertex with z=0 and w=1.
Constructors

Vertex2 !a !a |

Instances

TrimmingPoint Vertex2
Eq a => Eq (Vertex2 a)
Ord a => Ord (Vertex2 a)
RasterPosComponent a => RasterPos (Vertex2 a)
Show a => Show (Vertex2 a)
Storable a => Storable (Vertex2 a)
UniformComponent a => Uniform (Vertex2 a)
VertexComponent a => Vertex (Vertex2 a)
VertexAttribComponent a => VertexAttrib (Vertex2 a)
WindowPosComponent a => WindowPos (Vertex2 a)

data Vertex3 a

A vertex with w=1.
Constructors

Vertex3 !a !a !a |

Instances

ControlPoint Vertex3
TrimmingPoint Vertex3
Eq a => Eq (Vertex3 a)
Ord a => Ord (Vertex3 a)
RasterPosComponent a => RasterPos (Vertex3 a)
Show a => Show (Vertex3 a)
Storable a => Storable (Vertex3 a)
UniformComponent a => Uniform (Vertex3 a)
VertexComponent a => Vertex (Vertex3 a)
VertexAttribComponent a => VertexAttrib (Vertex3 a)
WindowPosComponent a => WindowPos (Vertex3 a)

data Vertex4 a

A fully-fledged four-dimensional vertex.
Constructors

Vertex4 !a !a !a !a |

Instances

ControlPoint Vertex4
Eq a => Eq (Vertex4 a)
Ord a => Ord (Vertex4 a)
RasterPosComponent a => RasterPos (Vertex4 a)
Show a => Show (Vertex4 a)
Storable a => Storable (Vertex4 a)
UniformComponent a => Uniform (Vertex4 a)
VertexComponent a => Vertex (Vertex4 a)
VertexAttribComponent a => VertexAttrib (Vertex4 a)

Auxiliary Vertex Attributes
Apart from its coordinates in four-dimensional space, every vertex has associated auxiliary attributes: Its texture coordinates, a normal, a fog coordinate, and a color plus a secondary color. For every attribute, the OpenGL state contains its current value, which can be changed at any time.

Every attribute has a "natural" format via which it can be manipulated directly as part of the OpenGL state, e.g. the current texture coordinates are internally handled as ``TexCoord4` `GLfloat``. Different formats are converted to this format, e.g. the s, r, and t coordinates of a ``TexCoord3` `GLint`` are converted to floating point values and a q coordinate of 1.0 is implicitly assumed.

Consequently, the vast majority of classes, functions, and data types in this module are for convenience only and offer no additional functionality.

Texture Coordinates
currentTextureCoords :: StateVar (TexCoord4 GLfloat)
The current texture coordinates (s, t, r, q) for the current texture unit (see `activeTexture`). The initial value is (0,0,0,1) for all texture units.
class TexCoord a where

Change the current texture coordinates of the current or given texture unit.
Methods

texCoord :: a -> IO ()
texCoordv :: Ptr a -> IO ()
multiTexCoord :: TextureUnit -> a -> IO ()
multiTexCoordv :: TextureUnit -> Ptr a -> IO ()

Instances

TexCoordComponent a => TexCoord (TexCoord1 a)
TexCoordComponent a => TexCoord (TexCoord2 a)
TexCoordComponent a => TexCoord (TexCoord3 a)
TexCoordComponent a => TexCoord (TexCoord4 a)

class TexCoordComponent a

The class of all types which can be used as a texture coordinate.
Instances

TexCoordComponent GLdouble
TexCoordComponent GLfloat
TexCoordComponent GLint
TexCoordComponent GLshort

newtype TexCoord1 a

Texture coordinates with t=0, r=0, and q=1.
Constructors

TexCoord1 a |

Instances

ControlPoint TexCoord1
Eq a => Eq (TexCoord1 a)
Ord a => Ord (TexCoord1 a)
Show a => Show (TexCoord1 a)
Storable a => Storable (TexCoord1 a)
TexCoordComponent a => TexCoord (TexCoord1 a)
UniformComponent a => Uniform (TexCoord1 a)
VertexAttribComponent a => VertexAttrib (TexCoord1 a)

data TexCoord2 a

Texture coordinates with r=0 and q=1.
Constructors

TexCoord2 !a !a |

Instances

ControlPoint TexCoord2
Eq a => Eq (TexCoord2 a)
Ord a => Ord (TexCoord2 a)
Show a => Show (TexCoord2 a)
Storable a => Storable (TexCoord2 a)
TexCoordComponent a => TexCoord (TexCoord2 a)
UniformComponent a => Uniform (TexCoord2 a)
VertexAttribComponent a => VertexAttrib (TexCoord2 a)

data TexCoord3 a

Texture coordinates with q=1.
Constructors

TexCoord3 !a !a !a |

Instances

ControlPoint TexCoord3
Eq a => Eq (TexCoord3 a)
Ord a => Ord (TexCoord3 a)
Show a => Show (TexCoord3 a)
Storable a => Storable (TexCoord3 a)
TexCoordComponent a => TexCoord (TexCoord3 a)
UniformComponent a => Uniform (TexCoord3 a)
VertexAttribComponent a => VertexAttrib (TexCoord3 a)

data TexCoord4 a

Fully-fledged four-dimensional texture coordinates.
Constructors

TexCoord4 !a !a !a !a |

Instances

ControlPoint TexCoord4
Eq a => Eq (TexCoord4 a)
Ord a => Ord (TexCoord4 a)
Show a => Show (TexCoord4 a)
Storable a => Storable (TexCoord4 a)
TexCoordComponent a => TexCoord (TexCoord4 a)
UniformComponent a => Uniform (TexCoord4 a)
VertexAttribComponent a => VertexAttrib (TexCoord4 a)

Normal
currentNormal :: StateVar (Normal3 GLfloat)
The current normal (x, y, z). The initial value is the unit vector (0, 0, 1).
class Normal a where

Change the current normal. Integral arguments are converted to floating-point with a linear mapping that maps the most positive representable integer value to 1.0, and the most negative representable integer value to -1.0. Normals specified with `normal` or `normalv` need not have unit length. If `normalize` is enabled, then normals of any length specified with `normal` or `normalv` are normalized after transformation. If `rescaleNormal` is enabled, normals are scaled by a scaling factor derived from the modelview matrix. `rescaleNormal` requires that the originally specified normals were of unit length, and that the modelview matrix contains only uniform scales for proper results. Normalization is initially disabled.
Methods

normal :: a -> IO ()
normalv :: Ptr a -> IO ()

Instances

NormalComponent a => Normal (Normal3 a)

class NormalComponent a

The class of all types which can be used as a component of a normal.
Instances

NormalComponent GLbyte
NormalComponent GLdouble
NormalComponent GLfloat
NormalComponent GLint
NormalComponent GLshort

data Normal3 a

Constructors

Normal3 !a !a !a |

Instances

ControlPoint Normal3
Eq a => Eq (Normal3 a)
NormalComponent a => Normal (Normal3 a)
Ord a => Ord (Normal3 a)
Show a => Show (Normal3 a)
Storable a => Storable (Normal3 a)
UniformComponent a => Uniform (Normal3 a)
VertexAttribComponent a => VertexAttrib (Normal3 a)

Fog Coordinate
currentFogCoord :: StateVar (FogCoord1 GLfloat)
The current fog coordinate. The initial value is 0.
class FogCoord a where

Change the current fog coordinate.
Methods

fogCoord :: a -> IO ()
fogCoordv :: Ptr a -> IO ()

Instances

FogCoordComponent a => FogCoord (FogCoord1 a)

class FogCoordComponent a

The class of all types which can be used as the fog coordinate.
Instances

FogCoordComponent GLdouble
FogCoordComponent GLfloat

newtype FogCoord1 a

A fog coordinate.
Constructors

FogCoord1 a |

Instances

Eq a => Eq (FogCoord1 a)
FogCoordComponent a => FogCoord (FogCoord1 a)
Ord a => Ord (FogCoord1 a)
Show a => Show (FogCoord1 a)
Storable a => Storable (FogCoord1 a)
UniformComponent a => Uniform (FogCoord1 a)
VertexAttribComponent a => VertexAttrib (FogCoord1 a)

Color and Secondary Color
rgbaMode :: GettableStateVar Bool
If `rgbaMode` contains `True`, the color buffers store RGBA value. If color indexes are stored, it contains `False`.
currentColor :: StateVar (Color4 GLfloat)
class Color a where

Change the current color.
Methods

color :: a -> IO ()
colorv :: Ptr a -> IO ()

Instances

ColorComponent a => Color (Color3 a)
ColorComponent a => Color (Color4 a)

currentSecondaryColor :: StateVar (Color3 GLfloat)
class SecondaryColor a where

Change the current secondary color.
Methods

secondaryColor :: a -> IO ()
secondaryColorv :: Ptr a -> IO ()

Instances

ColorComponent a => SecondaryColor (Color3 a)

class ColorComponent a

The class of all types which can be used as a color component.
Instances

ColorComponent GLbyte
ColorComponent GLdouble
ColorComponent GLfloat
ColorComponent GLint
ColorComponent GLshort
ColorComponent GLubyte
ColorComponent GLuint
ColorComponent GLushort

data Color3 a

Constructors

Color3 !a !a !a |

Instances

ColorComponent a => Color (Color3 a)
Eq a => Eq (Color3 a)
Ord a => Ord (Color3 a)
ColorComponent a => SecondaryColor (Color3 a)
Show a => Show (Color3 a)
Storable a => Storable (Color3 a)
UniformComponent a => Uniform (Color3 a)
VertexAttribComponent a => VertexAttrib (Color3 a)

data Color4 a

A fully-fledged RGBA color.
Constructors

Color4 !a !a !a !a |

Instances

ControlPoint Color4
ColorComponent a => Color (Color4 a)
Eq a => Eq (Color4 a)
Ord a => Ord (Color4 a)
Show a => Show (Color4 a)
Storable a => Storable (Color4 a)
UniformComponent a => Uniform (Color4 a)
VertexAttribComponent a => VertexAttrib (Color4 a)

currentIndex :: StateVar (Index1 GLint)
class Index a where

Change the current color index.
Methods

index :: a -> IO ()
indexv :: Ptr a -> IO ()

Instances

IndexComponent a => Index (Index1 a)

class IndexComponent a

The class of all types which can be used as a color index.
Instances

IndexComponent GLdouble
IndexComponent GLfloat
IndexComponent GLint
IndexComponent GLshort
IndexComponent GLubyte

newtype Index1 a

A color index.
Constructors

Index1 a |

Instances

ControlPoint Index1
Eq a => Eq (Index1 a)
IndexComponent a => Index (Index1 a)
Ord a => Ord (Index1 a)
Show a => Show (Index1 a)
Storable a => Storable (Index1 a)
UniformComponent a => Uniform (Index1 a)
VertexAttribComponent a => VertexAttrib (Index1 a)

Generic Vertex Attributes
newtype AttribLocation

Constructors

AttribLocation GLuint |

Instances

Eq AttribLocation
Ord AttribLocation
Show AttribLocation

class VertexAttrib a

Instances

VertexAttribComponent a => VertexAttrib (Color3 a)
VertexAttribComponent a => VertexAttrib (Color4 a)
VertexAttribComponent a => VertexAttrib (FogCoord1 a)
VertexAttribComponent a => VertexAttrib (Index1 a)
VertexAttribComponent a => VertexAttrib (Normal3 a)
VertexAttribComponent a => VertexAttrib (TexCoord1 a)
VertexAttribComponent a => VertexAttrib (TexCoord2 a)
VertexAttribComponent a => VertexAttrib (TexCoord3 a)
VertexAttribComponent a => VertexAttrib (TexCoord4 a)
VertexAttribComponent a => VertexAttrib (Vertex2 a)
VertexAttribComponent a => VertexAttrib (Vertex3 a)
VertexAttribComponent a => VertexAttrib (Vertex4 a)

class VertexAttribComponent a where

The class of all types which can be used as a generic vertex attribute.
Methods

vertexAttrib1 :: AttribLocation -> a -> IO ()
vertexAttrib2 :: AttribLocation -> a -> a -> IO ()
vertexAttrib3 :: AttribLocation -> a -> a -> a -> IO ()
vertexAttrib4 :: AttribLocation -> a -> a -> a -> a -> IO ()
vertexAttrib1v :: AttribLocation -> Ptr a -> IO ()
vertexAttrib2v :: AttribLocation -> Ptr a -> IO ()
vertexAttrib3v :: AttribLocation -> Ptr a -> IO ()
vertexAttrib4v :: AttribLocation -> Ptr a -> IO ()

Instances

VertexAttribComponent GLdouble
VertexAttribComponent GLfloat
VertexAttribComponent GLshort

Texture Units
newtype TextureUnit

Identifies a texture unit via its number, which must be in the range of (0 .. maxTextureUnit).
Constructors

TextureUnit GLuint |

Instances

Eq TextureUnit
Ord TextureUnit
Show TextureUnit

maxTextureUnit :: GettableStateVar TextureUnit
An implementation must support at least 2 texture units, but it may support up to 32 ones. This state variable can be used to query the actual implementation limit.
Produced by Haddock version 0.8