Keep the following points in mind when porting polygons and quadrilaterals:
If your IRIS GL code uses these functions, you'll have to rewrite the code using glBegin(GL_POLYGON).
The following table lists the IRIS GL polygon drawing functions and their equivalent OpenGL functions.
| IRIS GL Function | OpenGL Function | Meaning |
|---|---|---|
| bgnpolygon endpolygon |
glBegin(GL_POLYGON) glEnd | Vertices define boundary of a simple convex polygon. |
| — | glBegin(GL_QUADS) glEnd |
Interpret quadruples of vertices as quadrilaterals. |
| bgnqstrip endqstrip |
glBegin(GL_QUAD _STRIP) glEnd |
Interpret vertices as linked strips of quadrilaterals. |
| — | glEdgeFlag | |
| polymode | glPolygonMode | Set polygon drawing mode. |
| rect rectf |
glRect | Draw a rectangle. |
| sbox sboxf |
— | Draw a screen-aligned rectangle. |
The OpenGL function glPolygonMode lets you specify which side of a polygon (the back or the front) the mode applies to. Its syntax is:
void glPolygonMode( GLenum face, GLenum mode );
where face is one of:
| GL_FRONT | mode which applies to front-facing polygons |
| GL_BACK | mode which applies to back-facing polygons |
| GL_FRONT_AND_BACK | mode which applies to both front- and back-facing polygons |
The GL_FRONT_AND_BACK mode is equivalent to the IRIS GL polymode function. The following table lists IRIS GL polygon modes and their equivalent OpenGL modes.
| IRIS GL Mode | OpenGL Mode | Meaning |
|---|---|---|
| PYM_POINT | GL_POINT | Draw vertices as points. |
| PYM_LINE | GL_LINE | Draw boundary edges as line segments. |
| PYM_FILL | GL_FILL | Draw polygon interior filled. |
| PYM_HOLLOW | — | Fill only interior pixels at the boundaries. |
When porting IRIS GL polygon stipples, keep the following points in mind:
For more information on porting polygon stipples, see Porting Pixel Operations.
The following table lists IRIS GL polygon stipple functions and their equivalent OpenGL functions.
| IRIS GL Function | OpenGL Function | Meaning |
|---|---|---|
| defpattern | glPolygonStipple | Set the stipple pattern. |
| setpattern | — | OpenGL keeps only one polygon stipple pattern. |
| getpattern | glGetPolygonStipple | Return the stipple bitmap (used to return an index). |
In OpenGL, you enable and disable polygon stippling by passing GL_POLYGON_STIPPLE as a parameter for glEnable and glDisable.
The following OpenGL code sample demonstrates polygon stippling:
void display(void)
{
GLubyte fly[] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x03, 0x80, 0x01, 0xC0, 0x06, 0xC0, 0x03, 0x60,
0x04, 0x60, 0x06, 0x20, 0x04, 0x30, 0x0C, 0x20,
0x04, 0x18, 0x18, 0x20, 0x04, 0x0C, 0x30, 0x20,
0x04, 0x06, 0x60, 0x20, 0x44, 0x03, 0xC0, 0x22,
0x44, 0x01, 0x80, 0x22, 0x44, 0x01, 0x80, 0x22,
0x44, 0x01, 0x80, 0x22, 0x44, 0x01, 0x80, 0x22,
0x44, 0x01, 0x80, 0x22, 0x44, 0x01, 0x80, 0x22,
0x66, 0x01, 0x80, 0x66, 0x33, 0x01, 0x80, 0xCC,
0x19, 0x81, 0x81, 0x98, 0x0C, 0xC1, 0x83, 0x30,
0x07, 0xe1, 0x87, 0xe0, 0x03, 0x3f, 0xfc, 0xc0,
0x03, 0x31, 0x8c, 0xc0, 0x03, 0x33, 0xcc, 0xc0,
0x06, 0x64, 0x26, 0x60, 0x0c, 0xcc, 0x33, 0x30,
0x18, 0xcc, 0x33, 0x18, 0x10, 0xc4, 0x23, 0x08,
0x10, 0x63, 0xC6, 0x08, 0x10, 0x30, 0x0c, 0x08,
0x10, 0x18, 0x18, 0x08, 0x10, 0x00, 0x00, 0x08
};
GLubyte halftone[] = {
0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55,
0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55,
0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55,
0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55,
0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55,
0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55,
0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55,
0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55,
0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55,
0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55,
0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55,
0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55,
0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55,
0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55,
0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55,
0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55
};
glClear (GL_COLOR_BUFFER_BIT);
/* draw all polygons in white*/
glColor3f (1.0, 1.0, 1.0);
/* draw one solid, unstippled rectangle,*/
/* then two stippled rectangles*/
glRectf (25.0, 25.0, 125.0, 125.0);
glEnable (GL_POLYGON_STIPPLE);
glPolygonStipple (fly);
glRectf (125.0, 25.0, 225.0, 125.0);
glPolygonStipple (halftone);
glRectf (225.0, 25.0, 325.0, 125.0);
glDisable (GL_POLYGON_STIPPLE);
glFlush ();
}
In IRIS GL, you use concave(TRUE) and then bgnpolygon to draw concave polygons. The OpenGL GLU includes functions you can use to draw concave polygons.
To draw a concave polygon with OpenGLThe following table lists the OpenGL functions for drawing tessellated polygons.
| OpenGL GLU Function | Meaning |
|---|---|
| gluNewTess | Create a new tessellation object. |
| gluDeleteTess | Delete a tessellation object. |
| gluTessCallback | — |
| gluBeginPolygon | Begin the polygon specification. |
| gluTessVertex | Specify a polygon vertex in a contour. |
| gluNextContour | Indicate that the next series of vertices describe a new contour. |
| gluEndPolygon | End the polygon specification. |