Inventor logo

Open Inventor Frequently Asked Questions

General Questions

What is Open Inventor?
What is IRIS Inventor?
Is Inventor a format for 3D data?
Can I use Inventor to create 3D objects?
Is Inventor a user interface toolkit?
Is there a performance cost using a software layer on top of GL?
Does Inventor require C++?
Does Inventor work with the GNU C++ compiler?
Does Inventor have a Fortran or Ada API?
Where can I get detailed, technical information on Inventor?
How much does Inventor cost?
How can I order Inventor software and/or documentation?
How can I learn Inventor Programming?

Questions about Open Inventor

What version of Open Inventor runs on which version of IRIX?
Why isn't Open Inventor available on the VGX(T)/GT(X)/PI?
What new features are in Open Inventor that weren't in IRIS Inventor?
How hard is it to port from IRIS Inventor to Open Inventor?
How can I make my Inventor application faster?
When I compile my Inventor program, I get an error in SoDebugError.h.

Questions about IRIS Inventor

What version of IRIS Inventor runs on which version of IRIX?
Will I be automatically upgraded to Open Inventor if I have IRIS Inventor?
Will my IRIS Inventor programs stop working if I install Open Inventor?
Can I develop Open and IRIS Inventor programs on the same system?
Prerequisite error installing Inventor 1.1.2.
Why do I get errors compiling the Inventor sample programs?

General Answers

What is Open Inventor?
Open Inventor is an object-oriented 3D toolkit offering a comprehensive solution to interactive graphics programming problems. It presents a programming model based on a 3D scene database that dramatically simplifies graphics programming. It includes a rich set of objects such as cubes, polygons, text, materials, cameras, lights, trackballs, handle boxes, 3D viewers, and editors that speed up your programming time and extend your 3D programming capabilities.

Open Inventor:

What is IRIS Inventor?
IRIS Inventor was the first release of Inventor; it is also known as Inventor 1.0 (Open Inventor is Inventor 2.0). It is built on top of IRIS GL rather than OpenGL, and has fewer features.

Is Inventor a format for 3D data?
Inventor defines a powerful, extensible format for 3D objects and scenes. The Inventor format is the standard for 3D objects on Silicon Graphics machines, and may become the standard for all machines.

However, Inventor is more than a 3D object file format; it is a complete toolkit for writing interactive, 3D applications.

Can I use Inventor to create 3D objects?
Inventor is for programmers writing 3D applications, and does not directly provide any way for users to create 3D objects. Several Inventor applications have been written that create 3D objects. Showcase 3.0, which is bundled with IRIX, is a fairly simple example. A much more sophisticated modeller called Ez3d built on top of Inventor is available from Radiance Software International.

Is Inventor a user interface toolkit?
Yes and no. Inventor contains mostly 3D objects. There is little in the way of conventional user interface objects such as buttons, dialogs, and menus. However, Inventor includes a full-fledged event model, a framework designed for 2D or 3D user interaction, and some manipulator objects for 3D user interface building. Note that the Inventor Xt Component and Utility Library includes some traditional 2D user interface widgets.

Is there a performance cost using a software layer on top of GL?
Sometimes. Note that few GL programs achieve peak graphics performance. This is because most applications have natural application overhead, and also because many programmers lack a thorough understanding of the details and eccentricities of GL. If you are writing a simple display-only, immediate-mode GL program, then it will run faster using straight GL, but not much. However, if your program has scene traversal, interactivity, picking, bounding box calculations, and other object space tasks, then Inventor will perform better for you. This is because Inventor is specially tuned to make optimal use of GL on each SGI machine. Furthermore, Inventor supports render caching which results in peak GL performance in most cases.

We have found that in many cases, Inventor programs run FASTER than the original GL program, and that the programmer productivity increases easily outweigh the overhead of the toolkit.

Does Inventor require C++?
No. You can use the C API and never see or use C++. However, subclassing to extend the toolkit does require C++.

Does Inventor work with the GNU C++ compiler?
No, Inventor requires SGI's C++ compiler. The GNU C++ compiler and SGI's C++ compiler produce incompatible code, and Silicon Graphics does not ship an Inventor library compatible with GNU C++.

Does Inventor have a Fortran or Ada API?
No.

Where can I get detailed, technical information on Inventor?
The Inventor Mentor, written by Josie Wernecke, is published by Addison-Wesley and is available in technical bookstores (ISBN 0-201-62495-8).

How much does Inventor cost?
If you want to write Inventor applications on SGI machines, you need the Inventor developer's option. In the United States, this option costs $995 for the Open Inventor release and $495 for the IRIS Inventor releases. There are no royalties for distributing applications based on Inventor.

Every SGI machine is shipped with the libraries needed to run Inventor applications (they are part of the inventor_eoe installation subsystem); users that want to run Inventor applications on SGI machines do not need to pay anything extra.

How can I order Inventor software and/or documentation?
Call your local SGI sales representative or 1-800-800-7441 to order.

How can I learn Inventor Programming?
SGI Technical Education offers a week-long course in Inventor Programming. Call 1-800-800-4SGI to sign up.

Open Inventor Answers

What version of Open Inventor runs on which version of IRIX?
Inventor 2.0 runs on IRIX 5.2 and higher only.

Why isn't Open Inventor available on the VGX(T)/GT(X)/PI?
Open Inventor requires OpenGL, which is not currently available on older SGI machines.

What new features are in Open Inventor that weren't in IRIS Inventor?
Some of the main features that are new with Open Inventor are:
Open Inventor Licensing
Open Inventor 2.0 represents the first release of Inventor that is licensed to third parties to run on other platforms (e.g., Sun, HP).
The Inventor Mentor and The Inventor Toolmaker
Since Open Inventor has been licensed to run on other platforms, the programming guides have been published and distributed by Addison-Wesley Publishing Company. The books are typically available through bookstores that offer a good technical book selection. The Inventor Mentor is volume I of the programming guide and describes the fundamentals of Inventor programming (ISBN 0-201-62495-8). The Inventor Toolmaker is volume II and provides advanced information for programmers who want to extend Inventor.
Automatic caching
Open Inventor supports intelligent, automatic caching on the parts of the database that are not changing. Previously, caching was either `on' or `off' (set at SoSeparator nodes). Inventor 2.0 supports a third setting, `auto'. This SIGNIFICANTLY improves performance and simplifies programming.
Error handling
Inventor now supports a formal error handling system. Note that the API was not affected by this change. All Inventor error messages are now posted to an SoError class. The application can supply its own error handlers, thus making it possible to route error messages to dialogs, as well as stderr or stdout. All handlers are called by the SoError::handleError() method. When debugging, you can set a breakpoint on this method to stop right before an error is handled.
Geometry primitives and SoCallbackAction
A new feature has been added to the generic Inventor traversal action, SoCallbackAction, that allows for shapes to return primitives (triangles, lines, points, normals, texture coords, etc.) describing the object.
Naming
Nodes, paths, and engines can have names (strings) associated with them. There are methods on SoBase::setName() and getName() to set/get names. To search for objects by name, see SoNode::getByName(), SoPath::getByName(), and SoEngine::getByName(). Also, the SoSearchAction can now search based on the name.
OpenGL rendering
Open Inventor 2.0 uses OpenGL for all rendering; there are no calls to Iris GL in Inventor 2.0. If you have written derived node classes in 1.0, the Iris GL code must be re-written to OpenGL.
Printing
Printing has been completely reimplemented using OpenGL rendering to an off-screen image. All rendering features can now be printed (e.g. textures and transparency).
Render Culling
Inventor now supports object level culling to the viewport. Culling, like caching, is controlled by SoSeparators.
Unknown nodes
Inventor 2.0 reads unrecognized node classes from file and attempts to use them. When an unknown class is read, Inventor will search for an accompanying DSO file and use it, (uses environment variable LD_LIBRARY_PATH to search for file classname.so) If none is found, an SoUnknownNode or SoUnknownEngine is created and used instead.

Inventor 2.0 also supports a special option for nodes called alternateRep. It can store a scene graph composed of standard Inventor nodes which will be rendered as a stand-in for your unrecognized node. During writing, the node or engine is written back out. Note that this mechanism works only with Inventor 2.0 files; unrecognized nodes in an Inventor 1.0 file will still generate a read error. This mechanism allows user subclassed nodes to be exportable, renderable, and re- usable.

SoEngine
A new class of objects used for animation and behavior. Engines are lightweight objects that are connected between nodes, the clock, and other engines to form interesting behaviorial objects (e.g. spinning windmill). Engines can be written to file along with the 3d scene.

How hard is it to port from IRIS Inventor to Open Inventor?
Most Inventor programs will be fairly easy to port. The Inventor 2.0 release notes contain detailed information on converting your application. Most of your porting job will be fixing minor syntax changes (e.g. some length() methods were renamed getLength() for consistency with the rest of the toolkit) and fixing #include lines for files under /usr/include/Inventor that were moved around (e.g. all of the Xt components are now under /usr/include/Inventor/Xt).

Inventor programs that contain a lot of IRIS GL code or that made extensive use of Inventor subclassing will be more difficult to port, since they will have to be ported to OpenGL and since the internal structure of Inventor underwent some major changes.

How can I make my Inventor application faster?
Read Optimizing Open Inventor Applications (available via anonymous ftp to ftp.sgi.com in sgi/inventor/2.0/OptimizingApps.ps.Z), which describes a methodology for finding performance problems using the ivperf utility (available via anonymous ftp to ftp.sgi.com in the file sgi/inventor/2.0/ivperf.tar.Z), and gives suggestions on how to improve an application's performance.

When I compile my Inventor program, I get an error in SoDebugError.h.
You, or something you #include, are #include'ing the IRIS GL header file (gl/gl.h). It does: "#define WARNING 2", which conflicts with the enum value called "WARNING" in SoDebugError. You cannot mix Open Inventor with IRIS GL anyway (because you cannot mix OpenGL with IRIS GL), so you should fix your program so it doesn't try to #include <gl/gl.h> it should use <GL/gl.h>, the OpenGL include file.

IRIS Inventor Answers

What version of IRIS Inventor runs on which version of IRIX?
    IRIX     IRIS Inventor Version
  --------------------------------
   3.3.*   | (Inventor is not available for IRIX 3.*)
   4.0.*   | 1.0.1
   5.0.1   | (bad release... do not use)
   5.1.*   | 1.1.2
   5.2.*   | Open Inventor 2.0 (1.1.2 on VGX(T)/GT(X)/PI)

Will I be automatically upgraded to Open Inventor if I have IRIS Inventor?
Customers with software maintenance contracts that have purchased the Inventor 1.0 developer's option will receive the Inventor 2.0 developer's option when they receive IRIX 5.2.

Will my IRIS Inventor programs stop working if I install Open Inventor?
No. The Inventor 2.0 run-time system (inventor_eoe) contains a complete set of compatibility libraries that will allow existing IRIS Inventor applications to continue to work.

Can I develop Open and IRIS Inventor programs on the same system?
Yes, as long as your system supports OpenGL (Indy, Indigo, Indigo2, Crimson, and RealityEngine support OpenGL at this time). First, install the 2.0 version of both inventor_dev and inventor_eoe. REALLY IMPORTANT: When installing Inventor 2.0, previous Inventor versions will AUTOMATICALLY be removed.

To re-install 1.1.2, you will need to use the 1.1.2 CD* to install 1.1.2 into a different location (so as not to ruin 2.0). Please note that you will have to change the Makefiles of programs that will compile and link with 1.1.2 (-I and -l need to point to your safe locations of Inventor 1.1.2). To install Inventor 1.1.2 under a different root directory than /, so that Inventor 2.0 may be installed under /:

    # Install 1.1.2 compatibility library from Inventor 2.0 images
    inst -f inventor_eoe (get inventor_eoe.sw.1_1)
    # Create a directory to hold Inventor 1.1.2
    mkdir /usr/myroot
    # Fool inst into thinking you have prerequisites installed
    mkdir -p /usr/myroot/var/inst
    cp /var/inst/{c,dev,c_dev,gl_dev,motif_eoe,inventor_eoe} /usr/myroot/var/inst
    # Install Inventor 1.1.2 under your root directory
    inst -r /usr/myroot -f inventor_dev
To make Inventor 1.1.2 sample programs in this new directory:
    ln -s /usr/lib/libInventor.so.1 /usr/myroot/usr/lib/libInventor.so
    cd /usr/myroot/usr/share/src/Inventor/examples/PG1
    # Add to the Makefile, after the line: include /usr/include/make/commondefs
    LC++INCS = -I/usr/myroot/usr/include
    LCINCS   = -I/usr/myroot/usr/include
    LLDOPTS  = -L/usr/myroot/usr/lib

To re-install Inventor 1.0.1, install the subsystem "irix4_inventor_dev", found on the Inventor 2.0 or Inventor 1.1.2 CDs. This will install the 1.0.1 headers and libraries under /usr/irix4. You must change your makefiles to use include and link to this new location.

Prerequisite error installing Inventor 1.1.2.
Many customers are running into an inst installation prerequisite error when they try to load inventor_dev 1.1.2 onto their IRIX 5.2 system. This error is due to a name change in c and dev subsystems between IRIX 5.1 and 5.2. The new name is c_dev. The fix is to load the *new* inventor_dev 1.1.2 (part # 812-0136-005) made for IRIX 5.2 that came with the Open Inventor 2.0 Development Package. This version is smart enough to do the right thing. Unfortunately, both the *old* and *new* inventor_dev 1.1.2 are barely distinguishable only by their part number and content. The new inventor_dev 1.1.2 has a Copyright of 1992-94 and does not contain inventor_eoe 1.1.2.

Why do I get errors compiling the Inventor sample programs?
Inventor 1.0.1 requires C++ version 2.*. If you have C++ version 3.* installed on your system, you must specify the -v2 flag to compile Inventor programs. If you are using the Makefiles distributed with Inventor, you should change the line that looks like:
LC++OPTS = +p -Wf,-XNp10000
to:
LC++OPTS = -v2 +p -Wf,-XNp10000

Inventor 1.1.2 and Inventor 2.0 work with C++ 3.*; you must remove the -v2 flag from your Makefiles when you upgrade to those versions of Inventor.

If you receive this error when compiling:

"../../usr/include/X11/X.h", line 44: error:
    Cursor declared as unsigned short [16] and  XID 
You should rearrange the order in which you #include your files so that the Xt files are included before any file that references the IRIS GL include file. For example, be sure to #include <Inventor/SoXt.h> before <Inventor/nodes/SoTexture2.h>.


gavin@sgi.com, last modified Dec 20, 1994.