GUIs for Real-Time Programs,
using Universal Pointers

Poster presented at ACM SIGGRAPH 2008.

Morgan McGuire, Williams College

Poster (PDF)
Implementation Notes (PDF)

G3D Library (contains full OpenGL GUI implementation)
G3D Source (see G3D/include/G3D/Pointer.h and GLG3D/include/GLG3D/Gui*.h, GLG3D/source/Gui*.h)


Most GUI systems use change events, dirty rectangles, and explicit data models [1] to synchronize state. These increase runtime efficiency at the cost of duplicate state and boilerplate code, which made sense 30 years ago. Today, real-time interactive programs like games and CAD run on fast machines. Conserving GUI computation at the expense of code complexity is now a poor tradeoff.

We created a new GPU-efficient, themed extension to Barrett's Immediate Mode GUIs. Ours has a stateless data model where universal pointers directly connect application variables to controls. For example, there is no "checkbox.getValue()"; instead, a checkbox is bound to a boolean variable at creation. This eliminates most events. To further eliminate boilerplate, we automatically manage GUI memory and layout. In terms of Model-View-Controller, we have a transparent model, a smart controller , and a very fast view. These simple changes make an API remarkably easier than MFC, Swing, and WxWidgets while naturally integrating with 3D rendering.


 author = {Morgan Mc{G}uire},
 title = {{GUI}s for Real-Time Programs, using Universal Pointers},
 note = {SIGGRAPH '08: ACM SIGGRAPH 2008 posters},
 year = {2008},
 location = {Los Angeles, CA}