We have split the IVL interpreter into two main components (and two processes):
The IVL parser accepts commands from standard input and modifies the scene graph and other internal data structures. This component is run as the main process. Objects that are to be animated are added to a list shared by this process and the viewer process. Since SGI's implementation of Open Inventor is not multi-thread safe, we cannot modify the scene graph directly from within the parsing process.
The IVL viewer is attached to the scene graph and updates the viewer window accordingly. Every 50 milliseconds, this process looks to see if any objects have been added to the list of objects to animate. All animated objects are updated by this main loop ``timeout'' callback. In place of the viewer, IVL can deliver the results directly to a VRML browser via the HTTP protocol.
Figure 3.2 illustrates the basic block diagram of the IVL application.
Figure 2: Implementation of IVL code