_C_ License Applicability. Except to the extent portions of this file are _C_ made subject to an alternative license as permitted in the SGI Free _C_ Software License B, Version 1.1 (the "License"), the contents of this _C_ file are subject only to the provisions of the License. You may not use _C_ this file except in compliance with the License. You may obtain a copy _C_ of the License at Silicon Graphics, Inc., attn: Legal Services, 1600 _C_ Amphitheatre Parkway, Mountain View, CA 94043-1351, or at: _C_ _C_ http://oss.sgi.com/projects/FreeB _C_ _C_ Note that, as provided in the License, the Software is distributed on an _C_ "AS IS" basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS _C_ DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND _C_ CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A _C_ PARTICULAR PURPOSE, AND NON-INFRINGEMENT. _C_ _C_ Original Code. The Original Code is: OpenGL Sample Implementation, _C_ Version 1.2.1, released January 26, 2000, developed by Silicon Graphics, _C_ Inc. The Original Code is Copyright (c) 1991-2000 Silicon Graphics, Inc. _C_ Copyright in any portions created by third parties is as indicated _C_ elsewhere herein. All Rights Reserved. _C_ _C_ Additional Notice Provisions: The application programming interfaces _C_ established by SGI in conjunction with the Original Code are The _C_ OpenGL(R) Graphics System: A Specification (Version 1.2.1), released _C_ April 1, 1999; The OpenGL(R) Graphics System Utility Library (Version _C_ 1.3), released November 4, 1998; and OpenGL(R) Graphics with the X _C_ Window System(R) (Version 1.3), released October 19, 1998. This software _C_ was created using the OpenGL(R) version 1.2.1 Sample Implementation _C_ published by SGI, but has not been independently verified as being _C_ compliant with the OpenGL(R) version 1.2.1 Specification. _C_ _C_ The first character in this file must be an '_'! _C_ Anything on a line after _C_ is ignored _define(_filters,tbl|eqn)_C_ _header(Begin,delimit the vertices of a primitive or a group of like primitives) _names(Begin) .EQ delim $$ .EN .SH PARAMETERS _phead(_param1) Specifies the primitive or primitives that will be created from vertices presented between _cmnd(Begin) and the subsequent _cmnd(End). Ten symbolic constants are accepted: _const(POINTS), _const(LINES), _const(LINE_STRIP), _const(LINE_LOOP), _const(TRIANGLES), _const(TRIANGLE_STRIP), _const(TRIANGLE_FAN), _const(QUADS), _const(QUAD_STRIP), and _const(POLYGON). _names(End) .SH DESCRIPTION _cmnd(Begin) and _cmnd(End) delimit the vertices that define a primitive or a group of like primitives. _cmnd(Begin) accepts a single argument that specifies in which of ten ways the vertices are interpreted. Taking $n$ as an integer count starting at one, and $N$ as the total number of vertices specified, the interpretations are as follows: .TP 23 _const(POINTS) Treats each vertex as a single point. Vertex $n$ defines point $n$. $N$ points are drawn. .TP _const(LINES) Treats each pair of vertices as an independent line segment. Vertices $2n^-^1$ and $2n$ define line $n$. $N/2$ lines are drawn. .TP _const(LINE_STRIP) Draws a connected group of line segments from the first vertex to the last. Vertices $n$ and $n~+~1$ define line $n$. $N^-^1$ lines are drawn. .TP _const(LINE_LOOP) Draws a connected group of line segments from the first vertex to the last, then back to the first. Vertices $n$ and $n~+~1$ define line $n$. The last line, however, is defined by vertices $N$ and $1$. $N$ lines are drawn. .TP _const(TRIANGLES) Treats each triplet of vertices as an independent triangle. Vertices $3n^-^2$, $3n^-^1$, and $3n$ define triangle $n$. $N/3$ triangles are drawn. .BP .TP _const(TRIANGLE_STRIP) Draws a connected group of triangles. One triangle is defined for each vertex presented after the first two vertices. For odd $n$, vertices $n$, $n~+~1$, and $n~+~2$ define triangle $n$. For even $n$, vertices $n~+~1$, $n$, and $n~+~2$ define triangle $n$. $N^-^2$ triangles are drawn. .TP _const(TRIANGLE_FAN) Draws a connected group of triangles. One triangle is defined for each vertex presented after the first two vertices. Vertices $1$, $n~+~1$, and $n~+~2$ define triangle $n$. $N^-^2$ triangles are drawn. .TP _const(QUADS) Treats each group of four vertices as an independent quadrilateral. Vertices $4n^-^3$, $4n^-^2$, $4n^-^1$, and $4n$ define quadrilateral $n$. $N/4$ quadrilaterals are drawn. .TP _const(QUAD_STRIP) Draws a connected group of quadrilaterals. One quadrilateral is defined for each pair of vertices presented after the first pair. Vertices $2n^-^1$, $2n$, $2n~+~2$, and $2n~+~1$ define quadrilateral $n$. $N/2^-^1$ quadrilaterals are drawn. Note that the order in which vertices are used to construct a quadrilateral from strip data is different from that used with independent data. .TP _const(POLYGON) Draws a single, convex polygon. Vertices $1$ through $N$ define this polygon. .P Only a subset of GL commands can be used between _cmnd(Begin) and _cmnd(End). The commands are _cmnd(Vertex), _cmnd(Color), _cmnd(Index), _cmnd(Normal), _cmnd(TexCoord), _cmnd(EvalCoord), _cmnd(EvalPoint), _cmnd(ArrayElement), _cmnd(Material), and _cmnd(EdgeFlag). Also, it is acceptable to use _cmnd(CallList) or _cmnd(CallLists) to execute display lists that include only the preceding commands. If any other GL command is executed between _cmnd(Begin) and _cmnd(End), the error flag is set and the command is ignored. .P Regardless of the value chosen for _param1(1), there is no limit to the number of vertices that can be defined between _cmnd(Begin) and _cmnd(End). Lines, triangles, quadrilaterals, and polygons that are incompletely specified are not drawn. Incomplete specification results when either too few vertices are provided to specify even a single primitive or when an incorrect multiple of vertices is specified. The incomplete primitive is ignored; the rest are drawn. .P The minimum specification of vertices for each primitive is as follows: 1 for a point, 2 for a line, 3 for a triangle, 4 for a quadrilateral, and 3 for a polygon. Modes that require a certain multiple of vertices are _const(LINES) (2), _const(TRIANGLES) (3), _const(QUADS) (4), and _const(QUAD_STRIP) (2). .SH ERRORS _const(INVALID_ENUM) is generated if _param1(1) is set to an unaccepted value. .P _const(INVALID_OPERATION) is generated if _cmnd(Begin) is executed between a _cmnd(Begin) and the corresponding execution of _cmnd(End). .P _const(INVALID_OPERATION) is generated if _cmnd(End) is executed without being preceded by a _cmnd(Begin). .P _const(INVALID_OPERATION) is generated if a command other than _cmnd(Vertex), _cmnd(Color), _cmnd(Index), _cmnd(Normal), _cmnd(TexCoord), _cmnd(EvalCoord), _cmnd(EvalPoint), _cmnd(ArrayElement), _cmnd(Material), _cmnd(EdgeFlag), _cmnd(CallList), or _cmnd(CallLists) is executed between the execution of _cmnd(Begin) and the corresponding execution _cmnd(End). .P Execution of _cmnd(EnableClientState), _cmnd(DisableClientState), _cmnd(EdgeFlagPointer), _cmnd(TexCoordPointer), _cmnd(ColorPointer), _cmnd(IndexPointer), _cmnd(NormalPointer), .br _cmnd(VertexPointer), _cmnd(InterleavedArrays), or _cmnd(PixelStore) is not allowed after a call to _cmnd(Begin) and before the corresponding call to _cmnd(End), but an error may or may not be generated. .SH SEE ALSO _cmnd(ArrayElement), _cmnd(CallList), _cmnd(CallLists), _cmnd(Color), _cmnd(EdgeFlag), _cmnd(EvalCoord), .br _cmnd(EvalPoint), _cmnd(Index), _cmnd(Material), _cmnd(Normal), _cmnd(TexCoord), _cmnd(Vertex)