This release of Cinder marks the largest in the project's history. Here's what's new:
Cinder's OpenGL API has been rewritten from the ground up. It now supports version 4.5 of OpenGL on Windows and version 4.1 on OS X. In addition it supports OpenGL ES 2 and 3 on iOS. For WinRT and Windows Desktop, Cinder now provides an ANGLE backend, which is able to emulate OpenGL ES 3 using DirectX.
Cinder's OpenGL stack now implements software state caching, eliminating redundant state changes and minimizing the cost of state restoration. It also adds native support for secondary contexts for sophisticated multithreading techniques.
In addition to these under-the-hood changes, this release of Cinder's OpenGL implementation adds direct support for 1D Textures, 3D Textures, CubeMap textures, CubeMap FBO's, tessellation shaders, compute shaders, PBO's, KTX compressed textures, additional DDS texture support, instancing, Buffer Textures, Query objects, Uniform Buffer Objects and a number of other features.
A new geometry system allows for powerful geometric generators and procedural modifiers. Perhaps most importantly, Cinder also now supports rendering the famed OpenGL teapot.
This release contains numerous new samples showing off the power of moden OpenGL. Deferred shading, tessellation shaders, compute shaders, dynamic cubemapping, instancing, shadow mapping, and a number of other techniques all are demonstrated through the included samples.
Another key new feature is OpenGL scoped state objects. These allow users to easily set, preserve and restore pieces of OpenGL state. For example, instancing gl::ScopedDepth( true ) enables depth buffering for the lifetime of the object, preserving its previous value and restoring it on destruction. This interoperates with Cinder's state caching to minimize performance cost.
One of the most exciting features of Cinder 0.9.0 is the move away from proprietary math code in favor of GLM. This library has become an industry standard in recent years, and is designed to closely match the built-in math operations of GLSL.
Another key improvement in this release has been a complete overhaul of the App internals. While most of these changes are not user-facing, they are paving the way for ports to new operating systems. In fact, both Android and Linux ports are already underway.
With this release we've added support for OpenEXR I/O through TinyEXR. We've also added a full 16-bit float pipeline to facilitate loading of 16-bit float textures without intermediate 32-bit representation. New ip::checkerboard() allows for convenient creation of checkerboard images, and ip::stackBlur() provides an implementation of Mario Klingemann's software blur algorithm.
Several new audio features have been added in this release as well. In particular, support for scheduling events in the future through Node::enable( double when ) and Node::disable( double when ) methods. Much more information on this is available in the description of PR #575. Other notable changes include audio::Param moving to measuring time with double floating point precision, and a new Context::isAudioThread() method to allow audio::Node subclasses to determine whether they are running from the audio thread.
Cinder's documentation has not traditionally been its strong suit, but in this release we're working hard to change that. This release marks the first using a custom system written by Greg Kepler, the results of which you can see here.
Cinder now has a standardized logging system used by the library itself and exposed to user-level applications. This is implemented in the ci::log namespace and macros for various log levels - the CI_LOG_W() macro logs a warning, for example. These interfaces allow iostream-style streaming for convenience: CI_LOG_E( "Example integer value: " << exampleInt );
The logging implementation provides information about the call location and is thread-safe. The default implementation logs to the std console, but implementations for file logging, system logging (syslog on OS X / iOS and EventLog on Windows) and a debug-breaking logger are all provided.
Cinder 0.9.0 features a new video implementation based on AVFoundation for both OS X and iOS. 32-bit application support has been deprecated in this release, though it's still supported, and we've standardized on 64-bit as the default.
Visual C++ 2015 is now fully supported in addition to Visual C++ 2013, though we don't supply a prebuilt version of the former. We also made a special effort to reduce MSW build times in this release, pruning header usage and halving build times in many instances.
As you've likely noticed, the site you're reading this on has been redesigned as well. Perhaps most significant is a new CMS-driven gallery which allows for user-submitted work. A special thanks to Cinder user Justin Martin for developing this site, and Nicole Formica for her design contributions.
It's simply not possible to enumerate all of the changes and improvements to Cinder in this short summary. However for an accelerated guide for getting up to speed with version 0.9.0, please refer to this guide, Transitioning to Cinder 0.9. For a quick introduction to some of the new OpenGL basics, check out the OpenGL in Cinder guide.
Version 0.9.0 represents the tireless efforts of Cinder's global user community, which includes over 75 unique code contributors now as measured by GitHub. So here's a hearty congratulations to all of you on this release, and a huge thank you for being so generous with your time and expertise. This is a big one.