Changelog

Contents

See also:

Changes since 2020.06

New features

GL library

Math library

MeshTools library

Platform libraries

Shaders library

ShaderTools library

SceneGraph library

Trade library

Changes and improvements

GL library

MeshTools library

Platform libraries

Shaders library

Trade library

Build system

  • Fixed compilation of the GL library on macOS with ANGLE — new code assumed macOS is always desktop GL (see mosra/magnum#452)
  • Avoiding conflicts of Magnum's own GL headers with GLES3/gl32.h (see mosra/magnum#460)
  • The version.h header now gets populated from Git correctly also when inside a CMake subproject
  • Suppressed a warning specific to MinGW GCC 8+ (see mosra/magnum#474)

Bug fixes

Deprecated APIs

Potential compatibility breakages, removed APIs

Documentation

2020.06

Released 2020-06-27, tagged as v2020.06.

New features

Animation library

Audio library

DebugTools library

GL library

Math library

MeshTools library

Platform libraries

Primitives library

SceneGraph library

Shaders library

Trade library

Vk library

Changes and improvements

Audio library

GL library

Math library

MeshTools library

Platform libraries

Trade library

Build system

  • Fixed a bad interaction between Magnum/Platform/AbstractXApplication.h and Magnum/Platform/GlfwApplication.h (see mosra/magnum#389)
  • FindSDL2.cmake got updated to link to all dependencies when using a statically built SDL on Windows
  • FindSDL2.cmake now links to Metal in addition to other frameworks on iOS and is updated to link to these only if SDL is statically built (see mosra/magnum#410)
  • FindMagnum.cmake now properly recognizes an optional dependency between DebugTools and Trade on GL-less builds
  • Various compiler warning fixes (see mosra/magnum#406)
  • Added a 32-bit Windows build to the CI matrix to avoid random compilation issues (see mosra/magnum#421)
  • The library again compiles and tests cleanly with CORRADE_NO_ASSERT enabled, and this setup is verified on the CI to avoid further regressions
  • Worked around a regression in MSVC 2017 causing a compiler crash (see mosra/magnum#440)
  • Linker fixes for MinGW Clang (see mosra/magnum#417)
  • Properly installing plugin binaries in Gentoo packages (see mosra/magnum-plugins#85)
  • Warning fixes for MSVC (see mosra/magnum#445)
  • FindOpenAL.cmake was rewritten from scratch to support linking against statically built OpenAL Soft (through its CMake config file) as well as OpenAL Soft added as a CMake subproject. Moreover, when using Magnum as a CMake subproject, the Audio library now copies the OpenAL DLL to CMAKE_RUNTIME_OUTPUT_DIRECTORY (if set) as a post-build step. The DLL location, if found, is also available through an OPENAL_DLL_RELEASE variable for use by 3rd party code. See also mosra/magnum#402 and mosra/magnum#412 for more information.
  • Updated Android building and troubleshooting guide to make it work with NDK r19+ and CMake 3.16+. See also mosra/corrade#84 and mosra/magnum#310.
  • Vcpkg packages now ignore features that are incompatible with target platform, allowing vcpkg install magnum[*] to work again. See also mosra/magnum#368 and microsoft/vcpkg#12211.

Bug fixes

Deprecated APIs

Potential compatibility breakages, removed APIs

Documentation

2019.10

Released 2019-10-24, tagged as v2019.10.

Dependency changes

  • Minimal supported CMake version is now 3.4. Older versions are not supported anymore and all workarounds for them were removed. Download a prebuilt release of a newer version if you need to use Corrade on older systems (such as Ubuntu 14.04 or Debian 8). This is a conservative change that shouldn't affect any additional distribution compared to the CMake 3.1 requirement in 2019.01.

New features

Audio library

DebugTools library

GL library

Math library

MeshTools library

Platform libraries

Primitives library

SceneGraph library

Shaders library

Text library

Trade library

  • The magnum-imageconverter utility now implements new -i / --importer-options and -c / --converter-options command-line options for setting plugin-specific configuration

Changes and improvements

Animation library

Audio library

DebugTools library

GL library

Math library

MeshTools library

Shaders library

  • All shaders now have rendering output tests, making them more robust for future additions and refactorings. See also mosra/magnum#382.
  • Shaders::Phong now clamps the specular factor to minimize artifacts when shininess is near zero
  • Shaders::Phong can now handle zero lights, in which case its output is equivalent to Shaders::Flat3D. See Zero lights for more information.
  • Shaders::MeshVisualizer is fixed to work properly on Intel Windows drivers, adding a new "intel-windows-explicit-uniform-location-is-less-explicit-than-you-hoped" workaround

TextureTools library

Platform libraries

Text library

Trade library

Build system

  • MSYS2 packages are now in official repositories, installable directly via pacman
  • Plugin search path on Windows is now discovered relative to location of the Trade, Text or Audio library DLL instead of executable location. That makes it behave better in case Magnum is installed via a package and the installation directory hardcoded at build time doesn't exist on the target machine (which is the case of MSYS2 packages).
  • FindSDL2.cmake was updated to work with MinGW version 2.0.5 and newer, since these dropped the old directory hierarchy. Older versions have both the original and the new hierarchy, so it should work with these as well.
  • When using Magnum as a CMake subproject, Platform::GlfwApplication and Platform::Sdl2Application now copy the GLFW / SDL2 DLLs to CMAKE_RUNTIME_OUTPUT_DIRECTORY (if set) as a post-build step. The DLL location, if found, is also available through GLFW_DLL and SDL2_DLL_RELEASE / SDL2_DLL_DEBUG variables for use by 3rd party code. See also mosra/magnum#347 for more information.
  • Updated extremely outdated Emscripten boilerplate from the base-emscripten bootstrap project (the HTML markup was unchanged since 2013, heh)
  • ES 2.0 and ES 3.0 subset of tests requiring GL context is now run on Travis CI using SwiftShader for better code coverage (see mosra/magnum#207)
  • On CMake 3.13 and up, WebGL2 build on Emscripten (and the -s USE_WEBGL2=1 flag in particular) is now handled by the FindOpenGLES3.cmake module and the new INTERFACE_LINK_OPTIONS property instead of FindMagnum.cmake. On older versions this is handled in FindMagnum.cmake by modifying the global CMAKE_EXE_LINKER_FLAGS variable.
  • It's now possible to use Magnum as a CMake subproject also when building for Emscripten (see mosra/magnum#219)
  • Updated the Vcpkg package to work correctly with Vcpkg's own SDL2 (see Microsoft/vcpkg#5730)
  • Updated bundled GL headers to properly define the GL_VERSION_* macros to avoid conflicting GLintptr and GLsizeiptr type definitions on Windows when using Magnum together with Qt
  • It's now possible to override CMake's OpenGL_GL_PREFERENCE from outside on systems where GLVND doesn't work properly (before the build scripts and FindMagnum.cmake always forced GLVND)
  • FindMagnum.cmake now correctly finds debug versions of statically built plugins when using Vcpkg
  • FindEGL.cmake, FindOpenAL.cmake, FindOpenGLES2.cmake and FindOpenGLES3.cmake now explicitly link to the GL and openal libraries on Emscripten, which is needed for MINIMAL_BUILD
  • FindOpenGLES2.cmake and FindOpenGLES3.cmake don't require GL ES headers to be installed on the system anymore, as Magnum uses its own copies
  • Fixed linking of static Any* plugins when the libraries are otherwise build as dynamic
  • Removed mention of the outdated Ubuntu PPA from Downloading and building as it doesn't seem to be maintained anymore (see mosra/magnum-examples#61)
  • Worked around a bug in the NVCC compiler on Windows involving Math::RectangularMatrix::DiagonalSize to make Magnum usable with CUDA (see mosra/magnum#345)
  • Fixed a 64-to-32-bit conversion warning on MSVC in GL::Mesh internals (see mosra/magnum#352)
  • Emscripten builds now have the -fPIC option disabled by default as it causes linker errors related to __memory_base on 1.38.36 (see also emscripten-core/emscripten#8761)
  • Fixed the Magnum::Application, Magnum::WindowlessApplication and Magnum::GLContext aliases in FindMagnum.cmake to propagate the values from the target they alias also across directories, instead of failing with e.g.

    Error evaluating generator expression:
    
    $<TARGET_PROPERTY:Magnum::Sdl2Application,INTERFACE_INCLUDE_DIRECTORIES>
    
    Target "Magnum::Sdl2Application" not found.
    

Bug fixes

Documentation

Deprecated APIs

Potential compatibility breakages, removed APIs

  • Configuration value parsers and writers for Math types were moved to a dedicated Magnum/Math/ConfigurationValue.h header in order to speed up compile times. Backwards compatibility is not provided, when using Math types with Corrade::Utility::Configuration or Corrade::Utility::Arguments you have to include the header explicitly
  • Audio::Extension::extensions() and GL::Extension::extensions() now return a Corrade::Containers::ArrayView instead of a reference to std::vector in order to reduce binary bloat and compile times
  • Removed all aliases to GL library functionality in the root namespace (and root include path) which were deprecated in 2018.04 and everything related to this change:
  • Removed Primitives::Capsule2D, Primitives::Capsule3D, Primitives::Circle, Primitives::Crosshair2D, Primitives::Crosshair3D, Primitives::Cube, Primitives::Cylinder, Primitives::Icosphere, Primitives::Line, Primitives::Plane, Primitives::Square and Primitives::UVSphere classes deprecated in 2018.04. The same functionality is available through free functions in the Primitives namespace, use those instead.
  • Removed templated overloads of GL::Buffer::data(), GL::Buffer::subData() and GL::Buffer::map() deprecated since 2017. Use the non-templated versions together with Corrade::Containers::arrayCast().
  • Removed GL::Context::DetectedDriver::AMD and GL::Context::DetectedDriver::ProbablyAngle aliases deprecated since 2017, use consistently-named GL::Context::DetectedDriver::Amd and GL::Context::DetectedDriver::Angle instead
  • Removed GL::CubeMapTexture::Coordinate deprecated since 2016, use GL::CubeMapCoordinate instead
  • Removed remaining Platform::*Application constructors taking nullptr instead of NoCreate, deprecated since 2017
  • Removed compatibility code in Audio::Context where Audio::Context::current() would be usable with both . and ->, deprecated since 2017
  • Removed Audio::Context::hrtfSpecifier() deprecated since 2018.02. Use Audio::Context::hrtfSpecifierString() instead.
  • Removed the Shapes library together with DebugTools::ShapeRenderer, which was a failed design experiment deprecated since version 2018.10 (see mosra/magnum#148)
  • Removed the Platform::GlutApplication as it was based on an outdated toolkit and deprecated since version 2018.10 (see mosra/magnum#148 and mosra/magnum#195)
  • In order to be compatible with both Emscripten 1.38.27 and the versions before, all Emscripten markup is now expected to have the HTML <canvas> element identified by #canvas. You need to:
    • update your HTML markup to use <canvas id="canvas"> instead of <canvas id="module">
    • in case you have a copy or a fork of the JS driver file, it needs to define Module.canvas as document.getElementById('canvas') (instead of 'module')
    • and for CSS files, all references to #module need to be #canvas now
  • The BUILD_MULTITHREADED CMake option and MAGNUM_BUILD_MULTITHREADED CMake / preprocessor variable has been moved to Corrade — you need to toggle it when building Corrade and use CORRADE_BUILD_MULTITHREADED instead
  • PixelFormat and CompressedPixelFormat now reserve the zero value to indicate an invalid format, better catching accidentally forgotten initialization. Valid code shouldn't be affected by this change, but broken code that seemingly worked before might start throwing assertions now.
  • Shaders::MeshVisualizer now asserts if its wireframe-related setters are called when the Shaders::MeshVisualizer::Flag::Wireframe flag was not set, consistently with other shaders. This might cause failures in code that was calling them unnecessarily before.

2019.01

Released 2019-02-04, tagged as v2019.01.

Dependency changes

  • Minimal supported GCC version is now 4.8.1, GCC 4.7 is not supported anymore. Minimal Clang version is now 3.3, since that's the first version with a complete C++11 support. See also mosra/magnum#274.
  • Minimal supported CMake version is now 3.1. Older versions are not supported anymore and all workarounds for them were removed. Download a prebuilt release of a newer version if you need to use Corrade on older systems (such as Ubuntu 14.04 or Debian 8). See also mosra/magnum#274.

New features

Animation library

Math library

Platform libraries

Vk library

Changes and improvements

Audio library

GL library

  • Added a "nv-egl-incorrect-gl11-function-pointers" workaround that explicitly loads OpenGL 1.0 and 1.1 function pointers on contexts created using EGL on NVidia drivers, because there functions such as glGetString() behave incorrectly when linked statically. See also mosra/magnum#308.
  • New GL::Context::State::BindScratchVao state to make external OpenGL code that's not VAO-aware working on core GL profiles (which don't allow default VAOs being used for drawing)

Platform libraries

Text library

TextureTools library

  • Further performance and output quality improvements for TextureTools::DistanceField, making the ES2/WebGL 1 consistent with desktop and speeding up the processing to take only 60% of the time compared to before. It's now also possible to reuse the internal state for batch processing.

Trade library

Build system

Bug fixes

Documentation

Deprecated APIs

Potential compatibility breakages, removed APIs

  • The MeshTools::fullScreenTriangle() function now returns just a GL::Mesh instead of std::pair of a mesh and a buffer, as the buffer is now owned by the mesh. This change was not possible to be done in a backwards-compatible way.
  • Animation::Player, Audio::Listener, GL::AbstractShaderProgram, GL::MeshView and GL::Shader APIs that take a std::initializer_list of references were changed to use Corrade::Containers::Reference instead of a std::reference_wrapper. This change should be fully transparent to the user as the type conversion is done implicitly in both cases, but you may need to add an #include <Corrade/Containers/Reference.h> where appropriate.
  • Removed deprecated implicit conversion Corrade::Containers::Optional to std::optional, deprecated in January 2018. The class now contains an explicit and opt-in STL compatibility, see its documentation for more information. You may need to add an #include <Corrade/Containers/Optional.h> where appropriate.
  • Removed the Magnum/Test/AbstractOpenGLTester.h header that was deprecated in January 2017. Use Magnum/GL/OpenGLTester.h and the GL::OpenGLTester library instead. Note that the deprecated Magnum/OpenGLTester.h header is still present, along with all other deprecated GL-specific headers and APIs in the project root.
  • Removed five-argument Trade::MeshData2D and six-argument Trade::MeshData3D constructors that were deprecated since February
    1. Use the full six/seven-argument versions instead.
  • Removed Platform application constructors taking nullptr, deprecated in June 2016 for windowless apps and in March 2017 for windowed apps. Use constructors taking the NoCreate tag instead.
  • Removed availability of Math::Color3 and Math::Color4 literals in the root namespace, deprecated since April 2016. Explicitly call using namespace Math::Literals; instead.
  • Removed uppercase *HSV APIs from Math::Color3 and Math::Color4, deprecated since December 2016. Use the CamelCased *Hsv APIs instead.
  • Removed Math::normalize() and Math::denormalize() functions, deprecated since December 2016. Use Math::pack() and Math::unpack() instead.
  • Removed Platform::*Application::MouseEvent::Button::WheelUp and Platform::*Application::MouseEvent::Button::WheelDown, deprecated since June 2016. Use the dedicated mouseScrollEvent() API instead.
  • Removed Platform::GlfwApplication::Configuration::WindowFlag::Resizeable, deprecated since February 2017. Use Platform::GlfwApplication::Configuration::WindowFlag::Resizable instead.
  • Removed MAGNUM_*_LIBRARIES and MAGNUM_*_INCLUDE_DIRS CMake variables, which were deprecated in favor of Magnum::* imported targets in February 2016.

2018.10

Released 2018-10-23, tagged as v2018.10.

New features

Animation library

DebugTools library

GL library

Math library

Platform libraries

Primitives library

SceneGraph library

Shaders library

Trade library

Vk library

Changes and improvements

Audio library

GL library

Math library

MeshTools library

Platform libraries

Shaders library

TextureTools library

  • Fixed TextureTools::distanceField() to not require more than 8 texture units, which is the limit on all iOS ES2 contexts, independently on the device (ES3 contexts have 16).

Trade library

Build system

  • There's now a PPA for Ubuntu packages. See Packages for Debian, Ubuntu and derivatives for more information. See also mosra/magnum#248 and mosra/magnum#249.
  • Fixed various issues preventing to build and use the base libraries with OpenGL support disabled (see mosra/magnum#255)
  • Magnum now links to GLVND on Linux instead of the old libGL ABI if using CMake 3.11 and newer
  • Using official Apple OpenGL include paths on iOS (see mosra/magnum#253)
  • FindMagnum.cmake now allows to use the DebugTools library even if some of its optional dependencies are not compiled in
  • FindSDL2.cmake now properly links to dl and pthread libraries when using a static build of SDL2 on Linux
  • FindSDL2.cmake is now able to properly find a debug build of SDL, which enables Vcpkg to properly copy all dependency DLLs on Windows (see mosra/magnum-examples#42, mosra/magnum-examples#45)
  • FindGLFW.cmake is now preferring GLFW CMake config file to pick up the imported target, if available (see mosra/magnum#194)
  • FindMagnum.cmake now provides full paths to application JS/CSS files on Emscripten builds through new MAGNUM_EMSCRIPTENAPPLICATION_JS, MAGNUM_WINDOWLESSEMSCRIPTENAPPLICATION_JS and MAGNUM_WEBAPPLICATION_CSS CMake variables. These files are now installed unconditionally even if no Platform::*Application library is built to allow them to be used with third-party application implementations.
  • ObjImporter didn't work with CMake subprojects due to an embarrassing typo (see mosra/magnum#259)
  • AnyAudioImporter, AnyImageConverter, AnyImageImporter and AnySceneImporter plugins were not correctly updated for subproject support after moving them out of the magnum-plugins repository
  • Improved out-of-the-box behavior with Emscripten toolchains (see mosra/magnum#283)

Bug fixes

Documentation

Deprecated APIs

Potential compatibility breakages, removed APIs

Changelogs for previous versions are available in Archived changelogs.