Purpose

Typhon provides an open source uniform platform for real time oriented software development in Java on Windows, Linux, and Mac OSX. Typhon can be compared with Eclipse (Rich Client Platform) except its focus is on real time applications such as creating a high performance GUI to control an audio engine (Scream) and providing a foundation for a 3D game engine (Auriga3D). Typhon is not an IDE (Integrated Development Environment) and this is its major differentiation from other platform projects such as Eclipse.

Design Summary

The purpose of Typhon is to serve as a lightweight container built around an extendable plugin engine (OSGi / Felix). Typhon is not an application. Typhon is a runtime framework that provides configuration facilities, a plugin engine, and a library of components/services to support the construction of real time applications. A few of these core components include an accurate callback clock/scheduler, custom event system and data models, use of Simple Logging Facade w/ Log4J, OpenGL binding agnostic interface (supports JOGL and LWJGL), XML / Scripting GUI configuration, property/internationalization management, the Typhon GUI library (1st & 2nd gen), and integration with the Scream audio engine. Only one instance of the Typhon runtime environment is invoked. One or more Typhon enabled applications may execute concurrently sharing the runtime resources of the entire environment.

Several Typhon components are detailed below:

Accurate Callback Clock/Scheduler:
Typhon provides an accurate callback clock mechanism that allows high performance scheduling to function on a reoccurring basis or at known future time. This clock mechanism is generic in so far that several classes of scheduling are available. Two of these classes are the free clock (constant callback; useful for 3D games) and subdivided integer clock that allows a reoccurring interval to be subdivided into larger intervals. The subdivided clock is the preferred clocking mechanism for the Typhon GUI.

The Typhon GUI will be described in a later section of this document, but the callback scheduler is very important in its success over Swing/AWT. Swing has long been the standard GUI library for Java, however it is limited in several areas including performance. When creating a high performance Java GUI it is necessary to schedule all events off of the AWT event queue to provide for a glitch free display. Another important consideration when developing a performance oriented GUI is the rate of update that the display incurs. Swing can perform poorly on slower computers due to rate of display not being separate from the immediate updates occurring on the AWT event queue. By decoupling the update of the GUI display from the underlying model an application can be dynamically configured to update its GUI at different intervals. This is particularly important on slower computers to give a glitch free and responsive presentation.

Custom Event System and data models:
Swing provides a basic data model through the BoundedRangeModel interface. This is the default interface for GUI components such as JSlider (a simple slider). The BoundedRangeModel interface is limited to integer parameters. Typhon provides an expanded set of data models. Although there are specific classes for integer, float, and double models each can accept these primitive data types. Most of the data models can be found in bounded and unbounded versions. Beyond one dimensional data types there are composite types for two and three dimensional data that are composed of basic one dimensional data models. A n-dimensional model and n-dimensional matrix may also be constructed from a combination of data models. Each of the Typhon data models is aware of the clock scheduler and event system. The models may instantly be attached to lag and modulation components of Typhon.

Logging Interface:
Typhon provides a generic logging inteface through the use of Simple Logging Facade. Typhon may be configured to use any particular logging implementation. Presently, Log4J is the suggested logging package to use with Typhon. The benefit of having a separate logging component/interface is that any particular logging package may be replaced transparently without having to alter the code base. The version of Log4J that Typhon uses is a modified version of the 1.2.8 build of Log4J. Log4J includes a Swing based GUI called LogFactor5 for viewing logging information. EGR Software modified LogFactor5 improving its performance to an acceptable margin for real time usage with the Typhon GUI.

OpenGL Binding Agnostic Interface:
Typhon provides a set of components that provide a binding agnostic interface to OpenGL. This allows an OpenGL based application to be developed from a common code base, but have the freedom to choose any particular OpenGL binding at runtime. Beyond a binding agnostic interface several components are offered that perform advanced OpenGL functionality at the framework level instead of hard coded at the application level.

XML / Script Oriented GUI Configuration:
Typhon will support XML and scripting oriented GUI configuration. Research is in process using XUI to configure Typhon GUI based applications. Typhon also supports a range of scripting languages from Groovy to BeanShell enabling expanded dynamic creation of applications at runtime. An experimental option is to use SwingOSC to launch and configure Typhon applications.

Property and Internationalization Support:
Typhon provides a unified way to handle property support at the framework and application layer. In addition Typhon is aware of internationalization and provides an organized way for applications to integrate this functionality.

Typhon GUI:
The Typhon GUI is one of the main highlights of the framework. Although it is not a necessary component the Typhon GUI enables high performance skinnable GUIs that exceed the standard Swing/AWT API. The Typhon GUI is designed to function with real time response as its main priority. The 1st generation Typhon GUI is compatible with Swing. There are no issues with mixing the Typhon GUI with Swing.

The 1st Generation Typhon GUI:
The 1st generation Typhon GUI is built upon Java2D and is hardware accelerated through the Volatile Image API. All components may update immediately or may defer their action to the clock scheduler. An application built with the Typhon GUI will watch all data models that are deferred and update them on a regular basis that is configurable. The possibility of deferring GUI updates allows the Typhon GUI to be stable and usable on low powered computers. The ideal specification for very smooth operation is 1ghz+ machine with 512 megs+ of RAM, but the Typhon GUI achieves good results on a 500mhz machine with 128 megs of RAM. The Typhon GUI is skinnable and allows the artist / GUI designer to come up with unique designs that far exceed Swing / AWT. The 1st generation Typhon GUI is well tested and ready to deploy on Linux, Mac OSX, and Windows.

The 2nd Generation Typhon GUI:
The 2nd generation Typhon GUI is currently in development. The defining difference about the 2nd generation is that it is based on the JOGL(OpenGL)/Java2D bridge in Java 6 (Mustang). It will be available in a normal windowed configuration, but through use of render to texture (FBO) capabilities it will be possibly to render the GUI directly from within a JOGL based 3D game / virtual world environment. A benefit of using OpenGL is that modern 3D technologies such as displacement mapping, normal/parallax mapping, and programmable shading will allow the 2nd generation GUI to enable very attractive designs.

Scream Audio Engine:
Typhon closely integrates with Scream. Scream is an advanced middleware audio engine with real time synthesis / spatialization manipulation capabilities. Scream is based on the iXMF interactive audio standard and extends it in several ways including programmable audio; "audio shading". Scream can power 2D and 3D surround arrays offering truly immersive sound experience for realistic sonic environments.