Tag Archives: VR Juggler

Visual Studio 2012, XP support, and codebases with too many dependencies

The potential of C++11 support first enticed me to consider moving to Visual Studio 2012 for Windows development. (Our existing environment was Visual Studio 2008.) Once I got a moment to actually try it out, the much-improved IntelliSense (that actually debuted in 2010, powered by a modern, capable compiler front-end, EDG) really wooed me. It’s remarkable what not getting flustered by a smart pointer can do for code completion.

Here’s the rub: We have a large immersive system that runs Windows XP x64, and for a research lab that develops software in the course of its work (rather than a software-driven shop), we’ve got a bunch of dependencies. VS2012 does support Windows XP, kind of, but you have to jump through some non-default hoops to get it to work.  I’m happy to announce, however, that I was able to get the whole stack we use for VR JuggLua built with VS2012 using the “v110_xp” XP-compatible toolset. (The linked page has the details on how to check/set the Platform Toolset of VC projects for XP compatibility.)

By far, the easiest way to build is if you have a CMake-based build system available. Recent versions of CMake have added a “Generator Toolset” concept, which can be used to specify the “v110_xp” toolset needed for this instance. There’s no GUI support for this at the time of this writing (CMake 2.8.11.2), but it can be done in the GUI: before initially configuring a build, add a string variable to the cache called “CMAKE_GENERATOR_TOOLSET” with the value “v110_xp”. You might see a spurious warning about this not being used at generation time, but rest assured, it is. (Check in Visual Studio if you’re not confident.)

VR Juggler and its dependencies have been built and posted (as branches) in my vrjuggler-windows-binaries repository. The linked branch includes VR Juggler 3.0.x (built from my CMake-enabled git branch, using CMake) as well as the client-code compile-time dependencies. In separate branches, I’ve preserved all the dependencies separately:

I’ve also built OpenSceneGraph, with a usable subset of its plugins. Conveniently, I realized that third-party libraries with a C-only interface can be built once with MinGW and used across compiler versions (as Zlib does), which helps a lot. (Particularly with the CMake option to spit out an MS-compatible .lib import library file.) I’ve uploaded the OpenSceneGraph 2.8.x v110_xp binaries here.  (Binaries in git repos let me use them as submodules…)

For VR JuggLua to build in all its glory, it needs Qt 4.x, or at least FLTK. FLTK was an easy build, and I got the chance to hammer out a few bugs in that neglected GUI frontend. I did end up being able to get Qt 4.x built, after a bit of pain and uncertainty as to whether it would actually work on XP. I’ll post binaries, or at least instructions, soon.

Did it work? Yep! Got a fully functional VR JuggLua build that successfully runs immersively in the aforementioned WinXPx64 system. It’s not the default for continuous builds (yet), but it’s a lovely step forward.

VR Juggler 3.0 packages updated for Ubuntu Natty

Just a quick heads-up: I’ve updated the VR Juggler Ubuntu/Debian packages I maintain on Gitorious and that are built in this PPA repository. There is now a Ubuntu 11.04 (“Natty”) build of VR Juggler 3.0 and its dependencies alongside the other distributions. The instructions I previously posted on installing VR Juggler on Ubuntu from packages is still accurate and now applies to those of you using the latest Ubuntu release.

There were only minor changes from the Maverick packages. Most notably, the Audiere plugin for Sonix is gone because Audiere is no longer being packaged or distributed by Ubuntu or Debian. (If someone would like to pick up where they left off I’d be happy to collaborate!)  Also, I temporarily disabled the VRPN Gadgeteer driver until I get a chance to make an updated, nice package of a recent version of VRPN. I’m almost done with one – just have to test it. When that’s done, I’ll push a new build with this driver re-enabled.

If they work, or don’t work, for you, let me know! You’re welcome to help maintain these packages – many hands make light work. Their source is over on that gitorious link above, and there’s docs in the gitorious wiki, though they’re sparse – happy to help clarify if you’re interested.  I’d also be interested in trying some alternate build service together with/instead of the Launchpad PPA’s – the openSUSE Build Service looks promising but I haven’t had the time to really look into it. So, there’s a side project for you 🙂

VR Juggler tools and binaries on GitHub

Now that the semester’s over, I’ve been able to catch up on a bit of a backlog and put up a few VR Juggler-related items on GitHub. For all these items, click the link to visit the GitHub repo, which will also show you a nicely-rendered README with more information.

  • Jconf Grapher – This is a Python script for parsing jconf files (including their inclusions) and outputting Doxygen code to draw a graph of devices, proxies, and proxy aliases. I’ve included a silly shell script wrapping this to directly output PDF files, and have also made a minimal GUI for exploring these graphs, using XDot and PyGTK. Cross-platform: runs anywhere Python, PyGTK, and Doxygen do. (Tested on Linux and Windows.) Free and open source (Boost Software License 1.0, a very permissive license), feel free to fork and improve!
  • Jconf Display Merger – As I’ve discovered that VR Juggler on Windows works better with fewer windows in favor of more viewports per window, I put together this Python script to automate the process of merging display windows in jconf files (appropriately re-adjusting origins and sizes, etc).  There’s a command-line version that works everywhere and merges all windows into a single one, and for more control, you can use the GUI that lets you select which windows to merge. GUI is built on PySide (the LGPL replacement for PyQt). Cross-platform (command-line requiring Python 2.4, GUI requiring Python 2.5, Qt 4.6+, and PySide), though I have only tested on Linux. Free and open source (Boost Software License 1.0, a very permissive license), feel free to fork and improve!
  • METaL JConf files – Our group at Iowa State University recently got a new virtual reality system, a three-wall CAVE called METaL. We’re using VR Juggler to build applications for it, and in the interest of both easily maintaining configuration files and providing an up-to-date example, I’m hosting the VR Juggler 3.0 jconf files for the system on GitHub. They’re still a bit of a work in progress, but definitely usable – if you have a similar system it might be easiest to fork them on GitHub for easy integration of improvements.
  • VR Juggler 3.0 Windows binaries – Building VR Juggler can be a bit tricky, and building software on Windows can be a bit of a hassle, so you can imagine that combining them isn’t necessarily something you want to be doing every day. The most recent “official” Windows binaries are for the ancient 2.2.1.  I’ve started building from SVN, on the 3.0 branch, and pushing the installed tree to GitHub, so I don’t have to build VR Juggler separately on every machine I use: I can just clone the repo, and pull when I update the build.  Right now I only have the 32-bit builds for VC9, but I anticipate eventually adding other variants. (They’ll be in different branches named accordingly.)

As always with any of my grad school-related work, if you use or build on anything I make available, I’d really appreciate hearing from you. Information on how our work is used is helpful when providing reports and seeking renewal of the funding that makes this possible.