VR MacDev

Virtual reality software development with MacOS X


I love my Macs, but I've always been more of a unix programmer. I did buy CodeWarrior to do some simple stuff with MacOS 9 during my first year of graduate school, but it quickly became apparent that the type of software development I did just wasn't feasible with the traditional MacOS. Things were just too different, and I really didn't like how a simple programming error could crash the entire system. That was fine, as I used my Mac for plenty of things other than software development.

When Apple announced MacOS X, I was elated. I finally had a strong command-lien with a gorgeous interface! I've been a MacOS X user since the Public Beta, and I find that I can been more productive with MacOS X than any other operating system. I can work on code in Emacs, rsync and ssh source to IRIX machines, run some X11 tools, and still fall back to MS Word and Adobe Photoshop when needed.

Macintosh hardware has not been used much for VR. Well, hardly at all. This page details some of my own experiences. My initial efforts were an early version of ImmersaView for the GeoWall project.

Tools | Core Stuff | Graphics Libraries | What's Needed

Tools

Apple has provided a great suite of development tools, and I especially love how every boxed copy of MacOS X includes them! There are a few other tools that I find very useful:

CMake
Building on multiple platforms can be a challenge. For now, MacOS X is my secondary development platform. I need to easily configure builds on Linux, IRIX, and Windows systems as well. I think the Visual Studio GUI is pure terror, but CMake builds both Makefiles and Visual Studio workspaces for me.
Doxygen
When it comes to documentation generates for source code, there is only one tool to seriously consider. Doxygen is the best in class, IMO.

Core Stuff

Since MacOS X is based on FreeBSD, it has all the hard-core goodies under the hood. There are POSIX threads, POSIX shared memory and semaphores, BSD sockets, and a lot of other really good stuff. There are compatibility issues.

IPC

MacOS X IPC support is a little schizophrenic. SysV IPC is present, but the kernel restricts it significantly. Any serious use requires increasing kernel settings. These values now appear to be in /etc/rc.

# increased by css 2002-09-22
#    sysctl -w kern.sysv.shmmax=4194304
#    sysctl -w kern.sysv.shmmin=1
#    sysctl -w kern.sysv.shmmni=32
#    sysctl -w kern.sysv.shmseg=8
#    sysctl -w kern.sysv.shmall=1024
    sysctl -w kern.sysv.shmmax=41943040
    sysctl -w kern.sysv.shmmin=12
    sysctl -w kern.sysv.shmmni=320
    sysctl -w kern.sysv.shmseg=96
    sysctl -w kern.sysv.shmall=1024000

POSIX IPC is present, but only in the named formed. sem_open() works, but sem_init() does not. This approach means that applications using POSIX IPC must perform some extra management to track identifier names. They must also make sure that proper resource cleanup takes place when an application exits.

I found UNIX Network Programming Volume 2: Interprocess Communication to be extremely useful for understanding POSIX IPC. I have a patch for the book's source code that allows it to compile on MacOS X.

Graphics Libraries

As a VR developer, I usually spend my time on application development. I want to make sure that my app can do what I need it to. Scene graphs really help in this regard. I have extensive experience with Open Inventor and SGI Performer, but only the former is any bit of a choice on MacOS X. I created a patch to compile SGI Open Inventor on darwin systems, although it looks like most of these changes have now been directly integrated into SGI's main source code repository. Coin3D is an open-source library with a lot of extra features and better MacOS X support. I'm a big fan. :)

VTK

What's Needed?

The question remains, what else is needed for VR development on MacOS X? The biggest issue is that of hardware. Simply put, the graphics cards need more punch. There needs to be better stereo support. The blue-line method means a line has to be drawn on the screen in blue. It would be better to have a hardware DIN-3 connector that provides a direct stereo TTL signal.

Software Needs:

  • Commercial VR software support
  • XCode project format documentation

Hardware Needs:

  • High-end graphics cards with hardware stereo and quad-buffer support
  • Tracking system support

CSS Research Page