Table of Contents

11. Graphics Primitive Processing, - DOpt

The DOpt module is designed to transform a stream of graphics primitives into a form which may be efficiently rendered by high performance 3D graphics hardware.

Table of Contents

11.1 Graphics Primitive Sorting and Grouping - DOpt

A critical step in optimizing graphics performance is to present sets of similar graphics primitives to the graphics hardware. This optimization has a tendency to reduce procedure call overhead as well as take advantage of features in the underlying 3D graphics API (eg. OpenGL) for processing groups of graphics primitives. The graphics stream is optimized by implementing the following strategies:

The incoming graphics primitives from the PolyPoint, PolyPointColor, PolyLine, PolyLineColor, Polygon and PolygonColor are sorted and stored in buffers of similar type. The buffer size may be set by using vgl_DOptSetParami. The buffers are flushed when appropriate using the PolyPointArray, PolyLineArray and PolygonArray drawing functions respectively. Any graphics attributes such as line style, line width, point size, lighting or transformation flush all buffers. Redundant graphics attributes are filtered and removed without causing the buffers to be flushed. Care must be taken to use an explicit Flush drawing function when the graphics scene is complete to flush any remaining buffers. Note that the sorting operations performed by the DOpt module will, in general, result in a reordering of graphics primitives. The DOpt module contains the following functions.

The DOpt module is a filter which temporarily retains a moderate number of graphics primitives to sort and group them before passing them to the output drawing function object. To embed an object into the graphics stream, instance a DOpt object using vgl_DOptBegin. Register the drawing functions in a DrawFun object for incoming graphics primitives using vgl_DOptDrawFun. Set the drawing function object for output graphics using vgl_DOptSetObject.

The current base color and data index are stored in DOpt. The base color is used to optimize small sets of graphics primitives with changing base color to a vertex color primitive. Use vgl_DOptReset to set the current base color to an undefined state. This is useful if several indepenent graphics objects (such as several DList objects) are being optimized with a single DOpt object. Call vgl_DOptReset before streaming graphics through DOpt to the object and call vgl_DOptFlush when then graphics streaming is complete.

Table of Contents

11.2 Attribute Objects

A DOpt object requires a conventional DrawFun object to render its contents to a graphics device. Use vgl_DOptSetObject to set a DrawFun object as an attribute.

Table of Contents

11.3 Function Descriptions

The currently available DOpt functions are described in detail in this section.


Table of Contents , DOpt

NAME

*vgl_DOptBegin - create an instance of a DOpt object

C SPECIFICATION

vgl_DOpt *vgl_DOptBegin ()

ARGUMENTS

None

FUNCTION RETURN VALUE

The function returns a pointer to the newly created DOpt object. If the object creation fails, NULL is returned.

DESCRIPTION

Create an instance of a DOpt object. Memory is allocated for the object private data and the pointer to the data is returned.

Destroy an instance of a DOpt object using

     void vgl_DOptEnd (vgl_DOpt *dopt)

Return the current value of a DOpt object error flag using

     Vint vgl_DOptError (vgl_DOpt *dopt)


Table of Contents , DOpt

NAME

vgl_DOptDrawFun - return pointers to drawing functions

C SPECIFICATION

void vgl_DOptDrawFun (vgl_DOpt *dopt,
                      vgl_DrawFun *drawfun)

INPUT ARGUMENTS

dopt         Pointer to DOpt object.
drawfun      Pointer to DrawFun object to be filled with
             drawing functions.

OUTPUT ARGUMENTS

None

DESCRIPTION

Fill a DrawFun object with display file drawing functions.


Table of Contents , DOpt

NAME

vgl_DOptFlush - flush internal graphics buffers

C SPECIFICATION

void vgl_DOptFlush (vgl_DOpt *dopt)

INPUT ARGUMENTS

dopt         Pointer to DOpt object.

OUTPUT ARGUMENTS

None

DESCRIPTION

Flush internal graphics buffers. This function should be called at the conclusion of drawing a graphics object to ensure that all graphics primitives have been flushed from the internal graphics buffers.


Table of Contents , DOpt

NAME

vgl_DOptReset - reset current graphics attributes

C SPECIFICATION

void vgl_DOptReset (vgl_DOpt *dopt)

INPUT ARGUMENTS

dopt         Pointer to DOpt object.

OUTPUT ARGUMENTS

None

DESCRIPTION

Reset graphics state. The base color and dataindex are returned to an undefined state.


Table of Contents , DOpt

NAME

vgl_DOptSetObject - set pointers to attribute objects

C SPECIFICATION

void vgl_DOptSetObject (vgl_DOpt *dopt,
                        Vint objecttype,
                        Vobject *object)

INPUT ARGUMENTS

dopt         Pointer to DOpt object.
objecttype   The name of the object type to be set.
             =VGL_DRAWFUN            DrawFun object
object       Pointer to the object to be set.

OUTPUT ARGUMENTS

None

ERRORS

VGL_ERROR_OBJECTTYPE is generated if an improper objecttype is specified.

DESCRIPTION

Set a pointer to an attribute object. The DrawFun attribute object is required.


Table of Contents , DOpt

NAME

vgl_DOptSetParami - set optimization parameters

C SPECIFICATION

void vgl_DOptSetParami (vgl_DOpt *dopt,
                        Vint ptype,
                        Vint iparam)

INPUT ARGUMENTS

dopt         Pointer to DOpt object.
ptype        Type of parameter to set
             =DOPT_MAXBUFFER          Buffer size in vertices
             =DOPT_DECOMPOSE          Decompose strips and loops
iparam       Specifies the integer value that ptype will be set to.

OUTPUT ARGUMENTS

None

ERRORS

VIS_ERROR_ENUM is generated if an improper node ptype is specified.

DESCRIPTION

Set optimization parameters. The DOPT_MAXBUFFER parameter sets the buffer size in vertices. By default the buffer size is 16*1024 vertices.

The DOPT_DECOMPOSE parameter toggles the decomposition of triangle strips to triangles and line strips and line loops to lines. By default the toggle is off.