---
name: "glEvalMesh"
section: "3x"
platform: "linux"
package: "xlibmesa-gl-dev"
version: "4.3.0.dfsg.1-14sarge7"
release: "Debian 3.1 (Sarge)"
platforms: ["linux"]
url: "https://new.carta.tech/glEvalMesh"
---

# glEvalMesh(3x)

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

## NAME

**glEvalMesh1, glEvalMesh2** - compute a one- or two-dimensional grid of points or lines

## C SPECIFICATION

void **glEvalMesh1**( GLenum *mode*,

```
	GLint i1,
	GLint i2 )
```

delim $$

## PARAMETERS

- *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 $i$.

## C SPECIFICATION

void **glEvalMesh2**( GLenum *mode*,

```
	GLint i1,
	GLint i2,
	GLint j1,
	GLint j2 )
```

## 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 $i$.

- *j1*, *j2*

  Specify the first and last integer values for grid domain variable $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$^cdot^DELTA u ~+~ u sub 1$ ); glEnd();

  *where*

  *$ DELTA u ~=~ (u sub 2 ~-~ u sub 1 ) ^/^ n$*

*and $n$, $u sub 1$, and $u sub 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 $i ~=~ n$, then the* *value computed from $ i^cdot^DELTA u ~+~ u sub 1$ is exactly $u sub 2$.*

*In the two-dimensional case,* **glEvalMesh2***, let*

```

```

-

  *$ DELTA u ~=~ mark ( u sub 2 ~-~ u sub 1 ) ^/^ n$*

  *$ DELTA v ~=~ lineup ( v sub 2 ~-~ v sub 1 ) ^/^ m$,*

*where $n$, $u sub 1$, $u sub 2$, $m$, $v sub 1$, and $v sub 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$^cdot^DELTA u ~+~ u sub 1$, j$^cdot^DELTA v ~+~ v sub 1$ );\
         glEvalCoord2( i$^cdot^DELTA u ~+~ u sub 1$, (j+1)$^cdot^DELTA v ~+~ v sub 1$ );\
      }\
      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$^cdot^DELTA u ~+~ u sub 1$, j$^cdot^DELTA v ~+~ v sub 1$ );\
      glEnd(); }

  for ( i = *i1*;  i \<= *i2*; i += 1 ) {\
      glBegin( GL\_LINE\_STRIP );\
      for ( j = *j1*; j \<= *j1*; j += 1 )\
         glEvalCoord2( i$^cdot^DELTA u ~+~ u sub 1$, j$^cdot^DELTA v ~+~ v sub 1 $ );\
      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$^cdot^DELTA u ~+~ u sub 1$, j$^cdot^DELTA v ~+~ v sub 1$ ); glEnd();

*In all three cases, the only absolute numeric requirements are that if $i~=~n$,* *then the value computed from $i^cdot^DELTA u ~+~ u sub 1$ is exactly $u* *sub 2$, and if $j~=~m$, then the value computed from* *$j ^cdot^ DELTA v ~+~ v sub 1$ is exactly $v sub 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**

## SEE ALSO

**glBegin(3G)***,* **glEvalCoord(3G)***,* **glEvalPoint(3G)***,* **glMap1(3G)***,* **glMap2(3G)***,* **glMapGrid(3G)**
