OpenGL- A binding for the OpenGL graphics system

MaintainerSven Panne <>
Safe HaskellNone




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


Vertex Coordinates

class Vertex a whereSource

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.


vertex :: a -> IO ()Source

vertexv :: Ptr a -> IO ()Source

class VertexComponent a Source

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

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 activeTexture). The initial value is (0,0,0,1) for all texture units.

class TexCoord a whereSource

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

class TexCoordComponent a Source

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


currentNormal :: StateVar (Normal3 GLfloat)Source

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

class Normal a whereSource

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.


normal :: a -> IO ()Source

normalv :: Ptr a -> IO ()Source


class NormalComponent a Source

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

Fog Coordinate

currentFogCoord :: StateVar (FogCoord1 GLfloat)Source

The current fog coordinate. The initial value is 0.

class FogCoord a whereSource

Change the current fog coordinate.


fogCoord :: a -> IO ()Source

fogCoordv :: Ptr a -> IO ()Source

class FogCoordComponent a Source

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

Color and Secondary Color

rgbaMode :: GettableStateVar BoolSource

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

class Color a whereSource

Change the current color.


color :: a -> IO ()Source

colorv :: Ptr a -> IO ()Source


class SecondaryColor a whereSource

Change the current secondary color.


secondaryColor :: a -> IO ()Source

secondaryColorv :: Ptr a -> IO ()Source

data Color4 a Source

A fully-fledged RGBA color.


Color4 !a !a !a !a 

class Index a whereSource

Change the current color index.


index :: a -> IO ()Source

indexv :: Ptr a -> IO ()Source


class IndexComponent a Source

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

Generic Vertex Attributes

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

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.

Texture Units

newtype TextureUnit Source

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


TextureUnit GLuint 

maxTextureUnit :: GettableStateVar TextureUnitSource

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.