# glEvalMesh

compute a one- or two-dimensional grid of points or lines

## Signature

glEvalMesh( )->
glEvalMesh1( GLenum ( mode ) , GLint ( i1 ) , GLint ( i2 ) )-> void
glEvalMesh1( mode , i1 , )
glEvalMesh2( GLenum ( mode ) , GLint ( i1 ) , GLint ( i2 ) , GLint ( j1 ) , GLint ( j2 ) )-> void
glEvalMesh2( mode , i1 , i2 , j1 , )

## Parameters

VariablesDescription
mode
In glEvalMesh1 , specifies whether to compute a one-dimensional mesh of points or lines. Symbolic constants GL_POINT and GL_LINE are accepted.
i1, i2
Specify the first and last integer values for grid domain variable $\mathit{i}$ .

## Parameters

mode
In glEvalMesh2 , specifies whether to compute a two-dimensional mesh of points, lines, or polygons. Symbolic constants GL_POINT , GL_LINE , and GL_FILL are accepted.
i1
i2
Specify the first and last integer values for grid domain variable $\mathit{i}$ .
j1
j2
Specify the first and last integer values for grid domain variable $\mathit{j}$ .

## Description

glMapGrid and glEvalMesh are used in tandem to efficiently generate and evaluate a series of evenly-spaced map domain values. glEvalMesh steps through the integer domain of a one- or two-dimensional grid, whose range is the domain of the evaluation maps specified by glMap1 and glMap2 . mode determines whether the resulting vertices are connected as points, lines, or filled polygons.
In the one-dimensional case, glEvalMesh1 , the mesh is generated as if the following code fragment were executed:
glBegin( type ); for ( i = i1 ; i <= i2 ; i += 1 ) glEvalCoord1( $i\mathit{u}+{\mathit{u}}_{1}$ ); glEnd(); ); glEnd();
where
$\mathit{u}=\frac{\left({\mathit{u}}_{2}-{\mathit{u}}_{1}\right)}{\mathit{n}}$
and $\mathit{n}$ , ${\mathit{u}}_{1}$ , and ${\mathit{u}}_{2}$ are the arguments to the most recent glMapGrid1 command. type is GL_POINTS if mode is GL_POINT , or GL_LINES if mode is GL_LINE .
The one absolute numeric requirement is that if $\mathit{i}=\mathit{n}$ , then the value computed from $\mathit{i}\mathit{u}+{\mathit{u}}_{1}$ is exactly ${\mathit{u}}_{2}$ .
In the two-dimensional case, glEvalMesh2 , let .cp
$\mathit{u}=\frac{\left({\mathit{u}}_{2}-{\mathit{u}}_{1}\right)}{\mathit{n}}$
$\mathit{v}=\frac{\left({\mathit{v}}_{2}-{\mathit{v}}_{1}\right)}{\mathit{m}}$
where $\mathit{n}$ , ${\mathit{u}}_{1}$ , ${\mathit{u}}_{2}$ , $\mathit{m}$ , ${\mathit{v}}_{1}$ , and ${\mathit{v}}_{2}$ are the arguments to the most recent glMapGrid2 command. Then, if mode is GL_FILL , the glEvalMesh2 command is equivalent to:
for ( j = j1 ; j < j2 ; j += 1 ) { glBegin( GL_QUAD_STRIP ); for ( i = i1 ; i <= i2 ; i += 1 ) { glEvalCoord2( $i\mathit{u}+{\mathit{u}}_{1},j\mathit{v}+{\mathit{v}}_{1}$ ); glEvalCoord2( ); glEvalCoord2( $i\mathit{u}+{\mathit{u}}_{1},\left(j+1\right)\mathit{v}+{\mathit{v}}_{1}$ ); } glEnd(); } ); } glEnd(); }
If mode is GL_LINE , then a call to glEvalMesh2 is equivalent to:
for ( j = j1 ; j <= j2 ; j += 1 ) { glBegin( GL_LINE_STRIP ); for ( i = i1 ; i <= i2 ; i += 1 ) glEvalCoord2( $i\mathit{u}+{\mathit{u}}_{1},j\mathit{v}+{\mathit{v}}_{1}$ ); glEnd(); } for ( i = ); glEnd(); } for ( i = i1 ; i <= i2 ; i += 1 ) { glBegin( GL_LINE_STRIP ); for ( j = j1 ; j <= j1 ; j += 1 ) glEvalCoord2( $i\mathit{u}+{\mathit{u}}_{1},j\mathit{v}+{\mathit{v}}_{1}$ ); glEnd(); } ); glEnd(); }
And finally, if mode is GL_POINT , then a call to glEvalMesh2 is equivalent to:
glBegin( GL_POINTS ); for ( j = j1 ; j <= j2 ; j += 1 ) for ( i = i1 ; i <= i2 ; i += 1 ) glEvalCoord2( $i\mathit{u}+{\mathit{u}}_{1},j\mathit{v}+{\mathit{v}}_{1}$ ); glEnd(); ); glEnd();
In all three cases, the only absolute numeric requirements are that if $\mathit{i}=\mathit{n}$ , then the value computed from $\mathit{i}\mathit{u}+{\mathit{u}}_{1}$ is exactly ${\mathit{u}}_{2}$ , and if $\mathit{j}=\mathit{m}$ , then the value computed from $\mathit{j}\mathit{v}+{\mathit{v}}_{1}$ is exactly ${\mathit{v}}_{2}$ .

## Errors

GL_INVALID_ENUM is generated if mode is not an accepted value.
GL_INVALID_OPERATION is generated if glEvalMesh is executed between the execution of glBegin and the corresponding execution of glEnd .

## Associated Gets

glGet with argument GL_MAP1_GRID_DOMAIN
glGet with argument GL_MAP2_GRID_DOMAIN
glGet with argument GL_MAP1_GRID_SEGMENTS
glGet with argument GL_MAP2_GRID_SEGMENTS