Changes in version 1.3

As of revision number 1794 of July '09, the environment variables for building the python bindings have changed. Please read the linked section.

Make now inserts bazaar revision number and other info into a source file, szg/src/language/arVersion.cpp. This requires both bzr and python. If they're not available, set the environment variable SZG_BZR_INFO=FALSE to skip this step.

Added support for alternate input simulators, built as shared libraries and loaded based on a database parameter (SZG_INPUTSIM/sim_type) at runtime. An example is included in szg/skeleton.

Added support for Python input devices. This required changes to the arAppLauncher to allow Python input devices in virtual computer definitions, so all programs will need to be recompiled for any setup where you want to use a Python input driver. Hence the bump to 1.3.

Added the ability to set the application frameworks' navigation matrix by copying a matrix directly from the input event stream. This allows control of navigation by e.g. a Python script.

Re-worked the Makefiles and conditional compilation such that input device drivers are built as shared libraries even if szg is built with SZG_LINKING=STATIC--except with Visual C++. This means that you can load input devices in standalone mode on Linux and MacOS.

Renamed 'python' and 'sip_python' directories to 'python_swig' and 'python_sip', respectively.

Changes in version 1.2

Syzygy 1.2 happened internally.

Previously, application launch on a virtual computer would fail if even one of the constituent computers didn't have an szgd running on it. Now the application will launch on the remaining computers (unless of course the missing szgd was on the computer that the application's trigger instance was supposed to run on).


Fixed a bug in szgd that could lead to the current working directory not being set properly if an renderer and one or more services were all launched on the same computer.

Fixed a crash bug for daisy-chained input devices (arInputFactory netinput slot #).

utilities/PictureViewer now runs properly on multi-display computers.

Fixed a bug that caused certain path variables to grow over time.

Fixed the documentation stylesheet so that the docs can now be printed legibly.

We've found some bugs in the handling of multiple networks. A bug that occurred when multiple networks were used in a virtual computer, but some computers were only attached to one of them has been fixed.

Previously, if a connection between an szgserver and szgd were broken due to e.g. network unlreliability, the szgserver would notice and remove the szgd from the process table but the szgd would not notice (and hence would not attempt to reconnect). This has been fixed.

Extraction of Euler angles from matrices was incorrect & has been fixed.


ar_log_error() and company now print a process ID and timestamp.


Got things compiling with Visual Studio 8.

Ditto for g++ 4.3.1 (on Sidux).

Added support for joysticks/gamepads when compiling with MinGW. Ditto for speech synthesis. Ditto for .3ds model files.

Windows builds have been speeded up with all compilers.

Input Devices

Added ar5DTGloveDriver (5th dimension technologies dataglove).

arFOBDriver attempts to query the flock about its configuration instead of using the SZG_FOB/config database parameter.

Added a prototype wiimote driver on Linux using wiiuse-0.9 (1.0 and later won't work without a re-write).

Added some more PForth words.

Standalone Mode

Programs in standalone mode can now load input device drivers, but only if they were built with dynamic linking.


The biggest change is much improved .obj support.


Began the switch from SWIG to SIP. Currently two sets of bindings available, in szg/python and szg/sip_python. The new bindings are easier to read and maintain and sometimes faster, but don't yet include support for the more object-oriented version of the scene graph API.

Moved the scene graph demos out of the 'doc/python folder to python/demos/myriad and sip_python/demos/myriad. As mentioned above, the latter don't work yet, although sip_python/demos/blobby/ is a working scene-graph program.


The ouput of dex has been changed a bit, and the -v and -q (verbose and quiet) options have been added. Also, some of the application output during startup that was just being lost before is now returned to dex.

Added dkillall -a <virtual_computer> option, which kills all non-szgd processes associated with a virtual computer.

Changes in version 1.1

Syzygy 1.1. is primarily a bug-fix release (too many to list here). The most important changes:


...Has been largely re-written for clarity. A few major messes remain, however.


Some demos (ones that were insufficiently instructive or that depended on very large data sets) have been removed from the main "szg" repostitory. We're moving towards packaging each of these individually together with their data.

Skeleton/Build Template

The new szg/skeleton directory is a directory tree template for building your own programs. Copy the directory somewhere, rename, modify the source files, etc.



szgd now takes a non-optional <base paths> argument. The full form of the command is:

szgd <base paths> [-r]

The <base paths> argument is a semicolon-delimited list of paths to directories or native executables. This allows you to restrict remote execution to particular directories or progams. On Windows the ".exe" suffix of executables should be omitted. You'll probably need to enclose the argument in quotes if it contains a semicolon. Each item must exist or szgd will exit. All SZG_EXEC and SZG_PYTHON paths and SZG_PYTHON/executable must begin with an item from the <base paths> argument or the dex command will fail.

The optional -r causes it to repeatedly attempt to reconnect to the Syzygy server on failure (instead of quitting as formerly).


One variant of the dex command has been eliminated (to clarify error messages). You may no longer run an application on the local computer by typing:

dex <app> <args>

Instead, type:

dex <computer> <app> <args>

Precompiled SDKs

Are no longer available; we're too under-staffed to support them. Weren't too useful anyway.


Syzygy 1.1 uses FMOD 4 (ex) instead of FMOD 3. This change is transparent to the application programmer.


XML parameter files

The code that parses XML config files now reports errors (quite well) instead of failing silently as it did in 1.0 (we hang our heads in shame).

Resource Layout

Native executables can now be packaged together with their data files (as Python programs could before). szgd now looks for executables in subdirectories of directories on SZG_EXEC/path, and when it finds an executable it sets the current working directory to the directory containing the executable. This means that data files that the application opens directly can be placed in the directory with the executable (or a subdirectory of it) and opened using the normal file-access functions with application-relative paths. And applications and their data can be bundled up into their own directory. See also the description of setDataBundlePath() in the Programming chapter.

Python Executable

The location of the Python executable should be specified using the database variable SZG_PYTHON/executable instead of having its directory added to SZG_EXEC/path. You can pass arguments to this executable by delimiting them with bars, e.g. c:\Python24\python.exe|<arg1>|<arg2>.



Scene Graph

Is now extensible via new node types defined in shared library plugins (see szg/src/graphics/arTeapotGraphicsPlugin.cpp, called from szg/src/demo/cubes/cubes.cpp). No build template for creating these plugins yet, alas.



Fixed bug in arGUIWindow preventing application access to window pixel dimensions. One of these days we'll even document the arGUI classes...

Fixed a bug in arTexture::readPPM() that was causing textures to be read in left/right reversed.


Added new words less, greater to work around XML parser bug ("<" and ">" don't work well in XML and the parser was choking on the escaped versions).

Changes in szg-1.0

Changes in szg-0.8

Changes in szg-0.7

Changes in szg-0.6

Changes in szg-0.55

Changes in szg-0.5

Changes in szg-0.4

Changes in szg-0.3

IMPORTANT NOTE: Endian-conversion is currently broken! The arStructuredData::parse call breaks it. The next version of Syzygy will do endian-conversion upstream so that this is not a problem.

Changes in szg-0.2