Archived changelogs

See also:

2015.05

Released 2015-05-09, tagged as v2015.05. See the release announcement for a high-level overview.

New features

Changes

Build system

  • CMake now always installs FindMagnum.cmake to library-specific location, making it usable without providing own copy of the file in depending projects. The WITH_FIND_MODULE option is no longer needed.
  • CMake now handles inter-library dependencies automatically without manually specifying each and every one (see mosra/magnum#73).
  • Ability to control static build of plugins separately using BUILD_PLUGINS_STATIC.
  • Displaying all header files, plugin metadata files and resource files in project view to make use of some IDEs less painful (such as QtCreator).
  • Gentoo ebuild (see mosra/magnum#69, mosra/magnum#83).

Bug fixes

Deprecated APIs

  • The Magnum/Query.h header is deprecated, use one of Magnum/PrimitiveQuery.h, Magnum/SampleQuery.h or Magnum/TimeQuery.h instead.
  • Using Buffer::Target as constructor or Buffer::setTargetHint() parameter is deprecated, use Buffer::TargetHint instead.
  • The SceneGraph::TransformationType enum is depracted, use separate <transform>() and <transform>Local() variants instead.
  • SceneGraph::AbstractObject::hasFeatures(), firstFeature(), lastFeature(), SceneGraph::Object::hasChildren(), firstChild() and lastChild() are deprecated, use methods on linked list returned by SceneGraph::AbstractObject::features() and SceneGraph::Object::children() instead.
  • Platform::ScreenedApplication::frontScreen() and Platform::ScreenedApplication::backScreen() are deprecated, use methods on linked list returned by Platform::ScreenedApplication::screens() instead.
  • *Framebuffer::read() functions taking two vectors are deprecated, use overload taking Range2Di instead.
  • The Mesh::maxVertexAttributes() function is deprecated, use AbstractShaderProgram::maxVertexAttributes() instead.
  • Math::Vector::dot(), Math::Complex::dot(), Math::Quaternion::dot(), Math::Vector::angle(), Math::Complex::angle(), Math::Quaternion::angle(), Math::Quaternion::lerp(), Math::Quaternion::slerp(), Math::Vector2::cross() and Math::Vector3::cross() are deprecated, use Math::dot(), Math::angle(), Math::lerp(), Math::slerp() and Math::cross() instead (see mosra/magnum#74)
  • The *Framebuffer::bind(FramebufferTarget) function is deprecated, use parameter-less *Framebuffer::bind() instead.
  • The FramebufferTarget::ReadDraw enum value is deprecated, use separate FramebufferTarget::Read and FramebufferTarget::Draw values instead.
  • CubeMapTexture::imageSize() with explicit face parameter is deprecated, use overload that returns one value for all faces instead.
  • The Magnum/DebugMessage.h header is deprecated, use Magnum/DebugOutput.h instead (see mosra/magnum#89)
  • The DebugMessage::Severity enum is deprecated, use DebugOutput::Severity instead.
  • The DebugMessage::Callback typedef, DebugMessage::setCallback() and DebugMessage::setDefaultCallback() function is deprecated, use DebugOutput::Callback, DebugOutput::setCallback() and DebugOutput::setDefaultCallback() instead.
  • The DebugMessage::maxLoggedMessages() and DebugMessage::maxMessageLength() functions are deprecated, use DebugOutput::maxLoggedMessages() and DebugOutput::maxMessageLength() instead.
  • The DebugMessage::setEnabled() function and related values from DebugMessage::Source enum are deprecated, use DebugOutput::setEnabled() along with DebugOutput::Source, DebugOutput::Type and DebugOutput::Severity instead.
  • Parameter-less *Query constructor and parametrized *Query::begin() function are deprecated, use constructor with parameter and parameter-less *Query::begin() instead.

Potential compatibility breakages, removed APIs

  • All functionality deprecated in 2014.01 has been removed, namely:
    • Removed deprecated ability to use relative includes (e.g. #include <Mesh.h>), use absolute paths (#include <Magnum/Mesh.h>) instead.
    • Removed deprecated Mesh::Primitive enum, use MeshPrimitive instead.
    • Removed deprecated Sampler::maxAnisotropy() function, use Sampler::maxMaxAnisotropy() instead.
    • Removed deprecated Math::Geometry::Rectangle class, use Math::Range instead.
    • Removed deprecated SceneGraph::Animable::group() function, use SceneGraph::Animable::animables() instead.
    • Removed deprecated Shaders/magnumShadersResourceImport.hpp file, use Shaders/resourceImport.hpp instead.
    • Removed deprecated Text::TextRenderer alias, use Text::Renderer instead.
    • Removed long-deprecated BufferImage::setData() overload, use the other one instead.

Performance improvements

  • Faster vector multiplication in Math::Quaternion.
  • Saved one swizzle in Math::cross().
  • Allocation-free overloads of functions that took std::string just to pass its contents to OpenGL.

2014.06

Released 2014-06-30, tagged as v2014.06. See the release announcement for a high-level overview.

Dependency changes

  • Minimal required GCC version is now 4.7. Support for GCC 4.6 has been moved to compatibility branch (see mosra/magnum#18)

New features

Changes

  • Libraries and plugins in debug build configuration are installed to different locations, making it possible to have debug and release libraries installed alongside each other (see mosra/magnum#20, mosra/magnum#45)
  • Platform::Sdl2Application is now used everywhere (documentation, tutorials, examples) by default, replacing Platform::GlutApplication. The GLUT application is still available, though. See mosra/magnum#39.
  • The need for compiler compatibility mode is now automatically detected by CMake to avoid strange compilation errors later
  • Split out Texture functionality into dedicated TextureArray, MultisampleTexture and RectangleTexture classes to make their usage less error-prone
  • Buffer::invalidateData(), Buffer::invalidateSubData() and Renderer::resetNotificationStrategy() functions are enabled on OpenGL ES as a no-op
  • Added std::vector overload of MeshTools::combineIndexArrays() for greater runtime-usage flexibility
  • Platform::Sdl2Application now defaults to non-resizable window, you can change the behavior using Platform::Sdl2Application::Configuration::setWindowFlags()
  • It's now possible to import objects without materials
  • More robust OpenGL version checks when creating context
  • Thorough documentation review, fixes and improvements

Build system

Bug fixes

  • Fixed usage with OpenGL ES 3.1 contexts (it complained about invalid version)
  • Fixed compilation of Shaders::MeshVisualizer under WebGL and with ANGLE, see mosra/magnum#56
  • Fixed various build issues on Mac OS X, see mosra/magnum#51 and mosra/magnum#54

Deprecated APIs

  • Mesh::setVertexCount() and Mesh::setIndexCount() had nonintuitive behavior in some corner cases and are deprecated, use general Mesh::setCount() function instead
  • MeshView::setVertexRange() and four-/two-argument MeshView::setIndexRange() are deprecated for similar reason as above, use MeshView::setCount(), MeshView::setBaseVertex() and three-/one-argument MeshView::setIndexRange() instead
  • Texture::Target enum is deprecated as the API was too error-prone, use dedicated TextureArray, MultisampleTexture and RectangleTexture classes instead
  • Framebuffer::attachTexture*D() is deprecated, use more generic Framebuffer::attachTexture() and Framebuffer::attachTextureLayer() instead
  • FramebufferBlit::*Buffer enum values are deprecated, use shorter FramebufferBlit::Color and similar instead
  • Audio::Source::play(), SceneGraph::AbstractObject::setClean(), SceneGraph::AbstractObject::transformationMatrices() and similar taking std::initializer_list of pointers are deprecated, use versions taking list of references instead
  • MeshTools::compressIndices() and MeshTools::interleave() which filled Mesh and Buffer directly are deprecated as they had undesired side-effects in some cases, use the data-returning versions instead and then configure mesh and buffer manually
  • MeshTools::combineIndexedArrays() taking std::tuple is deprecated, use version taking std::pair instead
  • MeshTools::removeDuplicates() taking also list of indices is deprecated, use the function in conjunction with MeshTools::duplicate(). See function documentation for more information.
  • Parameter-less Mesh::draw() and MeshView::draw() are deprecated, use versions with explicit shader parameter instead
  • Deprecated implicit conversion of Resource<T, U> to U&, as it is not safe. Use explicit dereference operator instead.
  • Texture binding using *Texture::bind() is deprecated, use setup functions of particular shaders instead (e.g. Shaders::Phong::setDiffuseTexture())
  • Context::Flag::Robustness is deprecated, use Context::Flag::RobustAccess which reflects OpenGL naming better instead
  • Texture::maxLayers() has misleading naming and is deprecated, use Shader::maxCombinedTextureImageUnits() instead

Potential compatibility breakages, removed APIs

  • All functionality deprecated in 2013.10 has been removed, namely:
    • Removed deprecated raw-pointer versions of Buffer::setData() and Buffer::setSubData(), use overloads taking Containers::ArrayReference instead
    • Removed deprecated Magnum/ImageFormat.h header and ImageFormat/ ImageType enums, use Magnum/ColorFormat.h header and ColorFormat/ ColorType enums instead
    • Removed deprecated Matrix2 and Matrix2d typedefs, use :ref:Matrix2x2 and :ref:Matrix2x2d instead
    • Removed deprecated Magnum/Swizzle.h header and Magnum::swizzle() function, use Magnum/Math/Swizzle.h and Math::swizzle() instead
    • Removed deprecated *::maxSupported*() limit queries, use the less verbose *::max*() versions instead
    • Removed deprecated Platform::*Application::InputEvent::Modifier::*Button enum values, use Platform::*Application::*Event::buttons() function and Platform::*Application::*Event::Button enum instead
    • Platform::Sdl2Application::Configuration::Flag enum and related functions were replaced with WindowFlag, as the name would now conflict with context flags

Internal changes

  • Removed last remaining bits of global state, everything is now stored per-context.

2014.01

Released 2014-01-21, tagged as v2014.01. See the release announcement for a high-level overview.

Dependency changes

No dependency changes in this release.

New features

Changes

  • Preferring absolute includes instead of relative (see mosra/magnum#36)
  • The magnum-distancefield utility is now named Distance Field conversion utility for consistency with other command-line utilities
  • ImageReference class now stores const data pointer instead of mutable one, modifying the data through the class interface isn't valid use case anyway
  • Added default template parameter to Buffer::data() and made *Image::data() templated to have them consistent. Note that this is source-compatible change.
  • Query::result<bool>() returns true if value is nonzero (was returning true only for value of 1 previously)
  • All functions in MeshTools namespace are now returning either Corrade::Containers::Array or std::unique_ptr instead of naked pointers to avoid accidental out-of-bounds access and memory leaks
  • All functions in Text namespace are now returning std::unique_ptr instead of naked pointers to avoid accidental memory leaks
  • Implementation of Platform::*Application::viewportEvent() is not required anymore, because in many cases the application doesn't need to react to window resize events at all
  • Textured Shaders::Flat now multiplies texture with the specified color instead of ignoring it. See also mosra/magnum#34
  • All deprecated functions and types are now emitting compiler warnings to encourage updating the code
  • Various documentation and example updates and improvements

Bug fixes

  • Fixed CubeMapTextureArray::image() function (more precisely it wasn't working at all). See also mosra/magnum#31.
  • Fixed wrong assertion in Texture::setWrapping() for rectangle textures
  • Fixed wrong assertion in AbstractImage::pixelSize() when computing size of separate depth and stencil formats
  • Mesh::addVertexBuffer() now properly computes offsets for matrix attributes
  • Taking index buffer offset into account in MeshView class
  • Fixed various issues with textured Shaders::Flat shader (actually the textured version was not working at all)
  • Various OS X-related fixes in Shaders library. See also mosra/magnum#27.
  • Fixed building issues when both SDL1 and SDL2 is installed on OS X. See also mosra/magnum#25, mosra/magnum#38.
  • Fixed building issues with CMake-generated XCode project on OS X. See also mosra/magnum#37.
  • Proper and failsafe OpenGL 3 context creation on OS X (3.0 is implemented only as core context, thus requesting 2.1 won't expose newer features). See also mosra/magnum#26, mosra/magnum#35 and mosra/magnum#43.
  • Fixed compilation issues with Clang and libc++
  • Fixed various compilation issues under MSVC (and worked around an insane amount of compiler bugs)

Deprecated APIs

  • Buffer::Usage enum is deprecated to reduce header dependencies, use global BufferUsage enum instead
  • Mesh::Primitive enum is deprecated to reduce header dependencies, use global MeshPrimitive enum instead
  • Sampler::maxAnisotropy() is deprecated to avoid naming conflict with *Texture::setMaxAnisotropy(), use Sampler::maxMaxAnisotropy() instead
  • Magnum::Geometry::Rectangle class (and Rectangle* typedefs) is deprecated, use more generic and feature-rich Math::Range instead.
  • Platform::Sdl2Application::Configuration::setFlags() function and related enum is deprecated to avoid naming conflict in the future, use Platform::Sdl2Application::Configuration::setWindowFlags() instead
  • SceneGraph::Animable::group() is deprecated, use non-ambiguous SceneGraph::Animable::animables() instead
  • Magnum/Shaders/magnumShadersResourceImport.hpp header is deprecated in favor of less verbose Magnum/Shaders/resourceImport.hpp
  • Text::TextRenderer class (and Text::TextRenderer2D, Text::TextRenderer3D typedefs) is deprecated, use less redundant name Text::Renderer instead

Potential compatibility breakages, removed APIs

  • Removed SceneGraph::*Transformation::move() from 2D transformation classes. It was originally meant for modifying draw order, but as the draw order is managed by SceneGraph::DrawableGroup class and not by parent object, this function is essentially useless.

Documentation

Internal changes

  • Added thorough tests for all core OpenGL functionality to make refactoring easier
  • Various internal optimizations and cleanup to make maintenance easier
  • Using Jenkins Continuous Integration to maintain compilable and bug-free state of the project more easily. Currently GCC 4.8, 4.7, 4.6, 4.5, 4.4, Clang 3.3, Clang 3.3 with libc++, Emscripten, x86-32/x86-64 Native Client and MinGW32 compilers are tested with both shared and static libraries. Separately testing builds with deprecated features enabled and disabled. Also explicitly testing desktop OpenGL, OpenGL ES 2.0, desktop OpenGL ES 2.0 emulation, OpenGL ES 3.0 and desktop OpenGL ES 3.0 emulation.
  • All files from src/ directory were moved to src/Magnum, external/ directory was moved to src/MagnumExternal (required to make inter-project includes absolute, as mentioned above)

2013.10

Released 2013-10-30, tagged as v2013.10. See the release announcement for a high-level overview.

Dependency changes

New features

Changes

  • Buffer::setData() and Buffer::setSubData() are now accepting Containers::ArrayReference for more convenient usage
  • Platform::*Application::viewportEvent() is not called at all if window size doesn't change, allowing for less cumbersome ofscreen rendering setups
  • Removed redundant operators from Math::*Matrix, use vectors for component-wise multiplication and division instead
  • Documentation updates and improvements to make the library more accessible for newcomers
  • Various build system updates for better compile times and easier installation

Bug fixes

  • Fixed compilation with Clang and libc++ (see mosra/magnum#12)
  • Fixes compilation of the Audio library on macOS (see mosra/magnum#19)
  • Fixed compatibility of builtin shaders with GLSL 1.20 and GLSL ES 1.00, added shader compilation tests to prevent this issue from reappearing (see mosra/magnum#17)
  • Extension support queries depend on selected GLSL version (see mosra/magnum-examples#3)
  • Properly exporting SceneGraph::AbstractCamera symbols (see mosra/magnum-bootstrap#3)

Deprecated APIs

  • Matrix2 and Matrix2d is deprecated, use Matrix2x2 and Matrix2x2d instead
  • swizzle() is deprecated, all of its functionality has been moved into Math::swizzle()
  • Buffer::setData() and Buffer::setSubData() overloads taking pair of data pointer and size are deprecated, use Containers::ArrayReference-based Buffer::setData() and Buffer::setSubData()
  • ImageFormat.h header, ImageFormat and ImageType enums are deprecated, use ColorFormat.h header, ColorFormat and ColorType enums which reflect OpenGL naming better instead
  • Platform::*Application::InputEvent::Modifier::*Button enum values are deprecated, use Platform::*Application::*Event::buttons() and Platform::*Application::*Event::Button enum instead
  • AbstractShaderProgram::maxSupportedVertexAttributeCount(), AbstractTexture::maxSupportedLayerCount() and Sampler::maxSupportedAnisotropy() are deprecated in favor of less verbose AbstractShaderProgram::maxVertexAttributes(), AbstractTexture::maxLayers() and Sampler::maxAnisotropy()

Documentation

Potential compatibility breakages, removed APIs

No deprecated API was removed in this release.

2013.08

Released 2013-08-30, tagged as v2013.08. See the project announcement for a high-level overview.