| OpenGL-2.4.0.1: A binding for the OpenGL graphics system | 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
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

data IntegerHandling

= ToFloat
| ToNormalizedFloat
| KeepIntegral

newtype AttribLocation = AttribLocation GLuint
currentVertexAttrib :: AttribLocation -> StateVar (Vertex4 GLfloat)
currentVertexAttribI :: AttribLocation -> StateVar (Vertex4 GLint)
currentVertexAttribIu :: AttribLocation -> StateVar (Vertex4 GLuint)
class VertexAttrib a where

vertexAttrib :: IntegerHandling -> AttribLocation -> a -> IO ()
vertexAttribv :: IntegerHandling -> AttribLocation -> Ptr a -> IO ()

class (Storable a, Num a) => 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 ()
vertexAttrib1N :: AttribLocation -> a -> IO ()
vertexAttrib2N :: AttribLocation -> a -> a -> IO ()
vertexAttrib3N :: AttribLocation -> a -> a -> a -> IO ()
vertexAttrib4N :: AttribLocation -> a -> a -> a -> a -> IO ()
vertexAttrib1I :: AttribLocation -> a -> IO ()
vertexAttrib2I :: AttribLocation -> a -> a -> IO ()
vertexAttrib3I :: AttribLocation -> a -> a -> a -> IO ()
vertexAttrib4I :: 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 ()
vertexAttrib1Nv :: AttribLocation -> Ptr a -> IO ()
vertexAttrib2Nv :: AttribLocation -> Ptr a -> IO ()
vertexAttrib3Nv :: AttribLocation -> Ptr a -> IO ()
vertexAttrib4Nv :: AttribLocation -> Ptr a -> IO ()
vertexAttrib1Iv :: AttribLocation -> Ptr a -> IO ()
vertexAttrib2Iv :: AttribLocation -> Ptr a -> IO ()
vertexAttrib3Iv :: AttribLocation -> Ptr a -> IO ()
vertexAttrib4Iv :: AttribLocation -> Ptr a -> IO ()

newtype TextureUnit = TextureUnit GLuint
maxTextureUnit :: GettableStateVar TextureUnit

Vertex Coordinates

class Vertex a where | Source

Specify the (x, y, z, w) coordinates of a four-dimensional vertex. This must only be done during Graphics.Rendering.OpenGL.GL.BeginEnd.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 () | Source

vertexv :: Ptr a -> IO () | Source

Instances

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

class VertexComponent a | Source

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

VertexComponent GLdouble
VertexComponent GLfloat
VertexComponent GLint
VertexComponent GLshort

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) | Source

The current texture coordinates (s, t, r, q) for the current texture unit (see Graphics.Rendering.OpenGL.GL.CoordTrans.activeTexture). The initial value is (0,0,0,1) for all texture units.

class TexCoord a where | Source

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

texCoord :: a -> IO () | Source

texCoordv :: Ptr a -> IO () | Source

multiTexCoord :: TextureUnit -> a -> IO () | Source

multiTexCoordv :: TextureUnit -> Ptr a -> IO () | Source

Instances

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

class TexCoordComponent a | Source

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 | Source

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

TexCoord1 a |

Instances

Functor TexCoord1
Typeable1 TexCoord1
Traversable TexCoord1
Foldable TexCoord1
Applicative TexCoord1
ControlPoint TexCoord1
Bounded a => Bounded (TexCoord1 a)
Eq a => Eq (TexCoord1 a)
Ord a => Ord (TexCoord1 a)
Read a => Read (TexCoord1 a)
Show a => Show (TexCoord1 a)
Ix a => Ix (TexCoord1 a)
Typeable a => Typeable (TexCoord1 a)
Storable a => Storable (TexCoord1 a)
VertexAttribComponent a => VertexAttrib (TexCoord1 a)
TexCoordComponent a => TexCoord (TexCoord1 a)
UniformComponent a => Uniform (TexCoord1 a)

data TexCoord2 a | Source

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

TexCoord2 !a !a |

Instances

Functor TexCoord2
Typeable1 TexCoord2
Traversable TexCoord2
Foldable TexCoord2
Applicative TexCoord2
ControlPoint TexCoord2
Bounded a => Bounded (TexCoord2 a)
Eq a => Eq (TexCoord2 a)
Ord a => Ord (TexCoord2 a)
Read a => Read (TexCoord2 a)
Show a => Show (TexCoord2 a)
Ix a => Ix (TexCoord2 a)
Typeable a => Typeable (TexCoord2 a)
Storable a => Storable (TexCoord2 a)
VertexAttribComponent a => VertexAttrib (TexCoord2 a)
TexCoordComponent a => TexCoord (TexCoord2 a)
UniformComponent a => Uniform (TexCoord2 a)

data TexCoord3 a | Source

Texture coordinates with q=1.
Constructors

TexCoord3 !a !a !a |

Instances

Functor TexCoord3
Typeable1 TexCoord3
Traversable TexCoord3
Foldable TexCoord3
Applicative TexCoord3
ControlPoint TexCoord3
Bounded a => Bounded (TexCoord3 a)
Eq a => Eq (TexCoord3 a)
Ord a => Ord (TexCoord3 a)
Read a => Read (TexCoord3 a)
Show a => Show (TexCoord3 a)
Ix a => Ix (TexCoord3 a)
Typeable a => Typeable (TexCoord3 a)
Storable a => Storable (TexCoord3 a)
VertexAttribComponent a => VertexAttrib (TexCoord3 a)
TexCoordComponent a => TexCoord (TexCoord3 a)
UniformComponent a => Uniform (TexCoord3 a)

data TexCoord4 a | Source

Fully-fledged four-dimensional texture coordinates.
Constructors

TexCoord4 !a !a !a !a |

Instances

Functor TexCoord4
Typeable1 TexCoord4
Traversable TexCoord4
Foldable TexCoord4
Applicative TexCoord4
ControlPoint TexCoord4
Bounded a => Bounded (TexCoord4 a)
Eq a => Eq (TexCoord4 a)
Ord a => Ord (TexCoord4 a)
Read a => Read (TexCoord4 a)
Show a => Show (TexCoord4 a)
Ix a => Ix (TexCoord4 a)
Typeable a => Typeable (TexCoord4 a)
Storable a => Storable (TexCoord4 a)
VertexAttribComponent a => VertexAttrib (TexCoord4 a)
TexCoordComponent a => TexCoord (TexCoord4 a)
UniformComponent a => Uniform (TexCoord4 a)

Normal

currentNormal :: StateVar (Normal3 GLfloat) | Source

The current normal (x, y, z). The initial value is the unit vector (0, 0, 1).

class Normal a where | Source

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 Graphics.Rendering.OpenGL.GL.CoordTrans.normalize is enabled, then normals of any length specified with `normal` or `normalv` are normalized after transformation. If Graphics.Rendering.OpenGL.GL.CoordTrans.rescaleNormal is enabled, normals are scaled by a scaling factor derived from the modelview matrix. Graphics.Rendering.OpenGL.GL.CoordTrans.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 () | Source

normalv :: Ptr a -> IO () | Source

Instances

NormalComponent a => Normal (Normal3 a)

class NormalComponent a | Source

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 | Source

Constructors

Normal3 !a !a !a |

Instances

Functor Normal3
Typeable1 Normal3
Traversable Normal3
Foldable Normal3
Applicative Normal3
ControlPoint Normal3
Bounded a => Bounded (Normal3 a)
Eq a => Eq (Normal3 a)
Ord a => Ord (Normal3 a)
Read a => Read (Normal3 a)
Show a => Show (Normal3 a)
Ix a => Ix (Normal3 a)
Typeable a => Typeable (Normal3 a)
Storable a => Storable (Normal3 a)
VertexAttribComponent a => VertexAttrib (Normal3 a)
NormalComponent a => Normal (Normal3 a)
UniformComponent a => Uniform (Normal3 a)

Fog Coordinate

currentFogCoord :: StateVar (FogCoord1 GLfloat) | Source

The current fog coordinate. The initial value is 0.

class FogCoord a where | Source

Change the current fog coordinate.
Methods

fogCoord :: a -> IO () | Source

fogCoordv :: Ptr a -> IO () | Source

Instances

FogCoordComponent a => FogCoord (FogCoord1 a)

class FogCoordComponent a | Source

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

FogCoordComponent GLdouble
FogCoordComponent GLfloat

newtype FogCoord1 a | Source

A fog coordinate.
Constructors

FogCoord1 a |

Instances

Functor FogCoord1
Typeable1 FogCoord1
Traversable FogCoord1
Foldable FogCoord1
Applicative FogCoord1
Bounded a => Bounded (FogCoord1 a)
Eq a => Eq (FogCoord1 a)
Ord a => Ord (FogCoord1 a)
Read a => Read (FogCoord1 a)
Show a => Show (FogCoord1 a)
Ix a => Ix (FogCoord1 a)
Typeable a => Typeable (FogCoord1 a)
Storable a => Storable (FogCoord1 a)
VertexAttribComponent a => VertexAttrib (FogCoord1 a)
FogCoordComponent a => FogCoord (FogCoord1 a)
UniformComponent a => Uniform (FogCoord1 a)

Color and Secondary Color

rgbaMode :: GettableStateVar Bool | Source

If `rgbaMode` contains `True`, the color buffers store RGBA value. If color indexes are stored, it contains `False`.

currentColor :: StateVar (Color4 GLfloat) | Source

class Color a where | Source

Change the current color.
Methods

color :: a -> IO () | Source

colorv :: Ptr a -> IO () | Source

Instances

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

currentSecondaryColor :: StateVar (Color3 GLfloat) | Source

class SecondaryColor a where | Source

Change the current secondary color.
Methods

secondaryColor :: a -> IO () | Source

secondaryColorv :: Ptr a -> IO () | Source

Instances

ColorComponent a => SecondaryColor (Color3 a)

class ColorComponent a | Source

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

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

data Color3 a | Source

Constructors

Color3 !a !a !a |

Instances

Functor Color3
Typeable1 Color3
Traversable Color3
Foldable Color3
Applicative Color3
Bounded a => Bounded (Color3 a)
Eq a => Eq (Color3 a)
Ord a => Ord (Color3 a)
Read a => Read (Color3 a)
Show a => Show (Color3 a)
Ix a => Ix (Color3 a)
Typeable a => Typeable (Color3 a)
Storable a => Storable (Color3 a)
VertexAttribComponent a => VertexAttrib (Color3 a)
ColorComponent a => SecondaryColor (Color3 a)
ColorComponent a => Color (Color3 a)
UniformComponent a => Uniform (Color3 a)

data Color4 a | Source

A fully-fledged RGBA color.
Constructors

Color4 !a !a !a !a |

Instances

Functor Color4
Typeable1 Color4
Traversable Color4
Foldable Color4
Applicative Color4
ControlPoint Color4
Bounded a => Bounded (Color4 a)
Eq a => Eq (Color4 a)
Ord a => Ord (Color4 a)
Read a => Read (Color4 a)
Show a => Show (Color4 a)
Ix a => Ix (Color4 a)
Typeable a => Typeable (Color4 a)
Storable a => Storable (Color4 a)
VertexAttribComponent a => VertexAttrib (Color4 a)
ColorComponent a => Color (Color4 a)
UniformComponent a => Uniform (Color4 a)

currentIndex :: StateVar (Index1 GLint) | Source

class Index a where | Source

Change the current color index.
Methods

index :: a -> IO () | Source

indexv :: Ptr a -> IO () | Source

Instances

IndexComponent a => Index (Index1 a)

class IndexComponent a | Source

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 | Source

A color index.
Constructors

Index1 a |

Instances

Functor Index1
Typeable1 Index1
Traversable Index1
Foldable Index1
Applicative Index1
ControlPoint Index1
Bounded a => Bounded (Index1 a)
Eq a => Eq (Index1 a)
Ord a => Ord (Index1 a)
Read a => Read (Index1 a)
Show a => Show (Index1 a)
Ix a => Ix (Index1 a)
Typeable a => Typeable (Index1 a)
Storable a => Storable (Index1 a)
VertexAttribComponent a => VertexAttrib (Index1 a)
IndexComponent a => Index (Index1 a)
UniformComponent a => Uniform (Index1 a)

Generic Vertex Attributes

data IntegerHandling | Source

Constructors

ToFloat |
ToNormalizedFloat |
KeepIntegral |

Instances

Eq IntegerHandling
Ord IntegerHandling
Show IntegerHandling

newtype AttribLocation | Source

Constructors

AttribLocation GLuint |

Instances

Eq AttribLocation
Ord AttribLocation
Show AttribLocation

currentVertexAttrib :: AttribLocation -> StateVar (Vertex4 GLfloat) | Source

currentVertexAttribI :: AttribLocation -> StateVar (Vertex4 GLint) | Source

currentVertexAttribIu :: AttribLocation -> StateVar (Vertex4 GLuint) | Source

class VertexAttrib a where | Source

Methods

vertexAttrib :: IntegerHandling -> AttribLocation -> a -> IO () | Source

vertexAttribv :: IntegerHandling -> AttribLocation -> Ptr a -> IO () | Source

Instances

VertexAttribComponent a => VertexAttrib (Vertex1 a)
VertexAttribComponent a => VertexAttrib (Vertex2 a)
VertexAttribComponent a => VertexAttrib (Vertex3 a)
VertexAttribComponent a => VertexAttrib (Vertex4 a)
VertexAttribComponent a => VertexAttrib (Vector1 a)
VertexAttribComponent a => VertexAttrib (Vector2 a)
VertexAttribComponent a => VertexAttrib (Vector3 a)
VertexAttribComponent a => VertexAttrib (Vector4 a)
VertexAttribComponent a => VertexAttrib (Index1 a)
VertexAttribComponent a => VertexAttrib (Color4 a)
VertexAttribComponent a => VertexAttrib (Color3 a)
VertexAttribComponent a => VertexAttrib (FogCoord1 a)
VertexAttribComponent a => VertexAttrib (Normal3 a)
VertexAttribComponent a => VertexAttrib (TexCoord4 a)
VertexAttribComponent a => VertexAttrib (TexCoord3 a)
VertexAttribComponent a => VertexAttrib (TexCoord2 a)
VertexAttribComponent a => VertexAttrib (TexCoord1 a)

class (Storable a, Num a) => VertexAttribComponent a where | Source

The class of all types which can be used as a generic vertex attribute. NOTE: Do not use the methods of this class directly, they were only exported by accident and will be hidden in future versions of this package.
Methods

vertexAttrib1 :: AttribLocation -> a -> IO () | Source

vertexAttrib2 :: AttribLocation -> a -> a -> IO () | Source

vertexAttrib3 :: AttribLocation -> a -> a -> a -> IO () | Source

vertexAttrib4 :: AttribLocation -> a -> a -> a -> a -> IO () | Source

vertexAttrib1N :: AttribLocation -> a -> IO () | Source

vertexAttrib2N :: AttribLocation -> a -> a -> IO () | Source

vertexAttrib3N :: AttribLocation -> a -> a -> a -> IO () | Source

vertexAttrib4N :: AttribLocation -> a -> a -> a -> a -> IO () | Source

vertexAttrib1I :: AttribLocation -> a -> IO () | Source

vertexAttrib2I :: AttribLocation -> a -> a -> IO () | Source

vertexAttrib3I :: AttribLocation -> a -> a -> a -> IO () | Source

vertexAttrib4I :: AttribLocation -> a -> a -> a -> a -> IO () | Source

vertexAttrib1v :: AttribLocation -> Ptr a -> IO () | Source

vertexAttrib2v :: AttribLocation -> Ptr a -> IO () | Source

vertexAttrib3v :: AttribLocation -> Ptr a -> IO () | Source

vertexAttrib4v :: AttribLocation -> Ptr a -> IO () | Source

vertexAttrib1Nv :: AttribLocation -> Ptr a -> IO () | Source

vertexAttrib2Nv :: AttribLocation -> Ptr a -> IO () | Source

vertexAttrib3Nv :: AttribLocation -> Ptr a -> IO () | Source

vertexAttrib4Nv :: AttribLocation -> Ptr a -> IO () | Source

vertexAttrib1Iv :: AttribLocation -> Ptr a -> IO () | Source

vertexAttrib2Iv :: AttribLocation -> Ptr a -> IO () | Source

vertexAttrib3Iv :: AttribLocation -> Ptr a -> IO () | Source

vertexAttrib4Iv :: AttribLocation -> Ptr a -> IO () | Source

Instances

VertexAttribComponent GLbyte
VertexAttribComponent GLclampd
VertexAttribComponent GLclampf
VertexAttribComponent GLdouble
VertexAttribComponent GLfloat
VertexAttribComponent GLint
VertexAttribComponent GLshort
VertexAttribComponent GLubyte
VertexAttribComponent GLuint
VertexAttribComponent GLushort

Texture Units

newtype TextureUnit | Source

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 | Source

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 2.4.2