\& .sp 1 .ce 3 \s+1\fBChapter 2\fP\s-1 \s+1\fBOutput Commands\fP\s-1 .sp 2 .nr H1 2 .nr H2 0 .nr H3 0 .nr H4 0 .nr H5 0 .na .LP .XS Chapter 2: Output Commands .XE .LP The functions described in this chapter direct output commands to the specified display. Output commands may be rendered immediately or stored in a structure resource. The first three parameters of all output command functions are identical: the first parameter specifies the display connection, the second parameter specifies the resource identifier for the targeted renderer or structure, and the third parameter specifies whether the output commands are to be rendered immediately (in which case the second parameter identifies the renderer resource) or stored in a structure (in which case the second parameter identifies the structure resource). In order for a PHIGS workstation resource to process output commands for rendering, the output commands must be stored in structures. See \fIChapter 10: PHIGS Workstations\fP. .LP .sp Note, above, that the third parameter to each output command function (the request type parameter) determines how PEXlib will send the output command to the PEX server. This parameter must have one of four values: .PN PEXOCRender , .PN PEXOCRenderSingle , .PN PEXOCStore or .PN PEXOCStoreSingle . .IN PEXRCRenderOutputCommands The first two, .PN PEXOCRender and .PN PEXOCRenderSingle , will cause the output command to be formatted into a .PN PEXRCRenderOutputCommands request. This request will cause the server to immediately render the output commands using the specified renderer when the request is received by the server. .IN PEXRCStoreElements .PN PEXOCStore and .PN PEXOCStoreSingle will cause the output command to be formatted into a .PN PEXRCStoreElements request. This request will cause the server to store the output commands into the specified structure when the request is received by the server. .LP In order to improve performance, PEXlib will try to pack output commands into single .PN PEXRCRenderOutputCommands or .PN PEXRCStoreElements requests. This packing, or buffering, of output commands will normally occur when the request type is .PN PEXOCRender or .PN PEXOCStore . When the request type is .PN PEXOCRenderSingle or .PN PEXOCStoreSingle , PEXlib will force the output command to be formatted into a single request by itself. This is useful, as an example, for debugging purposes. .LP Also, behavior of the .PN PEXRCStoreElements request when the specified structure's editing mode is .PN PEXStructureReplace is not deterministic when using the request type .PN PEXOCStore . The .PN PEXRCStoreElements request will replace a range of elements in the structure dependent upon how many output commands are in the request. The number of output commands in a given request is dependent upon too many variables to predict. Applications should either use .PN PEXOCStoreSingle when the structure's editing mode is .PN PEXStructureReplace , or delete elements and use .PN PEXStructureInsert to insert the new elements. See \fIChapter 7: Structures\fP for more detail. .LP Finally, PEXlib will not pack a single request so that it is too large to send to the server. However, if a single OC is too large to send, PEXlib will cause the server to produce a .PN BadLength error. The application can determine before-hand if an OC is too large by calling .PN PEXGetSizeOCs and .PN XMaxRequestSize . See \fIChapter 1: Introduction to PEXlib\fP for more detail. .NH 2 Primitives and Attributes .XS \*(SN Primitives and Attributes .XE .IN "output commands" .IN "primitives" .IN "attributes" .LP Output commands processed by a renderer or PHIGS workstation to produce visible output (that is, pixels on the display screen) are called output primitives or simply primitives. PEX supports a number of output primitives, including markers, text and annotation text, polylines and non-uniform B-spline curve, fill areas, fill area sets, triangle strips, quadrilateral meshes, non-uniform B-spline surfaces, cell arrays and a generalized drawing primitive (or GDP). .LP Output commands which alter the rendering pipeline state are called output primitive attributes or simply attributes. The initial renderer or PHIGS workstation pipeline state is provided by a pipeline context resource or defaults if no pipeline context resource was specified in the creation of the renderer or PHIGS workstation resource. After the renderer or PHIGS workstation has obtained its initial pipeline state, pipeline attributes are modifiable only by the output primitive attribute functions described in this chapter. It is not possible to directly query the current pipeline state. .LP More detailed information on attributes is given in \fIChapter 4: Pipeline Contexts\fP. .LP .sp Attributes that affect all output primitives are: .ID HLHSR identifier color approximation index depth cue index global transformation local transformation model clip flag model clip volume name set pick id rendering color model view index .DE .NH 3 Markers .XS \*(SN Markers .XE .LP .IN "markers" .IN "primitives" "markers" A marker is a two-dimensional glyph, or symbol, representing a location in three-dimensional space. Modeling coordinates specify the marker's position. The position is transformed within the rendering pipeline like other output primitive coordinates. Since a marker has no surface from which to reflect light, the light-source illumination stage of the rendering pipeline has no effect on markers. When depth-cueing is enabled, a marker's color is affected by the depth-cueing computation. .LP The attributes that affect marker primitives are: .ID marker bundle index marker color marker color asf marker scale marker scale asf marker type marker type asf .DE .LP The marker color is the intrinsic color of the marker. This color is affected by the depth-cueing computation, if depth-cueing is enabled. The resulting color is then transformed, by the color approximation stage of the rendering pipeline, into a color the device can display. There are two output commands for setting the marker color attribute. The first allows an application to set the marker color to a particular indexed color value. The second is more general, allowing the marker color to be set to an indexed color value or a direct color value. .LP The marker type indicates the glyph used to represent the marker's position. Supported values for marker type are inquirable via .PN PEXGetEnumTypeInfo . .LP The marker scale is used to control the size of the rendered marker glyph. The nominal size of a marker is the size used if the marker scale is set to 1.0. (See .PN PEXGetImpDepConstants .) The marker's displayed size is computed by multiplying the marker's nominal size by the marker scale value, and then selecting the nearest available size for the marker. An exception to this is .PN PEXMarkerDot which is always displayed as the smallest dot the workstation can display. .LP Whenever a marker primitive is rendered, each of the marker attributes is obtained directly from the current pipeline state or indirectly from a marker bundle table. The source for the attribute value is determined by the current settings of the marker aspect source flags, or ASFs. If an attribute's ASF is set to .PN PEXIndividual , the attribute value is obtained directly from the current pipeline state. If an attribute's ASF is set to .PN PEXBundled , the attribute value is obtained from the current marker bundle table. The marker bundle index attribute indicates the marker bundle table entry to be used. Marker color asf, marker type asf, and marker scale asf are the attributes which control the source of marker attribute values. .LP The treatment of markers during hidden surface computations depends on the HLHSR (Hidden Line/Hidden Surface Renderer) mode selected and its implementation. Z-buffer algorithms usually perform the hidden surface computation on the realization of marker glyphs. Scan-line algorithms may determine visibility for markers solely from the 3D position of the marker. Clipping is performed on the marker position. If the marker position is outside the clipping volume, no portion of the marker glyph will be rendered. Clipping of portions of marker glyphs that extend beyond the clipping volume is implementation-dependent. .NH 3 Text .XS \*(SN Text .XE .LP Two types of text primitives are supported: regular text and annotation text. Regular text primitives are rendered in an arbitrary 3D plane, while annotation text appears parallel to the view surface. .LP A text string is a list of characters rendered at a particular location in three-dimensional space. Text positions are specified in modeling coordinates and transformed into screen coordinates within the rendering pipeline. A text string has no surface from which to reflect light, so the light-source illumination stage of the rendering pipeline has no effect. Depth-cueing, if enabled, does affect the color of text primitives. .LP The attributes that affect regular text primitives are: .ID character expansion character expansion asf character height character spacing character spacing asf character up vector text alignment text bundle index text color text color asf text font index text font index asf text path text precision text precision asf .DE .LP The text color is the intrinsic color of the text or annotation text string. This color is affected by the depth-cueing computation, if depth-cueing is enabled. The resulting color is transformed, by the color approximation stage of the rendering pipeline, into a color the device can display. There are two output commands for setting the text color attribute. The first allows an application to set the text color to a particular indexed color value. The second is more general, allowing the text color to be set to either an indexed color value or a direct color value. .LP The text font index specifies which entry in the current font table (i.e. which font group) is to be used. Character glyph definitions are obtained from the font resource identifiers stored in the font table entry indicated by the text font index. .LP The remaining attributes are defined exactly as they are for PHIGS. Examples of the functionality and use of each is found in the PHIGS specification document. (See PHIGS functional specification, ISO/IEC 9592-1:1988, section 4.5.5) .LP When a text or annotation text primitive is rendered, attributes are obtained directly from the current pipeline state or indirectly from a text bundle table. The source for the attribute value is determined by the current settings of the corresponding ASFs. If an attribute's ASF is set to .PN PEXIndividual , the attribute value is obtained directly from the current pipeline state. If an attribute's ASF is set to .PN PEXBundled , the attribute value is obtained from the current text bundle table. The text bundle table entry used is indicated by the text bundle index attribute. Text color asf, text font index asf, text precision asf, character expansion asf, and character spacing asf are attributes which control the source of text attribute values. .LP The treatment of text and annotation text strings during hidden surface computations depends on the HLHSR mode selected and its implementation. Z-buffer algorithms usually perform the hidden surface computation on the 2D realization of the text string. Scan-line algorithms may determine visibility for text strings only from the 3D positions of each string. Clipping of text strings is dependent on the text precision attribute. If the text precision is .PN PEXStringPrecision , clipping is done in an implementation-dependent fashion. If the text precision is .PN PEXCharPrecision , clipping is done on at least a character-by-character basis. If the text precision is .PN PEXStrokePrecision , each character is clipped to the clipping boundaries. .NH 3 Annotation Text .XS \*(SN Annotation Text .XE .LP .IN "annotation text" .IN "text" "annotation" .IN "primitives" "annotation text" Annotation text primitives and text primitives are the same except that annotation primitives must appear parallel to the viewing surface. Some attributes are shared with text primitives, and other text attributes are duplicated to provide independent control over annotation text appearance. The annotation text style attribute specifies whether a connecting line is rendered from the reference point to the annotation text string. Supported values for annotation text style are inquirable via .PN PEXGetEnumTypeInfo . If the style is .PN PEXATextConnected , the connecting line is rendered with the current polyline attributes. .LP The attributes that affect annotation text primitives are: .ID annotation text alignment annotation text height annotation text path annotation text style annotation text up vector character expansion character expansion asf character spacing character spacing asf text bundle index text color text color asf text font index text font index asf text precision text precision asf .DE .NH 3 Polylines .XS \*(SN Polylines .XE .LP .IN "polylines" .IN "primitives" "polylines" .IN "lines" .IN "curves" A polyline is specified as a list of vertices connected with line segments. .LP The attributes that affect polyline primitives are: .ID line bundle index line color line color asf line type line type asf line width line width asf polyline interpolation polyline interpolation asf .DE The line color is the intrinsic color for line primitives without vertex colors. This color is affected by the depth-cueing computation, if depth-cueing is enabled. The resulting color is then transformed, by the color approximation stage of the rendering pipeline, into a color the device can display. There are two output commands for setting the line color attribute. The first allows an application to set the line color to a particular indexed color value. The second is more general, allowing the line color to be set to either an indexed color value or a direct color value. .LP The line type indicates the visual style of line primitives rendered on the screen. Supported values for line type are inquirable via .PN PEXGetEnumTypeInfo . For lines types other than .PN PEXLineTypeSolid , the length of dots, dashes, and spaces is implementation-dependent. The line width attribute is a scale factor that is multiplied by the nominal line width for the display. (See .PN PEXGetImpDepConstants .) The line type and line width attributes are applied to the 2D projection of the line in device coordinates, not to the 3D primitive itself. .LP Polyline set primitives may include a color value at each vertex. When vertex colors are provided, they take precedence over the line color attribute. The polyline interpolation method controls how color values provided at the vertices are used when rendering polylines. If the polyline interpolation method is .PN PEXPolylineInterpNone and colors are provided at the vertices, the color of the ith vertex will be used to render the line between the ith and the i+1th vertices (leaving the color for last vertex unused) rendering each polyline segment in a constant color. If the interpolation method is .PN PEXPolylineInterpColor , a linear interpolation is performed between the vertex colors to render points along each line segment. The interpolated colors are then depth-cued and transformed into device colors. .LP When a line primitive is rendered, each attribute is obtained directly from the current pipeline state, or indirectly from a line bundle table. The source for the attribute value is determined by the current settings of the corresponding ASFs. If an attribute's ASF is set to .PN PEXIndividual , the attribute value is obtained directly from the current pipeline state. If an attribute's ASF is set to .PN PEXBundled , the attribute value is obtained from the current line bundle table. The line bundle table entry to be used is indicated by the line bundle index attribute. Line color asf, line type asf, line width asf, and polyline interpolation asf are attributes which control source of polyline attribute values. .NH 3 Non-Uniform Rational B-Spline Curves .XS \*(SN Non-Uniform Rational B-Spline Curves .XE .LP .IN "B-spline curves" .IN "primitives" "B-spline curves" Non-uniform B-spline curves are defined as a list of knot values and a set of control points. .LP The attributes that affect non-uniform B-spline curve primitives are: .ID curve approximation curve approximation asf line bundle index line color line color asf line type line type asf line width line width asf .DE .LP Non-uniform B-spline curves use all of the attributes of polylines, except for the polyline interpolation method. These curves also use the curve approximation attribute to define the fidelity with which non-uniform B-spline curves are rendered. Supported values for curve approximation are inquirable via .PN PEXGetEnumTypeInfo . .NH 3 Fill Areas .XS \*(SN Fill Areas .XE .LP .IN "fill areas" .IN "primitives" "fill areas" Fill areas are a type of surface primitive. A surface extending beyond the clipping boundary is clipped, and only the portion within the clipping boundary is rendered. Surfaces are the only output primitives affected by the reflectance calculations. Surface primitives include fill area (with and without data), fill area set (with and without data), set of fill area sets, triangle strip, quadrilateral mesh, and non-uniform B-spline surface. .LP A fill area is a sequence of points defining the boundary of a planar surface. The last point is always implicitly connected to the first point so the area is closed. Fill areas are not required to be strictly planar, but shading artifacts may occur if the fill area is not planar or nearly so. The odd-even rule is used for determining the area that lies in the interior of the fill area. .LP Part of the definition of a fill area is the shape specification. This parameter is used to indicate whether the shape of the fill area is .PN PEXShapeComplex , .PN PEXShapeNonConvex , .PN PEXShapeConvex or .PN PEXShapeUnknown . A shape of .PN PEXShapeComplex means the fill area may have self-intersecting edges. A shape of .PN PEXShapeNonConvex means the fill area has no self-intersecting edges but some of the interior angles are not convex. A shape of .PN PEXShapeConvex means all of the fill area's interior angles are convex. A shape of .PN PEXShapeUnknown means the shape of the fill area is not known. The server will have to determine its shape or assume it is .PN PEXShapeComplex . .LP The attributes that affect fill area (all surface) primitives are: .ID back-face surface color back-face surface color asf back-face surface interior style back-face surface interior style asf back-face surface interior style index back-face surface interior style index asf back-face surface interpolation method back-face surface interpolation method asf back-face surface reflection attributes back-face surface reflection attributes asf back-face surface reflection model back-face surface reflection model asf facet culling mode facet distinguish flag interior bundle index light state pattern reference point pattern reference vectors pattern size surface color surface color asf surface interior style surface interior style asf surface interior style index surface interior style index asf surface interpolation method surface interpolation method asf surface reflection attributes surface reflection attributes asf surface reflection model surface reflection model asf surface edge color surface edge color asf surface edge type surface edge type asf surface edge width surface edge width asf surface edge bundle index surface edges surface edges asf .DE .LP If the facet distinguish flag is enabled then all back-facing surfaces will be rendered using the back-facing attribute values. The culling mode must be set to .PN PEXNone , .PN PEXBackFaces or .PN PEXFrontFaces . This determines whether no surfaces are culled, back-facing surfaces are culled or front-facing surfaces are culled. The facet normal, either the one supplied or, if not supplied, the one computed, for each facet is used to determine whether the facet is front-facing or back-facing. .LP The surface color is affected by the reflectance calculations (which utilizes the interior style, the reflection model and reflection attributes) and the depth-cueing computations. The resulting color is then transformed, by the color approximation stage of the rendering pipeline, into a color the device can display. .LP The interior style determines how the interior of the fill area is rendered. Supported values for surface interior style are inquirable via .PN PEXGetEnumTypeInfo . An interior style of .PN PEXInteriorStyleEmpty means the interior is not rendered at all. An interior style of .PN PEXInteriorStyleSolid means the interior is solid filled. An interior style of .PN PEXInteriorStyleHollow means only the boundary of the interior area is rendered, and if the fill area is clipped, the boundary along the clipped edge is also rendered. An interior style of .PN PEXInteriorStylePattern means the interior is pattern filled using the pattern attributes (pattern reference point, pattern reference vectors and pattern size). An interior style of .PN PEXInteriorStyleHatch means the interior is hatch filled. .LP The light state specifies indices into the light table of those entries (or lights) which are currently enabled. If the light table contains defined entries that are not referenced by the light state attribute, those lights are disabled. .LP The reflection model specifies the method that is used to perform the reflectance calculations when rendering surface primitives. Supported values for reflection model are inquirable via .PN PEXGetEnumTypeInfo . If the reflection model is .PN PEXReflectionNone then no reflectance calculation is performed. If the reflection model is .PN PEXReflectionAmbient then only the ambient terms of the lighting equation are used. If the reflection model is .PN PEXReflectionDiffuse then only the ambient and diffuse terms of the lighting equation are used. If the reflection model is .PN PEXReflectionSpecular then the ambient, diffuse and specular terms of the lighting equation are all used during the reflectance calculations. .LP The reflection attributes indicate how a primitive reflects light. These include ambient, diffuse and specular coefficients, the specular concentration and color, and the transmission coefficient (also thought of as a transparency coefficient). .LP The surface interpolation method controls how shading is performed when rendering surface primitives. Supported values for surface interpolation method are inquirable via .PN PEXGetEnumTypeInfo . If the surface interpolation method is .PN PEXSurfaceInterpNone then the color resulting from a single light source computation is used for the entire surface. If the surface interpolation method is .PN PEXSurfaceInterpColor then the colors are computed at the vertices of the surface according to the current reflection model. These color values are then linearly interpolated across the interior of the surface or the edges. If the surface interpolation method is .PN PEXSurfaceInterpDotProduct then the lighting equation dot products are computed at the vertices. These dot products are linearly interpolated and the reflectance calculation is applied using these values to compute the color value at each pixel in the interior of a surface or along a surface edge. If the surface interpolation method is .PN PEXSurfaceInterpNormal then an attempt is made to interpolate the normal across the facet and perform the reflectance calculation as accurately as possible at each pixel in the interior of a surface or along a surface edge. .LP When a surface is rendered, each attribute is obtained directly from the current pipeline state, or indirectly from the interior bundle table. The source for the attribute value is determined by the current settings of the corresponding ASFs. If an attribute's ASF is set to .PN PEXIndividual , the attribute value is obtained directly from the current pipeline state. If an attribute's ASF is set to .PN PEXBundled , the attribute value is obtained from the current interior bundle table. The interior bundle table entry to be used is indicated by the interior bundle index attribute. Surface interior style asf, surface interior style index asf, surface color asf, surface reflection attributes asf, surface reflection model asf, surface interpolation method asf, back-face surface interior style asf, back-face surface interior style index asf, back-face surface surface color asf, back-face surface reflection attributes asf, back-face surface reflection model asf and back-face surface interpolation method asf are attributes which control the source of fill area attribute values. .LP The surface edges attribute indicates whether fill area edges are rendered in addition to fill area interiors. Surface edges for fill areas are the edges of each fill area. If surface edges are rendered, the surface edge color, surface edge type, and surface edge width are used to render them. These attributes are analogous to the attributes that affect line primitives. Surface edge colors are depth-cued but are not affected by light-source computations. Surface edge type and width, like line type and width, are raster attributes applied after the surface edge has been transformed into device coordinates. Edges are considered to be rendered "on top of" fill area interiors. This means that surface edges, when enabled, should be visible no matter what interior style is used. Parts of clipped surface edges are not visible (no new edge is generated by the clipping process). Also the source of the edge attribute value is determined by the surface edge color asf, surface edge type asf, and surface edge width asf. .LP Some fill area primitives allow additional data for the facet and for each vertex. If a color value is specified for the facet, it is taken to be the intrinsic color of the surface and is used instead of the current surface color when the fill area is rendered. Vertex colors take precedence over facet colors which override the surface color attributes. A normal specified for the fill area facet is assumed to be a surface normal for the facet and is used for back-facing surface processing. This normal may also be used in reflectance calculations. If no fill area facet normal is provided, one is computed by determining the first three non-colinear vertices A, B, and C, and computing the cross product of the vector from A to B with the vector from A to C. If the fill area is degenerate (for example, does not contain three non-colinear vertices), the resultant value of the normal is implementation-dependent. .NH 3 Fill Area Sets .XS \*(SN Fill Area Sets .XE .LP .IN "fill area sets" .LP A fill area set consists of multiple fill areas, each of which defines a "contour", "island" or a "hole" that is part of a single, planar, area-defining output primitive. All of the fill area attributes described in the section on fill areas apply to fill area sets. If a normal is not provided for the fill area set then it is computed, using the method described in the section on fill areas, for the first contour. .LP Part of the definition of a fill area set is the contour hint flag. This parameter is used to indicate whether the contours are .PN PEXContourDisjoint , .PN PEXContourNested , .PN PEXContourIntersecting or .PN PEXContourUnknown . A contour hint of .PN PEXContourDisjoint means all contours are spatially disjoint. No overlapping or intersection occurs between any contours in the fill area set. A contour hint of .PN PEXContourNested means the contours are either disjoint or wholly contained within another contour. No contour will have edges that intersect or are coincident with edges of any other contour. A contour hint of .PN PEXContourIntersecting means that separate contours may have edges that are coincident or overlap. A contour hint of .PN PEXContourUnknown means nothing is known about the relationships between the contours. Fill area sets with contours that have higher complexity interrelationships than that indicated by their contour hint parameter are rendered in an implementation-dependent manner. .LP A set of fill area sets may be connected where individual fill area sets may share geometry and attribute information at vertices. Each fill area set defines a planar surface, but each fill area set is not necessarily co-planar with the other fill area sets. One benefit to the set of fill area sets primitive is that data is transmitted across the network once per unique vertex instead of once for every fill area set sharing the vertex. An additional parameter specifies whether the contours are all 1, i.e. there is only one contour in each fill area set. If .PN True , then each fill area set in the SOFAS consists of a single facet, or fill area. .NH 3 Triangle Strips .XS \*(SN Triangle Strips .XE .LP .IN "triangle strips" .IN "primitives" "triangle strips" A triangle strip is specified as a list of n vertices that represent n-2 triangles. For each value of i less than or equal to n-2, the ith, i+1th, and i+2th vertices define a triangle. Geometric normals are computed in the same way as described for fill areas, except that the order of vertices is reversed for even-numbered triangles in the triangle strip. The set of triangles need not be co-planar. .LP All of the fill area attributes described in the section on fill areas, except for the shape flag, affect triangle strips. The surface edges for triangle strips are the line segments forming the boundaries of all triangles in the strip. There is only one edge between any two adjacent triangles. .NH 3 Quadrilateral Meshes .XS \*(SN Quadrilateral Meshes .XE .LP .IN "quadrilateral meshes" .IN "primitives" "quadrilateral meshes" A quadrilateral mesh is specified as an array of vertices representing quadrilaterals. For each i less than the number of rows minus one and each j less than the number of columns minus one, a quadrilateral is formed by the vertices (i,j), (i+1,j), (i+1,j+1) and (i,j+1). Normals are assumed to be unit length vectors. Normals for quadrilaterals, if not provided explicitly, are computed by taking the cross product of the diagonals. For a quadrilateral with the above vertices, the cross product would be formed as follows: .ID normal(i,j) = (point(i+1, j+1) - point(i, j)) X (point(i, j+1) - point(i+1, j)) .DE The set of quadrilaterals need not be co-planar, however, each individual quadrilateral is assumed to be planar. .LP All of the fill area attributes described in the section on fill areas affect quadrilateral meshes. The surface edges for quadrilateral meshes are the line segments forming the boundaries of the individual quadrilaterals in the mesh. There is only one edge between any two adjacent quadrilaterals. .NH 3 Non-Uniform Rational B-Spline Surfaces .XS \*(SN Non-Uniform Rational B-Spline Surfaces .XE .LP .IN "B-spline surfaces" .IN "primitives" "B-spline surfaces" A non-uniform B-spline surface is a B-spline surface specified by two lists of knot values and a set of control points. A set of trimming loops may be specified along with the data for a non-uniform B-spline surface to specify those areas of the surface to be rendered. .LP Non-uniform rational B-spline surfaces are affected by the following list of attributes in addition to the fill area attributes described in the section on fill areas: .ID parametric surface characteristics surface approximation surface approximation asf .DE .LP The surface approximation defines the approximation method and accuracy with which non-uniform B-spline surfaces are rendered. Supported values for surface approximation are inquirable via .PN PEXGetEnumTypeInfo . .LP The parametric surface characteristics defines the surface characteristics. Supported values for parametric surface characteristics are inquirable via .PN PEXGetEnumTypeInfo . .NH 3 Cell Arrays .XS \*(SN Cell Arrays .XE .LP .IN "cell arrays" .IN "primitives" "cell arrays" A cell array is a parallelogram of equal-sized cells, each of which is a parallelogram and has a single color. The attributes affecting cell arrays are those listed in \fI2.1: Primitives and Attributes\fP. .NH 3 Generalized Drawing Primitives .XS \*(SN Generalized Drawing Primitives .XE .LP .IN "GDPs" .IN "generalized drawing primitives" .IN "primitives" "generalized drawing primitives" A generalized drawing primitive (GDP) output command is provided. This allows individual implementations to extend the supported primitive set. There are no standard PEX GDPs. The complete interface and behavior for each specified GDP identifier should be available with the individual PEX implementations. .bp