From guest  Tue Jun  7 09:06:22 1994
Date: Tue, 7 Jun 94 12:09:21 -0400
Message-Id: <9406071609.AA28383@enews.nrl.navy.mil>
To: info-performer@sgi.sgi.com
From: darken@enews.nrl.navy.mil (Rudy Darken)
Subject: line rendering in performer (the sequel)
Cc: darken@enews.nrl.navy.mil
Status: OR


What I want to do is the following:
1. Create a geode
2. Create a material
3. Set the material colors (diffuse & ambient)
4. Create line geometry
5. Bind the material to the lines
6. Return the geode for inclusion in the performer rendering database

It would seem that this should be a common thing to want to do. Obviously,
I want the material properties of the lines to remain constant throughout
the process. I don't want them inheriting state from other geometry. In
fact, since line rendering does not benefit greatly by a lighting model,
I don't even care if they are lighted, provided other objects in my scene
still can be. I have tried all suggestions so far with the same results.
Hasn't anyone rendered lines before? How do you get line geometry to keep
its state without inheriting?

   void        *arena;
   pfGeode     *geode;
   pfMaterial  *material;
   pfGeoState  *geostate;
   pfGeoSet    *gset;
   pfVec3      *vertices;
   pfVec4      *colors;
   
   arena = pfGetSharedArena ();
   geode = pfNewGeode ();
   material = pfNewMtl (arena);
   pfMtlColor (material, PFMTL_AMBIENT, color[0], color[1], color[2]);
   pfMtlColor (material, PFMTL_DIFFUSE, color[0], color[1], color[2]);
   
   // What goes here?
   // pfMtlColorMode ()?
   // pfMtlSide ()?
   
   geostate = pfNewGState (arena);

   // Is this correct?
   pfGStateAttr (geostate, PFSTATE_FRONTMTL, material);
   pfGStateMode (geostate, PFSTATE_CULLFACE, PFCF_OFF);
   
   gset = pfNewGSet (arena);
   pfGSetPrimType (gset, PFGS_LINES);
   pfGSetGState (gset, geostate);
   // Load geometry here
   pfGSetAttr (gset, PFGS_COORD3, PFGS_PER_VERTEX, vertices, NULL);
   pfGSetAttr (gset, PFGS_COLOR4, PFGS_PER_VERTEX, colors, NULL);
   pfAddGSet (geode, gset);
   return geode;

_______________________________________________________________
Rudy Darken  <202> 767-6814
darken@enews.nrl.navy.mil    The U.S. Naval Research Laboratory
darken@seas.gwu.edu           The George Washington University
_______________________________________________________________





From guest  Tue Jun  7 10:43:49 1994
From: "Michael Jones" <mtj@babar>
Message-Id: <9406071043.ZM7605@babar.asd.sgi.com>
Date: Tue, 7 Jun 1994 10:43:36 -0700
In-Reply-To: darken@enews.nrl.navy.mil (Rudy Darken)
        "line rendering in performer (the sequel)" (Jun  7, 12:09pm)
References: <9406071609.AA28383@enews.nrl.navy.mil>
X-Mailer: Z-Mail (3.1.0 22feb94 MediaMail)
To: darken@enews.nrl.navy.mil (Rudy Darken), info-performer@sgi.sgi.com
Subject: Re: line rendering in performer (the sequel)
Content-Type: text/plain; charset=us-ascii
Mime-Version: 1.0
Status: O

On Jun 7, 12:09pm, Rudy Darken wrote:
> Subject: line rendering in performer (the sequel)

:
:   void        *arena;
:   pfGeode     *geode;
:   pfMaterial  *material;
:   pfGeoState  *geostate;
:   pfGeoSet    *gset;
:   pfVec3      *vertices;
:   pfVec4      *colors;
:
:   arena = pfGetSharedArena ();
:   geode = pfNewGeode ();
:   material = pfNewMtl (arena);
:   pfMtlColor (material, PFMTL_AMBIENT, color[0], color[1], color[2]);
:   pfMtlColor (material, PFMTL_DIFFUSE, color[0], color[1], color[2]);
:
:   // What goes here?
:   // pfMtlColorMode ()?
:   // pfMtlSide ()?

/* Here's what you need */
pfMtlColorMode(material, PFMTL_FRONT, LMC_AD);

:   geostate = pfNewGState (arena);
:
:   // Is this correct?
:   pfGStateAttr (geostate, PFSTATE_FRONTMTL, material);
:   pfGStateMode (geostate, PFSTATE_CULLFACE, PFCF_OFF);
:
:   gset = pfNewGSet (arena);
:   pfGSetPrimType (gset, PFGS_LINES);
:   pfGSetGState (gset, geostate);
:   // Load geometry here
:   pfGSetAttr (gset, PFGS_COORD3, PFGS_PER_VERTEX, vertices, NULL);
:   pfGSetAttr (gset, PFGS_COLOR4, PFGS_PER_VERTEX, colors, NULL);
:   pfAddGSet (geode, gset);
:   return geode;


-- 

Be seeing you,      Phone:415.390.1455  Fax:415.390.2658 M/S:9U-590
Michael T. Jones    Silicon Graphics, Advanced Graphics Division
mtj@sgi.com         2011 N. Shoreline Blvd., Mtn. View, CA 94039-7311






From guest  Tue Jun  7 11:17:48 1994
Date: Tue, 7 Jun 94 14:20:49 -0400
Message-Id: <9406071820.AA01623@enews.nrl.navy.mil>
To: info-performer@sgi.sgi.com
From: darken@enews.nrl.navy.mil (Rudy Darken)
Subject: line rendering in performer (part 3)
Cc: darken@enews.nrl.navy.mil
Status: OR


Summary:
What I want to do is the following:
1. Create a geode
2. Create a material
3. Set the material colors (diffuse & ambient)
4. Create line geometry
5. Bind the material to the lines
6. Return the geode for inclusion in the performer rendering database

This is the third pass at this problem. There have been two suggestions
made by Michael Jones and Jim Helman which have been incorporated into
the code stub below. The problem persists. When the only object in view
is the grid, it is drawn in blue (as expected). However, when another
object enters the view, the grid loses its color and goes dark. I have
this code written into smallfly so it is the only non-sgi code in the
application. The problem has to be in the way I define the geostate for
the grid.

>It would seem that this should be a common thing to want to do. Obviously,
>I want the material properties of the lines to remain constant throughout
>the process. I don't want them inheriting state from other geometry. In
>fact, since line rendering does not benefit greatly by a lighting model,
>I don't even care if they are lighted, provided other objects in my scene
>still can be. I have tried all suggestions so far with the same results.
>Hasn't anyone rendered lines before? How do you get line geometry to keep
>its state without inheriting?

   void        *arena;
   pfGeode     *geode;
   pfMaterial  *material;
   pfGeoState  *geostate;
   pfGeoSet    *gset;
   pfVec3      *vertices;
   pfVec4      *colors;
   
   arena = pfGetSharedArena ();
   geode = pfNewGeode ();

   material = pfNewMtl (arena);
   pfMtlColor (material, PFMTL_AMBIENT, 0.0f, 0.0f, 1.0f);
   pfMtlColor (material, PFMTL_DIFFUSE, 0.0f, 0.0f, 1.0f);
   // Michael Jones had me add this line
   pfMtlColorMode (material, PFMTL_FRONT, LMC_AD);

   geostate = pfNewGState (arena);
   pfGStateAttr (geostate, PFSTATE_FRONTMTL, material);
   pfGStateMode (geostate, PFSTATE_CULLFACE, PFCF_OFF);
   // Jim Helman had me add this line
   pfGStateMode (geostate, PFSTATE_ENTEXTURE, PF_OFF);
    
   gset = pfNewGSet (arena);
   pfGSetPrimType (gset, PFGS_LINES);
   pfGSetGState (gset, geostate);
   // Load geometry here
   pfGSetAttr (gset, PFGS_COORD3, PFGS_PER_VERTEX, vertices, NULL);
   pfGSetAttr (gset, PFGS_COLOR4, PFGS_PER_VERTEX, colors, NULL);
   pfAddGSet (geode, gset);
   return geode;



_______________________________________________________________
Rudy Darken  <202> 767-6814
darken@enews.nrl.navy.mil    The U.S. Naval Research Laboratory
darken@seas.gwu.edu           The George Washington University
_______________________________________________________________





From guest  Tue Jun  7 12:41:30 1994
Message-Id: <9406071941.AA13906@surreal.asd.sgi.com>
To: darken@enews.nrl.navy.mil (Rudy Darken)
Cc: info-performer@sgi.sgi.com
Subject: Re: line rendering in performer (part 3) 
In-Reply-To: Your message of "Tue, 07 Jun 94 14:20:49 EDT."
             <9406071820.AA01623@enews.nrl.navy.mil> 
Date: Tue, 07 Jun 94 12:41:20 -0700
From: Jim Helman <jimh@surreal>
Status: O


For the same reason as with texturing, the default in perfly is to
have lighting enabled in the default state.  If you're not
specifying normals with the lines and have lighting explicitly
enabled or inherited, you'll just get lighting from whatever normal
was sent to the pipe last via GL.  Try:

    pfGStateMode(gs, PFSTATE_ENTEXTURE, PF_OFF);
    pfGStateMode(gs, PFSTATE_ENLIGHTING, PF_OFF);

Or bind normals to the pfGeoSet.

rgds,

-jim helman

jimh@surreal.asd.sgi.com
415/390-1151






From guest  Tue Jun  7 13:37:17 1994
From: "Michael Jones" <mtj@babar>
Message-Id: <9406071337.ZM8021@babar.asd.sgi.com>
Date: Tue, 7 Jun 1994 13:37:06 -0700
In-Reply-To: darken@enews.nrl.navy.mil (Rudy Darken)
        "line rendering in performer (part 3)" (Jun  7,  2:20pm)
References: <9406071820.AA01623@enews.nrl.navy.mil>
X-Mailer: Z-Mail (3.1.0 22feb94 MediaMail)
To: darken@enews.nrl.navy.mil (Rudy Darken), info-performer@sgi.sgi.com
Subject: Re: line rendering in performer (part 3)
Content-Type: text/plain; charset=us-ascii
Mime-Version: 1.0
Status: O

On Jun 7,  2:20pm, Rudy Darken wrote:
> Subject: line rendering in performer (part 3)

:This is the third pass at this problem. There have been two suggestions
:made by Michael Jones and Jim Helman which have been incorporated into
:the code stub below. The problem persists. When the only object in view
:is the grid, it is drawn in blue (as expected). However, when another
:object enters the view, the grid loses its color and goes dark. I have
:this code written into smallfly so it is the only non-sgi code in the
:application. The problem has to be in the way I define the geostate for
:the grid.

What's your experience with the code below? It's my attempt to draw
lines, and seems to work. I added it to Perfly and all seems well.

/*
 * Make a "grid of lines" graphic object
 */

pfNode *
MakeGrid (void)
{
    void	*arena		= NULL;
    pfMaterial	*material	= NULL;
    pfGeoState	*geostate	= NULL;
    pfGeoSet	*geoset		= NULL;
    pfGeode	*geode		= NULL;

    pfVec3	*v		= NULL;
    pfVec3	*vp		= NULL;
    pfVec4	*c		= NULL;

    int		nx		=  30;
    int		ny		=  30;
    float	x0		= -10.0f;
    float	y0		= -10.0f;
    float	z0		=   5.0f;
    float	x1		=  10.0f;
    float	y1		=  10.0f;
    float	dx		=  x1 - x0;
    float	dy		=  y1 - y0;

    int		x;
    int		y;

    /* access the global shared-memory arena */
    arena = pfGetSharedArena();

    /* make a material that specifies LMC_AD mode */
    material = pfNewMtl(arena);
    pfMtlColor(material, PFMTL_AMBIENT,  0.1, 0.1, 0.1);
    pfMtlColor(material, PFMTL_SPECULAR, 0.8, 0.8, 0.8);
    pfMtlColorMode(material, PFMTL_FRONT, LMC_AD);

    /* specify material but inherit all other geostate attributes */
    geostate = pfNewGState(arena);
    pfGStateAttr(geostate, PFSTATE_FRONTMTL, material);

    /* create geoset at attach geostate to it */
    geoset = pfNewGSet(arena);
    pfGSetPrimType(geoset, PFGS_LINES);
    pfGSetGState(geoset, geostate);

    /* build and attach vertex array */
    vp = v = (pfVec3 *)pfMalloc((2*nx + 2*ny)*sizeof(pfVec3), arena);
    for (x = 0; x < nx; x++)
    {
	pfSetVec3(vp++, x0 + x*dx/(nx-1), y0, z0);
	pfSetVec3(vp++, x0 + x*dx/(nx-1), y1, z0);
    }
    for (y = 0; y < ny; y++)
    {
	pfSetVec3(vp++, x0, y0 + y*dy/(ny-1), z0);
	pfSetVec3(vp++, x1, y0 + y*dy/(ny-1), z0);
    }
    pfGSetAttr(geoset, PFGS_COORD3, PFGS_PER_VERTEX, v, NULL);
    pfGSetNumPrims(geoset, nx + ny);

    /* build and attach color array */
    c = (pfVec4 *)pfMalloc(sizeof(pfVec4), arena);
    pfSetVec4(c, 1.0f, 0.0f, 0.0f, 1.0f);
    pfGSetAttr(geoset, PFGS_COLOR4, PFGS_OVERALL, c, NULL);

    /* create geode and attach geoset to it */
    geode = pfNewGeode();
    pfAddGSet(geode, geoset);

    /* return address of geode to caller */
    return (pfNode *)geode;
}


-- 

Be seeing you,      Phone:415.390.1455  Fax:415.390.2658 M/S:9U-590
Michael T. Jones    Silicon Graphics, Advanced Graphics Division
mtj@sgi.com         2011 N. Shoreline Blvd., Mtn. View, CA 94039-7311






From guest  Mon Jun  6 14:03:23 1994
Date: Mon, 6 Jun 94 17:06:24 -0400
Message-Id: <9406062106.AA18911@enews.nrl.navy.mil>
To: info-performer@sgi.sgi.com
From: darken@enews.nrl.navy.mil (Rudy Darken)
Subject: line rendering in performer
Cc: darken@enews.nrl.navy.mil
X-Attachments: :Macintosh HD:2:email.txt:
Status: OR

I've had this problem before but have never found the solution.
If you include the function LoadGrid (below) in with a typical
performer application like smallfly which is rendering geometry,
what you get is interference in the graphics state from the 
other geometry when rendering the lines. When I have this grid
loaded exactly as written here while running "smallfly esprit.flt"
(my call is "LoadGrid (clr, 100, 1)" where clr={0, 0, 1, 1})
I get a blue grid (as expected) as long as the car is not in view.
If the car is in view, the grid changes to some other color
which seems to be different depending on what type of machine
I'm on. Furthermore, this behavior changes with distance from the
geometry. From far off, it will look fine. As you get close to the
car, the grid will change colors. In a typical application, the
effect is line rendering which flickers greatly. We have never
been able to render anything in performer with line geometry
like this which has operated as expected. We'd appreciate any
comments you might have or if you can try this, let us know
how it works for you. Thanks.

Rudy


_______________________________________________________________
Rudy Darken  <202> 767-6814
darken@enews.nrl.navy.mil    The U.S. Naval Research Laboratory
darken@seas.gwu.edu           The George Washington University
_______________________________________________________________


/*
 * Build a geode of color of square size extent x extent with spacing
 * between lines of gap.
 */
#define Z   0.0f;
pfGeode *
LoadGrid (pfVec4 color, long extent, long gap)
{
   long	       numLines;
   void	       *arena;
   pfGeode     *geode;
   pfMaterial  *material;
   pfGeoState  *geostate;
   pfGeoSet    *gset;
   pfVec3      *vertices;
   pfVec4      *colors;
   short       ctr, i, j, c;

   if (extent % gap)
   {
      pfNotify (PFNFY_WARN, PFNFY_RESOURCE, 
	 "Extent not divisible by gap");
      return NULL;
   }
   arena = pfGetSharedArena ();
   geode = pfNewGeode ();
   /*material = pfNewMtl (arena);*/
   /*pfMtlColor (material, PFMTL_AMBIENT, color[0], color[1], color[2]);*/
   /*pfMtlColor (material, PFMTL_DIFFUSE, color[0], color[1], color[2]);*/
   /*pfMtlColorMode (material, PFMTL_FRONT, LMC_AD);*/
   geostate = pfNewGState (arena);
   /*pfGStateAttr (geostate, PFSTATE_FRONTMTL, material);*/
   /*pfGStateMode (geostate, PFSTATE_CULLFACE, PFCF_OFF);*/
   gset = pfNewGSet (arena);
   pfGSetPrimType (gset, PFGS_LINES);
   /*pfGSetGState (gset, geostate);*/
   numLines = 2 * ((extent / gap)+1);
   vertices = (pfVec3 *) pfMalloc (numLines * 2 * sizeof (pfVec3), arena);
   colors   = (pfVec4 *) pfMalloc (numLines * 2 * sizeof (pfVec4), arena);
   pfGSetNumPrims (gset, numLines);
   ctr = 0;
   for (i=-(extent/2), c=0; c<2; c++)
   {
      if (!c)
      {
         for (j=-(extent/2); j<=(extent/2); j+=gap)
         {
	    vertices[ctr][0] = i; 
	    vertices[ctr][1] = j; 
	    vertices[ctr++][2] = Z;
	    vertices[ctr][0] = -i;
	    vertices[ctr][1] = j;
	    vertices[ctr++][2] = Z;
	 }
      }
      else 
      {
         for (j=-(extent/2); j<=(extent/2); j+=gap)
         {
	    vertices[ctr][0] = j; 
	    vertices[ctr][1] = i; 
	    vertices[ctr++][2] = Z;
	    vertices[ctr][0] = j;
	    vertices[ctr][1] = -i;
	    vertices[ctr++][2] = Z;
	 }
      }
   }
   for (i=0; i<numLines*2; i++)
      pfCopyVec4 (colors[i], color);
   /*pfGSetDrawMode (gset, PFGS_WIREFRAME, PF_ON);*/
   pfGSetAttr (gset, PFGS_COORD3, PFGS_PER_VERTEX, vertices, NULL);
   pfGSetAttr (gset, PFGS_COLOR4, PFGS_PER_VERTEX, colors, NULL);
   pfAddGSet (geode, gset);
   return geode;
}
#undef Z






From guest  Mon Jun  6 16:53:59 1994
Message-Id: <9406062353.AA26896@surreal.asd.sgi.com>
To: darken@enews.nrl.navy.mil (Rudy Darken)
Cc: info-performer@sgi.sgi.com
Subject: Re: line rendering in performer 
In-Reply-To: Your message of "Mon, 06 Jun 94 17:06:24 EDT."
             <9406062106.AA18911@enews.nrl.navy.mil> 
Date: Mon, 06 Jun 94 16:53:48 -0700
From: Jim Helman <jimh@surreal>
Status: O

Try adding:

	pfGStateMode(geostate, PFSTATE_ENTEXTURE, PF_OFF);

to the geostate you use for rendering the lines.

By default, Performer enables texturing (pfEnable(PFEN_TEXTURE))
when it initializes graphics state on machines with fast
texturing.  You haven't turned texturing off for this
pfGeoState, so it inherits the texture enable.  Unfortunately,
this means that you get the color of whatever texel coresponded
to the last texture coordinate sent down the pipe.

(We do things this way because it's more efficient to specify
the most common setting of a mode in the global state and leave
it unspecified in the individual pfGeoStates.  Since most FLT
databases are textured, the FLT loader doesn't enable texture
explicitly in every pfGeoState instead leaving it to be
inherited from the default state.)

rgds,

-jim helman

jimh@surreal.asd.sgi.com
415/390-1151






From guest  Mon Jun  6 17:51:55 1994
From: "Michael Jones" <mtj@babar>
Message-Id: <9406061751.ZM6361@babar.asd.sgi.com>
Date: Mon, 6 Jun 1994 17:51:41 -0700
In-Reply-To: darken@enews.nrl.navy.mil (Rudy Darken)
        "line rendering in performer" (Jun  6,  5:06pm)
References: <9406062106.AA18911@enews.nrl.navy.mil>
X-Mailer: Z-Mail (3.1.0 22feb94 MediaMail)
To: darken@enews.nrl.navy.mil (Rudy Darken), info-performer@sgi.sgi.com
Subject: Re: line rendering in performer
Content-Type: text/plain; charset=us-ascii
Mime-Version: 1.0
Status: O

Actually, the problem is that the geoset you build does not
specify a geostate at all -- the code that binds the new
geostate to the geoset's been commented out. What does
this mean? It means that you are explicitly saying to
IRIS Performer "I don't care what the state of the
graphics pipeline is -- just draw the geometry and
hope for the best".  In your case, as you move about,
the sorting of libpf is changing what gets drawn just
before the grid: sometimes the sky, sometimes a
textured part of the car, etc. Whatever it is, it's color
and material properties are used by your grid.

If you change it to use the newly created geostate,
then you'll not have this problem. Or, you could
specify appearance properties in the geostate that
would cause the grid to always be drawn with the
same graphics state.

-- 

Be seeing you,      Phone:415.390.1455  Fax:415.390.2658 M/S:9U-590
Michael T. Jones    Silicon Graphics, Advanced Graphics Division
mtj@sgi.com         2011 N. Shoreline Blvd., Mtn. View, CA 94039-7311






From guest  Wed Jun  8 13:23:14 1994
Date: Wed, 8 Jun 94 16:26:13 -0400
Message-Id: <9406082026.AA17815@enews.nrl.navy.mil>
To: info-performer@sgi.sgi.com
From: darken@enews.nrl.navy.mil (Rudy Darken)
Subject: line rendering in performer (conclusion; happy ending)
Status: OR

Below is Michael Jones' code to create a grid of lines.
I added it as is to smallfly as I had done for my LoadGrid
function which was included in an earlier post. The same
results were observed. The grid was red only when the other
geometry (esprit.flt in my case) was not in view. However,
as suggested by Jim Helman, adding the line noted by **
in the code below which disables lighting for the lines
does eliminate the problem. Thanks very much for your assistance
and patience. This problem has been hanging on for months.
I finally got stubborn enough to fix it.

rudy

*** Begin Michael Jones' code ***

What's your experience with the code below? It's my attempt to draw
lines, and seems to work. I added it to Perfly and all seems well.

/*
 * Make a "grid of lines" graphic object
 */

pfNode *
MakeGrid (void)
{
    void        *arena          = NULL;
    pfMaterial  *material       = NULL;
    pfGeoState  *geostate       = NULL;
    pfGeoSet    *geoset         = NULL;
    pfGeode     *geode          = NULL;

    pfVec3      *v              = NULL;
    pfVec3      *vp             = NULL;
    pfVec4      *c              = NULL;

    int         nx              =  30;
    int         ny              =  30;
    float       x0              = -10.0f;
    float       y0              = -10.0f;
    float       z0              =   5.0f;
    float       x1              =  10.0f;
    float       y1              =  10.0f;
    float       dx              =  x1 - x0;
    float       dy              =  y1 - y0;

    int         x;
    int         y;

    /* access the global shared-memory arena */
    arena = pfGetSharedArena();

    /* make a material that specifies LMC_AD mode */
    material = pfNewMtl(arena);
    pfMtlColor(material, PFMTL_AMBIENT,  0.1, 0.1, 0.1);
    pfMtlColor(material, PFMTL_SPECULAR, 0.8, 0.8, 0.8);
    pfMtlColorMode(material, PFMTL_FRONT, LMC_AD);

    /* specify material but inherit all other geostate attributes */
    geostate = pfNewGState(arena);
    pfGStateAttr(geostate, PFSTATE_FRONTMTL, material);
**  pfGStateAttr(geostate, PFSTATE_ENLIGHTING, PF_OFF);

    /* create geoset at attach geostate to it */
    geoset = pfNewGSet(arena);
    pfGSetPrimType(geoset, PFGS_LINES);
    pfGSetGState(geoset, geostate);

    /* build and attach vertex array */
    vp = v = (pfVec3 *)pfMalloc((2*nx + 2*ny)*sizeof(pfVec3), arena);
    for (x = 0; x < nx; x++)
    {
        pfSetVec3(vp++, x0 + x*dx/(nx-1), y0, z0);
        pfSetVec3(vp++, x0 + x*dx/(nx-1), y1, z0);
    }
    for (y = 0; y < ny; y++)
    {
        pfSetVec3(vp++, x0, y0 + y*dy/(ny-1), z0);
        pfSetVec3(vp++, x1, y0 + y*dy/(ny-1), z0);
    }
    pfGSetAttr(geoset, PFGS_COORD3, PFGS_PER_VERTEX, v, NULL);
    pfGSetNumPrims(geoset, nx + ny);

    /* build and attach color array */
    c = (pfVec4 *)pfMalloc(sizeof(pfVec4), arena);
    pfSetVec4(c, 1.0f, 0.0f, 0.0f, 1.0f);
    pfGSetAttr(geoset, PFGS_COLOR4, PFGS_OVERALL, c, NULL);

    /* create geode and attach geoset to it */
    geode = pfNewGeode();
    pfAddGSet(geode, geoset);

    /* return address of geode to caller */
    return (pfNode *)geode;
}


_______________________________________________________________
Rudy Darken  <202> 767-6814
darken@enews.nrl.navy.mil    The U.S. Naval Research Laboratory
darken@seas.gwu.edu           The George Washington University
_______________________________________________________________






