Porting Polygons and Quadrilaterals

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.

Porting Polygon Modes

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.

Porting Polygon Stipples

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

Porting Tessellated Polygons

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 OpenGL
  1. Create a tessellation object.
  2. Define callbacks that will be used to process the triangles generated by the tessellator.
  3. Specify the concave polygon to be tessellated.

The 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.