Allan Schaffer (aschaffe)
Wed, 27 Oct 93 22:33:36 -0700
SGI performer Frequently Asked Questions (FAQ)
Topics covered in this FAQ:
--------------------------
-1- How can I quickly find the question I want in this FAQ?
-2- What is IRIS Performer?
-3- Where can I get more technical information about IRIS Performer?
-4- Where can I get more product information about IRIS Performer?
-5- What are the released versions of IRIS Performer?
-6- Is there a IRIS Performer file format?
-7- What database file formats can IRIS Performer read?
-8- Is there an IRIS Inventor file reader for IRIS Performer?
-9- What are the .tlf files used by the Performer Town and Village?
-10- What are the minimum requirements for using IRIS Performer?
-11- How do I make GL calls from within a IRIS Performer program?
-12- How do I overlay graphics on top of my Performer scene?
-13- What is the difference between phases FREE, FLOAT, and LOCK?
-14- Which rendering primitives does IRIS Performer support?
-15- How do I do triangle meshes in Performer?
-16- pfInit(): mmap failed for /dev/zero
-17- IRIX 5.x Bug in Performer Town or Village demos
-18- 1.0 Doc Bug in pfMakePolarSeg() man page
-19- 1.0 Doc Bug in pfDispList() man page
-20- 1.0 Doc Bug in PFPG (simple.c)
-21- 1.0 Bug in pfGetTime()
-22- 1.0 Bug in pfNodeBBox()
-23- 1.0 Bug in pfInitGfx() with Z-buffer on RealityEngine
-24- 1.0 Bug in libpfflt combineLODs()
-25- 1.0 Bug with two-sided material and pfMtlColorMode()
-26- 1.0 Bug in pfFilePath()
-27- 1.0 Bug in pfGetCurGState()
-28- 1.0 Bug in pfGetCurState()
-29- 1.0 Bug with cloned scenes
-30- 1.0 Bug intersections in collide.c
-31- 1.0 Bug with flattened pfLightPoints
-32- 1.0 Bug intersections with pfSequences
-33- 1.0 Bug intersections with non-indexed quads
-34- 1.0/1.1 Bug intersections with pfSwitch'es
-35- 1.0/1.1 Bug with pfTexture()
-36- 1.0/1.1 Bug with pfAntiAlias()
-37- 1.0/1.1 Bug with pfFlatten()
-38- 1.0/1.1 Bug with pfSequences
-39- 1.0/1.1 Bug with zero-length pfGeoSets
-40- 1.0/1.1 Bug with pfClosestPtOnPlane()
-41- 1.0/1.1 Bug on ELAN/XS with wireframe PFGS_QUADS
-42- 1.1 Bug with FP underflow
-43- 1.1 Bug with Multipipe Onyx
-44- Credits
----------------------------------------------------------------------
Subject: -1- How can I quickly find the question I want in this FAQ?
Date: 27 May 93 00:00:01 EST
- This FAQ follows the RFC1153 recommendations for message digests and thus
can be viewed easily with newsreaders that understand message digests.
- Each question has a Subject: line, so you can easily step through the answers
with rn's ^G command.
- Each question is marked with a "dash number dash" so that you can find any
answer with a simple search pattern.
- Questions marked with a '+' are new this posting; those marked with a '!'
have significant new content since the last edition.
------------------------------
Subject: -2- What is IRIS Performer?
Date: 06 Oct 93 00:00:01 EST
IRIS Performer is a software development environment that supports
programmers implementing high performance graphics applications on
Silicon Graphics products. It offers both high level facilities for
visual simulation and virtual reality tasks and an application-neutral
high-performance hardware-oriented graphics toolkit.
The outer application specific layer of IRIS Performer implements the
tasks needed by visual simulation applications: it performs culling
so that only potentially visable geometry is sent to the graphics
hardware; it controls multiple display channels; it provides fast
intersection tests with simulation databases; and most importantly,
it orchestrates all of this in parallel with rendering on multiple
processor IRIS systems.
The lower-level rendering portion of IRIS Performer is designed for
maximum performance: its efficient data structures reflect the
details of CPU, cache, and memory system architectures; its tuned
rendering loops convert the system CPU into an optimized data
movement engine; and its optimized state management system optimizes
hardware utilization.
IRIS Performer provides a high-performance portability path across
the Silicon Graphics product line. The low level library is
implemented as a hardware-specific shared library, so applications
based on IRIS Performer can achieve peak performance on graphics
systems from Elan to RealityEngine2 without changes or
recompilation.
The product includes a programmer's guide and printed man pages, as
well as on-line man pages, test and demonstration programs, and
complete real-time visual simulation applications. These applications
are provided in source form as an examples of how to build real-time
simulation systems using IRIS Performer. Also included are several
databases in FLIGHT and Wavefront "OBJ" format and source code for
database readers that can load them.
------------------------------
Subject: -3- Where can I get more technical information about IRIS Performer?
Date: 06 Oct 93 00:00:01 EST
One method is to join the IRIS Performer mailing list.
The list is intended to be an unmoderated, free-form discussion of
IRIS Performer with issues both technical and non-technical; and to
provide feedback to Silicon Graphics about the product. Much like
the comp.sys.sgi.* newsgroups, it is not an official support channel
but is monitored by several interested SGI employees familiar with
the toolkit.
To become a subscriber to the IRIS Performer mailing list you must
send email to:
info-performer-request++at++sgi.com
New subscribers are added "by hand". Once your request is processed
you will recieve submission/posting instructions, some guidelines,
and a current copy of the Performer Frequently-Asked-Questions (FAQ)
list.
------------------------------
Subject: -4- Where can I get more product information about IRIS Performer?
Date: 06 June 93 00:00:01 EST
For product information about IRIS Performer or SGI Visual Simulation
issues contact John Burwell (johnnyb++at++asd.sgi.com). To learn about
SGI Virtual Reality solutions contact Joshua Mogal (415) 390-1460
(mogal++at++asd.sgi.com). To just give in and buy a copy ($495 US) call
SGI Express at 1-800-800-7441, or to have both a demonstration and a
presentation call your local SGI sales office.
------------------------------
Subject: -5- What are the released versions of IRIS Performer?
Date: 06 Oct 93 00:00:01 EST
IRIS Performer 1.0: For machines running IRIX 4.x only
IRIS Performer 1.1: For machines running IRIX 5.x only
IRIS Performer 1.2 is currently in an early stage of beta testing.
It will run on machines running either IRIX 4.x or IRIX 5.x
------------------------------
Subject: -6- Is there a IRIS Performer file format?
Date: 26 Oct 93 00:00:01 EST
Not at this time. Currently, IRIS Performer has functionality to
load other vendors' database files at run time.
------------------------------
Subject: -7- What database file formats can IRIS Performer read?
Date: 26 Oct 93 00:00:01 EST
IRIS Performer 1.0 and 1.1 include database loaders for MultiGen v11
"flt", SGI "bin", and SGI "obj" formats.
IRIS Performer 1.2 will include loading utilities and file loaders
for additional file formats, including Coryphaeus "dwb", MultiGen v12
"flt", AutoCAD "dxf", and Wavefront "obj".
You can get a MultiGen 12 version of LoadFlt() for Performer 1.0 and
1.1 by contacting Norm Miller at Software Systems, the makers of
MultiGen.
Mr. Norm Miller
Software Systems
1884 The Alameda
San Jose, CA 95126
P: (408) 247-4326
F: (408) 247-4329
multigen!norm++at++uunet.UU.NET
------------------------------
Subject: -8- Is there an IRIS Inventor file reader for IRIS Performer?
Date: 26 Oct 93 00:00:01 EST
Not at this time. An IRIS Inventor file reader is a planned
feature for Performer 1.2.
------------------------------
Subject: -9- What are the .tlf files used by the Performer Town and Village?
Date: 26 Oct 93 00:00:01 EST
They are encrypted .flt files of the Town and Village database.
Only the "demo" version of perfly can read these files.
Unencrypted versions of the Town and Village databases are planned
to be included in Performer 1.2.
------------------------------
Subject: -10- What are the minimum requirements for using IRIS Performer?
Date: 06 June 93 00:00:01 EST
IRIS Performer requires IRIX 4.0.5 or later. Because IRIX 4.0.5F
added several new Graphics Library (GL) calls to support
RealityEngine features, any application that uses GL routines or
tokens found only in 4.0.5F and later, will not run properly under
4.0.5C and earlier releases.
------------------------------
Subject: -11- How do I make GL calls from within a IRIS Performer program?
Date: 26 Oct 93 00:00:01 EST
GL calls can only be made from a process that has a GL context. In
multi-process Performer applications only the draw process has GL
context, so you must make your GL calls in a function called in the
draw process.
The pipe initialization callback, draw function callback, and node
draw callbacks are all executed in the draw process.
In an application that only will ever run single-process, GL calls
can be made from anywhere in the program.
To set up a pipe initialization callback, see the pfInitPipe() man page.
To set up a draw function callback, see the pfChanDrawFunc() man page.
To set up a node draw callback, see the pfNodeTravFuncs() man page.
------------------------------
Subject: -12- How do I overlay graphics on top of my Performer scene?
Date: 06 Oct 93 00:00:01 EST
Typically this is done to implement a heads-up display (HUD).
In the draw function callback, the basic algorithm is:
save state with pfPushState()
load default state with pfBasicState(), as needed
disable textures, fog, & lighting, as needed
save & clear projection matrix
ortho2()
save & clear modelling matrix
draw()
restore modelling matrix
restore projection matrix
restore state with pfPopState()
Or, you can draw your static info in the overlay planes and only
redraw it when the window receives a REDRAW event (moved, resized,
etc.). Changing between drawing to the overlays and drawing to
regular bitplanes takes a big hit.
For things that need to be updated real-time, draw() would consist
of:
zfunction(ZF_ALWAYS);
zwritemask(0x0);
draw HUD stuff
zfunction(ZF_LEQUAL);
zwritemask(0xffffffff);
------------------------------
Subject: -13- What is the difference between phases FREE, FLOAT, and LOCK?
Date: 26 Oct 93 00:00:01 EST
PFPHASE_FREE_RUN wakes the application and draw processes up on the
next video field boundary after the draw finishes. i.e. it's
Performer's version of the usual run as-fast-as-I-can or
as-slow-as-I-must mode that most simple graphics programs use.
PFPHASE_FLOAT wakes the application up only on frame boundaries, i.e.
time = n*(1/frame_rate). However, the draw process "floats" with
respect to the frame rate and wakes up on the next possible field
boundary and then does a swapbuffers() when it's done, regardless of
whether it finished drawing in time for the desired frame rate.
Hence you see every frame that's drawn to the backbuffer, but it may
not appear at exactly the time for which it was planned. If you
never frame extend, it behaves like PFPHASE_FIXED. Latency is
variable.
PFPHASE_LOCK wakes the application and draw up only on frame
boundaries and only swaps on frame boundaries. The advantage is that
each new image always appears at precisely the time for which it was
rendered. The disadvantage is that if the draw runs even slightly
over a frame time, you skip that entire frame and are stuck with an
outdated picture for a frame. Latency is fixed.
For more information see the pfPhase() man page or section 7.1.2 of
the PFPG.
------------------------------
Subject: -14- Which rendering primitives does IRIS Performer support?
Date: 06 Oct 93 00:00:01 EST
Points (PFGS_POINTS),
Independent line segments (PFGS_LINES),
connected line strips (PFGS_LINESTRIPS),
Independent Triangles (PFGS_TRIS),
Connected triangle strips (PFGS_TRISTRIPS),
Independent quadrilaterals (PFGS_QUADS).
------------------------------
Subject: -15- How do I do triangle meshes in Performer?
Date: 06 Oct 93 00:00:01 EST
You must change your triangle meshes to triangle strips by hand.
In Performer 1.2, pfuMeshGSet (from libpfutil) will do this for you.
------------------------------
Subject: -16- pfInit(): mmap failed for /dev/zero
Date: 26 Oct 93 00:00:01 EST
This means that you tried to run a Performer 1.0 application
(such as a 4.x version of perfly) on a machine running IRIX 5.x.
Virtual memory management is different in IRIX 5.x. In order
for your program to work properly you must:
% setenv PFTMPDIR /usr/tmp
------------------------------
Subject: -17- IRIX 5.x Bug in Performer Town or Village demos
Date: 26 Oct 93 00:00:01 EST
It was reported that perfly would cause an Onyx RE or VTX running
IRIX 5.0 to hang. This was fixed in 5.0.1.
In 5.0.1, perfly would generate floating point exceptions due to a
bug in the font manager library (libfm). This was fixed in 5.1.
------------------------------
Subject: -18- 1.0 Doc Bug in pfMakePolarSeg() man page
Date: 26 Oct 93 00:00:01 EST
The man page for pfMakePolarSeg contradicts itself with respect to
the meaning of azimuth and elevation. The correct paragraph should
be:
pfMakePolarSeg sets dst to the segment which starts at pos
and has length length and points in the direction specified
by azi and elev. azi specifies the azimuth (or heading),
which is the angle which the projection of the segment in the
X-Y plane makes with the +Y axis. elev specifies the
elevation (or pitch), the angle with respect to the X-Y
plane. The positive Y axis is azi=0 and elev=0. Azimuth
follows the right hand rule about the +Z azis, e.g. - +90
degrees is the -X axis. Similarly, elevation follows the
right hand rule about the X axis, e.g. - +90 degrees is the
+Z axis.
Note that in IRIS Performer 1.0, an azi and elev of 0.0 is equivalent
to the +X axis while in 1.1, this has been changed to the +Y axis.
------------------------------
Subject: -19- 1.0 Doc Bug in pfDispList() man page
Date: 26 Oct 93 00:00:01 EST
The pfDispList man page says the size argument is in bytes; it should
say words.
------------------------------
Subject: -20- 1.0 Doc Bug in PFPG (simple.c)
Date: 26 Oct 93 00:00:01 EST
The program simple.c in the IRIS Performer Programming Guide (PFPG)
does not bind a light and draws a black image on Elan systems. The
corrected version, which creates and binds a light in the pipe
initialization callback, is in /usr/src/Performer/src/pguide
------------------------------
Subject: -21- 1.0 Bug in pfGetTime()
Date: 26 Oct 93 00:00:01 EST
In 1.0, pfGetTime() would occasionally return bad values (off by
4000+ seconds) on Indigo2 and machines without a fast counter, e.g.
PowerSeries/IO2.
There was no workaround.
------------------------------
Subject: -22- 1.0 Bug in pfNodeBBox()
Date: 26 Oct 93 00:00:01 EST
pfNodeBBox did not set the bounding box of a node. A symptom was
that the bounding boxes of the node would not change when modifying a
parent pfDCS.
The workaround was to OR the value 0x0010 into the mode, e.g.-
pfNodeBBox(node, &bbox, PFN_BMODE_STATIC | 0x0010);
------------------------------
Subject: -23- 1.0 Bug in pfInitGfx() with Z-buffer on RealityEngine
Date: 26 Oct 93 00:00:01 EST
pfInitGfx on RealityEngines would call lsetdepth(0x0, 0x0),
essentially disabling zbuffering.
The workaround was to call lsetdepth explicitly after pfInitGfx,
in the pipe initialization callback.
------------------------------
Subject: -24- 1.0 Bug in libpfflt combineLODs()
Date: 26 Oct 93 00:00:01 EST
combineLODs() in the MultiGen .flt converter (in file hier.c) did not
set the LOD center of combined LODs. This would result in strange
LOD behavior for LODs which were not modelled about the origin.
------------------------------
Subject: -25- 1.0 Bug with two-sided material and pfMtlColorMode()
Date: 26 Oct 93 00:00:01 EST
Applying a back-sided material which had a color mode
(pfMtlColorMode), would set the GL lmcolor mode. Since
IrisGL does not support lmcolor for back-sided materials,
this could have caused front-sided materials to use an
improper lmcolor mode.
------------------------------
Subject: -26- 1.0 Bug in pfFilePath()
Date: 26 Oct 93 00:00:01 EST
pfFilePath would exit with a FATAL error if it was called twice.
------------------------------
Subject: -27- 1.0 Bug in pfGetCurGState()
Date: 26 Oct 93 00:00:01 EST
pfGetCurGState returned a pfGeoState which was the top of the state
stack rather than the most recently applied pfGeoState.
------------------------------
Subject: -28- 1.0 Bug in pfGetCurState()
Date: 26 Oct 93 00:00:01 EST
pfGetCurState returned a pfGeoState which was the top of the state
stack rather than the current pfState.
------------------------------
Subject: -29- 1.0 Bug with cloned scenes
Date: 26 Oct 93 00:00:01 EST
pfClone()'ed scenes were not properly cleaned and did not properly
propagate updates. In particular, cloned pfSequences did not work.
------------------------------
Subject: -30- 1.0 Bug intersections in collide.c
Date: 26 Oct 93 00:00:01 EST
collide.c was shipped with a hardwired intersection mode which turned
off intersection caching, substantially reducing intersection
performance.
------------------------------
Subject: -31- 1.0 Bug with flattened pfLightPoints
Date: 26 Oct 93 00:00:01 EST
pfFlatten()'ed pfLightPoints were broken for multiprocessing modes
when the application and cull processes were separate.
------------------------------
Subject: -32- 1.0 Bug intersections with pfSequences
Date: 26 Oct 93 00:00:01 EST
Intersections with pfSequences could sometimes turn them off
(PFSEQ_STOP).
------------------------------
Subject: -33- 1.0 Bug intersections with non-indexed quads
Date: 26 Oct 93 00:00:01 EST
Intersection caching for non-indexed quads was broken and could case
a core dump when intersection with pfGeoSets of this type.
------------------------------
Subject: -34- 1.0/1.1 Bug intersections with pfSwitch'es
Date: 26 Oct 93 00:00:01 EST
Intersections with pfSwitch'es whose value is PFSWITCH_OFF could
cause a core dump.
------------------------------
Subject: -35- 1.0/1.1 Bug with pfTexture()
Date: 26 Oct 93 00:00:01 EST
On RealityEngine systems, EXTERNAL format was ignored.
------------------------------
Subject: -36- 1.0/1.1 Bug with pfAntiAlias()
Date: 26 Oct 93 00:00:01 EST
On RealityEngine systems, pfAntialias(PFAA_OFF) did not turn off
multisampling.
------------------------------
Subject: -37- 1.0/1.1 Bug with pfFlatten()
Date: 26 Oct 93 00:00:01 EST
pfFlatten did not dirty bounding spheres of flattened nodes so they
had improper bounds and would not cull correctly.
------------------------------
Subject: -38- 1.0/1.1 Bug with pfSequences
Date: 26 Oct 93 00:00:01 EST
pfSequences: PFSEQ_RESUME ignored children's display times and drew
subsequent children for 1 frame only.
------------------------------
Subject: -39- 1.0/1.1 Bug with zero-length pfGeoSets
Date: 26 Oct 93 00:00:01 EST
pfGeoSets with primitive counts of zero caused core dumps in
pfFlatten() and elsewhere.
------------------------------
Subject: -40- 1.0/1.1 Bug with pfClosestPtOnPlane()
Date: 26 Oct 93 00:00:01 EST
pfClosestPtOnPlane returned wrong result. Also, the man page had the
wrong prototype.
------------------------------
Subject: -41- 1.0/1.1 Bug on ELAN/XS with wireframe PFGS_QUADS
Date: 26 Oct 93 00:00:01 EST
On EXPRESS Graphics platforms (XS, XS24, ELAN, etc), wireframe quads
have a stray line from one vertex to "infinity" when displayed in
wireframe mode.
------------------------------
Subject: -42- 1.1 Bug with FP underflow
Date: 26 Oct 93 00:00:01 EST
The cull process could encounter an FP underflow that could
periodically affect cull performance.
------------------------------
Subject: -43- 1.1 Bug with Multipipe Onyx
Date: 26 Oct 93 00:00:01 EST
There is a bug in the 1.1 multipipe code. The symptom is a
core dump and an error like:
Performer Fatal (4):pfFree() pointer 0x9c9350 not from pfMalloc
The workaround is to do the following after you've created
a channel with pfNewChan:
((long**)chan)[3] = NULL;
------------------------------
Subject: -44- Credits
Date: 27 Oct 93 00:00:01 EST
The Performer FAQ is compiled by:
Allan Schaffer aschaffe++at++sgi.com
Special thanks are due to the Performer engineering team at Silicon
Graphics, whose collective input has formed much of what you see here.
------------------------------
----
Allan Schaffer
Silicon Graphics
aschaffe++at++sgi.com
This archive was generated by hypermail 2.0b2 on Mon Aug 10 1998 - 17:50:04 PDT