Intention and Motivation
Gestalt is a library, designed for prototyping and developing OpenGL-based sketches and applications. It is also a library for the programming environment processing.
While Gestalt makes it easier to work with OpenGL it is also a collection of interesting OpenGL examples. We occasionally use Gestalt as a tool for teaching OpenGL and generative design but mostly as a starting point or reference for our own software-based installations.
The motivation for creating Gestalt was two-fold: on the one hand we realized that we needed a structure that would function like a diary in which we could record certain OpenGL techniques we used over-and-over or were just interested in over the years for later reference. On the other hand we realized, as we grew more experiences with OpenGL, that certain advanced techniques like transparency, real-time shadows or certrain shader operations just required a persistent structure. This allowed us for example to sort shapes before drawing to achieve correct transparency, to repeatedly draw a single frame from different perspectives to created shadowmaps, or to blur and post-process a frame to achieve a glow-effect.
Structure and Usage
The core concept of Gestalt is comprised of three components: a bookkeeper called ‘renderer’ that administers, a series of containers called ‘bins’, and a wide range of fragments called ‘drawables’ that are stored in ‘bins’.
‘Drawables’ always contain a draw method with just the necessary code, to fullfill a very specific functionality for example like drawing a box. all ‘drawables’ are stored in ‘bins’. Every frame ( or iteration ) the bookkeeper automatically sorts and draws the contents of the bins.
Gestalt comes with a series of already implemented shapes, like line, triangle, plane, quad, cuboid, sphere, or mesh. It is very simple to create custom drawables and add custom functionality. ‘Drawables’ can be nested to achieve more complex structures.
In addion to the drawables, Gestalt comes with a range of extensions that provide a wide range of additional functionaliy. Most notably maybe, materials and cameras. Cameras are used to ‘move around’ the contents of a bin. Materials alter the appearence of a shape through the use of for example textures or shaders. Gestalt materials and textures can handle a great deal of the otherwise occasionally frustrating negotiation with OpenGL over texture formats, pixel packing, blendmodes etcetera.
Essentially Gestalt is nothing more than an educated selection of shapes, extension and examples, that address reoccuring, interesting or complicated OpenGL techniques and their usage.
The best way to learn about Gestalt is to run and look at the demos or to inspect the source code. In the Processing library there is a folder called ‘examples’ including a few examples to be run in the Processing IDE. Additionally there are tons of demos to be found in ‘gestalt.demo.processing’, ‘gestalt.demo.basic’, and ‘gestalt.demo.advanced’. Some of them are still sketchy, so handle with care.
Gestalt and Processing
To be honest: Gestalt was not developed to collaborate with Processing. Gestalt comes with it s own window-, resource-, and loop-handling and does not rely on the processing environment. None the less we respect and value Processing for what it is and decided to integrate Gestalt as a library into Processing. With OpenGL being the lowest common denominator the integration is quite easy. There are a few caveats one should be aware of though, most of which are subtle differences.
Download Processing Library
You can download the processing library from our server: Gestalt Library.
Download (via GitHub)
$ git clone git://github.com/TheProduct/Gestalt