Inviwo 0.9.9 Released

It has been a while since the last Inviwo release so this one includes a whole lot of improvements!
You will find binaries at the Download section, or you can go and clone the repository at our Inviwo github repository

Here is a summary of the changes made. See our changelog for more details and instructions on how to update your code.

Core Changes

– Introduced a WorkspaceManager, owned by the InviwoApplication, that is responsible for clearing, loading, and saving a workspace. Different items such as the processor network can register callbacks to do stuff when clearing, loading, or saving a workspace. Other object can also register callbacks. It also keeps a list of registered factories to use while deserializing. The deserializer does not automatically add factories anymore that has to be done by the user by calling registerFactory on the deserializer before deserializing.

– Added data format dispatch functions to VolumeRAM, LayerRAM, and BufferRAM. Se documentation in respective header for usages.

– Added swizzling to image layers and textures.

– Major picking refactoring, to make it possible to use with image layouts. Is now propagated as regular events.
Extend picking support for meshes, RandomMeshGenerator now handles picking. Added a SphereRenderer and a example processor RandomSphereGenerator that also handles picking.

– PropertyPresetManager for property presets: A property preset can be defined for only the property, workspace-wide, or application-wide. Presets are accessible via the context menu of a property

– GLM: Updated version to 9.8.4. Turned off glm swizzle operators, turns out they add a huge compile overhead > 100% In the case you use them you need to replace them with the manual operators. for example -> vec3(myvec4), if you use permutations you have to write them out explicitly.

– Removed shared base classes between buffer/mesh/layer/image/volume. Now uses one converter factory per data representation type, i.e. one factory for LayerRepresentations, one for VolumeRepresentations etc. A representation now knows the type of its owner, I.e. VolumeRepresentation knows that the owner is a volume.
DataGroupPrepresentation does no longer inherit from DataRepresentation.


– Major refactoring of the python binding, are now based on the pybind11 project enabling a much richer object oriented interface. Most Inviwo classes now have python versions. Enabling a more natural syntax. This update is not backwards compatible with the old python scripts, although updating should be simple.

– FontRendering, support for utf8 font rendering, glyph texture atlas, renderToTexture functionality for rendering text into a sub region of a texture

– New plotting module, has support for scatter plots and PCP plots, and some functionality for drawing axises in 2D and 3D
– New Animation module for creating time line based animations. Still only basic support for floating point interpolation, but a general framework is put in place.
– New HDF5 module which allow HDF5 data to be imported


– Doxygen: Major redesign, We now have one main doxygen target that generates documentation for all enabled modules.
– One help per module, so the help is now distributed in each module instead of being in one central place.
See our wiki on [documenation]( to see how you can create help for your processor like this:

– Help will be reloaded while running Inviwo when rebuilding it for a module


– NetworkEditor new GUI without all the gradients and shadows.

– Major cleanup of qt widgets, updated code to use qt’s new signal and slot syntax, which made it possible to remove a lot of old template workarounds

Posted in releases