Skip to main content


Omegalib v13 released

This release adds 64bit build support on Windows. We also include an extended camera streamer API and double precision support on GPU buffers. A lot of internal changes and code reorganization are also included in this relase.
Recent posts

Supporting Co-Located Collaboration in Large-Scale Hybrid Immersive Environments

These are videos from my talk for the 2016 Media Arts & Technology Seminar Series @ UCSB. While at UCSB, I had the chance to walk in the Allosphere: it's by far the most immersive large scale system I've ever seen!

Abstract: In the domain of large-scale visualization instruments, Hybrid Reality Environments (HREs) are a recent innovation that combines the best-in-class capabilities of immersive environments, with the best-in-class capabilities of ultra-high-resolution display walls. Co-located research groups in HREs tend to work on a variety of tasks during a research session (sometimes in parallel), and these tasks require 2D data views, 3D views, linking between them and the ability to bring in (or hide) data quickly as needed. Addressing these needs requires a matching software infrastructure that fully leverages the technological affordances offered by these new instruments. I detail the requirements of such infrastructure and outline the model of an operating system …

glVertexAttribPointer and double precision buffers

This post will hopefully help people avoid a mistake that cost me several hours of debugging.

In one of my projects I have been working with OpenGL 4 double precision vertex buffers. As the buffer data was passed to the shader as a generic attribute, I have been using glVertexAttribPointer to specify the attribute location in the data stream. This worked fine with floating point data.

When I needed to switch to double precision, I checked the glVertexAttribPointer specification: this function accepts GL_DOUBLE as an input type: therefore, I assumed that change was all I needed to pass double precision data to my shader. I noticed two other version of the attrib pointer function existed (glVertexAttribIPointer and glVertexAttribLPointer) but I thought they were just legacy functions or alternatives to using glVertexAttribPointer with GL_DOUBLE or GL_INT type specifiers.

Things did not work as I expected. trying to pass double precision data to the shader caused a crash deep into the O…

Omegalib 11.0 released

This version introduces a new set of classes to handle GPU resources (GpuBuffer, VertexArray, GpuRef etc.). It also adds an explicit display system flag to mark whether OpenGL should be initialized in core or compatibility profile.

Other changes include

A WorkerPool classimproved packaging supportthe maintenance tools are now included as part of the distribution and include two new to package a single application (experimental)choose to choose a specific distribution as the enabled distribution on the machine (windows only for now)MissionControlClient.spawn to start child orun processes that automatically connect back to a mission control server. Omegalib 11.0 is available as an update for the Windows and OSX binary distributions. Launch the package manager and choose update components to download the update.

Solving Bus Error: 10 crash on OSX

This note is mostly a reminder to myself but could be useful to others.

While running some CSV parsing code on OSX, I encountered a crash that took me a long time to debug. All I got when the crash happened was a Bus Error: 10 as soon as the program jumped into a text parsing function I wrote. Bus Error: 10 is a typical error appearing when undefined pointers are dereferenced, but this wasn't what was happening in my case: No code from the function was executed: the crash seemed to happen right at function start

I was finally able to figure out the problem was with local array declarations, in particular an array whose size was about 256k. Since this array was declared within the function scope, it ended up being allocated on the stack, and the stack would end up overflowing because of this. Moving this array to the heap solved the problem for me.

Omegalib 9.0 Released!

This is the first release using alternate numbering for release and master branches:
release branches will use odd numbers master branches will use even numbers

This version introduces major improvements to mission control, and several fixes to both the GLFW and Equalizer display systems.

Major Changes
mission control can post commands to multiple clients using the wildcard character * python console can switch to sending commands to a specific mission control client using the @client syntax -L off command line option to disable logging --interactive-off command line flag to force disable interactive mode .oapp files are now automatically interpreted as config files Quad buffer support for active stereo improvements to hybrid 2D/3D interaction on widgets (see ff5ba3e)

Omegalib v7.0 released

This is the first release to be distributed as binary installer for both OSX and Windows.

Support for display systems has been greatly improved: display systems are now loaded at runtime based on their name in the configuration file. New display systems can be added to omegalib just by adding their dll or shared library to the binary distribution. The Omegalib core ships with two display systems: Equalizer and GLFW.

Other major changes since v6.0 include python multithreading support, improved logging and several bugfixes to resource allocation and cluster shutdown.

Get the Windows/OSX installers here
Download the source code here