OpenGL-2.13.1.0: A binding for the OpenGL graphics system

Copyright | (c) Sven Panne 2002-2013
License | BSD3
Maintainer | Sven Panne <svenpanne@gmail.com>
Stability | stable
Portability | portable
Safe Haskell | None
Language | Haskell2010

Graphics.Rendering.OpenGL.GL.VertexSpec

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

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 (Vertex4 a) |
VertexComponent a => Vertex (Vertex3 a) |
VertexComponent a => Vertex (Vertex2 a) |

class VertexComponent a

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

Minimal complete definition

vertex2, vertex3, vertex4, vertex2v, vertex3v, vertex4v

Instances

VertexComponent GLshort |
VertexComponent GLint |
VertexComponent GLfloat |
VertexComponent GLdouble |

# 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 (TexCoord4 a) |
TexCoordComponent a => TexCoord (TexCoord3 a) |
TexCoordComponent a => TexCoord (TexCoord2 a) |
TexCoordComponent a => TexCoord (TexCoord1 a) |

class TexCoordComponent a

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

Minimal complete definition

texCoord1, texCoord2, texCoord3, texCoord4, texCoord1v, texCoord2v, texCoord3v, texCoord4v, multiTexCoord1, multiTexCoord2, multiTexCoord3, multiTexCoord4, multiTexCoord1v, multiTexCoord2v, multiTexCoord3v, multiTexCoord4v

Instances

TexCoordComponent GLshort |
TexCoordComponent GLint |
TexCoordComponent GLfloat |
TexCoordComponent GLdouble |

newtype TexCoord1 a

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

Constructors

TexCoord1 a |

Instances

Functor TexCoord1 |
Applicative TexCoord1 |
Foldable TexCoord1 |
Traversable 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) |
Storable a => Storable (TexCoord1 a) |
VertexAttribComponent a => VertexAttrib (TexCoord1 a) |
TexCoordComponent a => TexCoord (TexCoord1 a) |
UniformComponent a => Uniform (TexCoord1 a) |

data TexCoord2 a

Texture coordinates with r=0 and q=1.

Constructors

TexCoord2 !a !a |

Instances

Functor TexCoord2 |
Applicative TexCoord2 |
Foldable TexCoord2 |
Traversable 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) |
Storable a => Storable (TexCoord2 a) |
VertexAttribComponent a => VertexAttrib (TexCoord2 a) |
TexCoordComponent a => TexCoord (TexCoord2 a) |
UniformComponent a => Uniform (TexCoord2 a) |

data TexCoord3 a

Texture coordinates with q=1.

Constructors

TexCoord3 !a !a !a |

Instances

Functor TexCoord3 |
Applicative TexCoord3 |
Foldable TexCoord3 |
Traversable 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) |
Storable a => Storable (TexCoord3 a) |
VertexAttribComponent a => VertexAttrib (TexCoord3 a) |
TexCoordComponent a => TexCoord (TexCoord3 a) |
UniformComponent a => Uniform (TexCoord3 a) |

data TexCoord4 a

Fully-fledged four-dimensional texture coordinates.

Constructors

TexCoord4 !a !a !a !a |

Instances

Functor TexCoord4 |
Applicative TexCoord4 |
Foldable TexCoord4 |
Traversable 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) |
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)

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.

Minimal complete definition

normal3, normal3v

Instances

NormalComponent GLbyte |
NormalComponent GLshort |
NormalComponent GLint |
NormalComponent GLfloat |
NormalComponent GLdouble |

data Normal3 a

Constructors

Normal3 !a !a !a |

Instances

Functor Normal3 |
Applicative Normal3 |
Foldable Normal3 |
Traversable 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) |
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)

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.

Minimal complete definition

fogCoord1, fogCoord1v

Instances

FogCoordComponent GLfloat |
FogCoordComponent GLdouble |

newtype FogCoord1 a

A fog coordinate.

Constructors

FogCoord1 a |

Instances

Functor FogCoord1 |
Applicative FogCoord1 |
Foldable FogCoord1 |
Traversable 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) |
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

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 (Color4 a) |
ColorComponent a => Color (Color3 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.

Minimal complete definition

color3, color4, color3v, color4v, secondaryColor3, secondaryColor3v

Instances

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

data Color3 a

Constructors

Color3 !a !a !a |

Instances

Functor Color3 |
Applicative Color3 |
Foldable Color3 |
Traversable 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) |
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

A fully-fledged RGBA color.

Constructors

Color4 !a !a !a !a |

Instances

Functor Color4 |
Applicative Color4 |
Foldable Color4 |
Traversable 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) |
Storable a => Storable (Color4 a) |
VertexAttribComponent a => VertexAttrib (Color4 a) |
ColorComponent a => Color (Color4 a) |
UniformComponent a => Uniform (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.

Minimal complete definition

index1, index1v

Instances

IndexComponent GLubyte |
IndexComponent GLshort |
IndexComponent GLint |
IndexComponent GLfloat |
IndexComponent GLdouble |

newtype Index1 a

A color index.

Constructors

Index1 a |

Instances

Functor Index1 |
Applicative Index1 |
Foldable Index1 |
Traversable 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) |
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

Constructors

ToFloat |
ToNormalizedFloat |
KeepIntegral |

Instances

Eq IntegerHandling |
Ord IntegerHandling |
Show IntegerHandling |

newtype AttribLocation

Constructors

AttribLocation GLuint |

Instances

Eq AttribLocation |
Ord AttribLocation |
Show AttribLocation |

currentVertexAttrib :: AttribLocation -> StateVar (Vertex4 GLfloat)

currentVertexAttribI :: AttribLocation -> StateVar (Vertex4 GLint)

currentVertexAttribIu :: AttribLocation -> StateVar (Vertex4 GLuint)

class VertexAttrib a where

Methods

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

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

Instances

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) |
VertexAttribComponent a => VertexAttrib (Vector4 a) |
VertexAttribComponent a => VertexAttrib (Vector3 a) |
VertexAttribComponent a => VertexAttrib (Vector2 a) |
VertexAttribComponent a => VertexAttrib (Vector1 a) |
VertexAttribComponent a => VertexAttrib (Vertex4 a) |
VertexAttribComponent a => VertexAttrib (Vertex3 a) |
VertexAttribComponent a => VertexAttrib (Vertex2 a) |
VertexAttribComponent a => VertexAttrib (Vertex1 a) |

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

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.

Minimal complete definition

vertexAttrib4v, vertexAttrib4Nv, vertexAttrib4Iv

Methods

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

Instances

VertexAttribComponent GLbyte |
VertexAttribComponent GLubyte |
VertexAttribComponent GLshort |
VertexAttribComponent GLushort |
VertexAttribComponent GLint |
VertexAttribComponent GLuint |
VertexAttribComponent GLfloat |
VertexAttribComponent GLdouble |

# 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 |
Storable TextureUnit |
Uniform 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.