Changelog

Contents

See also:

Changes since 2019.01

New features

Audio library

DebugTools library

GL library

Math library

MeshTools library

Platform libraries

SceneGraph library

Shaders library

Text library

Changes and improvements

Animation library

Audio library

DebugTools library

GL library

Math library

MeshTools library

Shaders library

  • Shaders::Phong now clamps the specular factor to minimize artifacts when shininess is near zero

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.
  • 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
  • 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)

Bug fixes

Documentation

Deprecated APIs

Potential compatibility breakages, removed APIs

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 2017. 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

2018.04

Released 2018-05-01, tagged as v2018.04.

Dependency changes

  • Building for Android now requires CMake 3.7 with builtin Android crosscompilation support, the old toolchains were removed. Only the Clang and libc++ toolchain is now supported, support for GCC and libstdc++ was dropped, as it was still missing some important C++11 functionality. See Crosscompiling for Android for more information.

New features

Math library

GL library

Platform libraries

Primitives library

Trade library

Changes and improvements

  • The CompressedPixelStorage class and related APIs are now available on all targets including OpenGL ES and WebGL, however at the moment, until a compatibility code path is implemented, the GL library expects that all parameters are at their defaults.

DebugTools library

GL library

Text library

Platform libraries

Plugins

Build system

Bug fixes

  • Engine startup info was not properly printed to Android log since introducing the --magnum-log option in version 2018.02
  • Dropped Google Closure Compiler from Emscripten toolchains, it was bringing more harm than good (see mosra/magnum#211)
  • Working around Emscripten issue where -s USE_PTHREADS=1 would cause all shader sources containing Unicode characters to be truncated to empty strings. See the "emscripten-pthreads-broken-unicode-shader-sources" workaround description and mosra/magnum#239 for details.
  • GL::Attribute::DataType::HalfFloat was not available on WebGL 2 by mistake
  • A wrong code path for GL::Framebuffer::checkStatus() was selected on WebGL 1 by mistake
  • Fixed MAGNUM_PLUGINS_DIR variables to contain proper absolute location by default again.

Deprecated APIs

Potential compatibility breakages, removed APIs

Documentation

  • A new Developers guide page containing step-by-step checklists for maintainers and core developers
  • A new set of platform-specific guides containing extended information that was previously scattered across Platform application class docs and elsewhere
  • Completely reworked Android building documentation, now using Gradle CMake integration instead of the outdated and no longer supported Apache Ant workflow.
  • The Primitives namespace now has contains images visualizing how each primitive looks
  • Compiling majority of code snippets to ensure they don't get out of sync with the code

2018.02

Released 2018-02-15, tagged as v2018.02. See the release announcement for a high-level overview.

Dependency changes

New features

Audio library

DebugTools library

Math library

Platform libraries

Primitives library

Shaders library

  • Ability to construct all Shaders classes without an OpenGL context present using NoCreate

Text library

Trade library

Changes and improvements

Math library

Platform library

Shaders library

Build system

  • Continuous testing for Linux, macOS, Windows MSVC, Windows MinGW, Windows RT, iOS, Android and Emscripten on Travis CI and AppVeyor CI, with code coverage on codecov.io; replacing the unmaintained and outdated Jenkins configuration (see mosra/magnum#99, mosra/magnum#120, mosra/magnum#142, mosra/magnum#203)
  • Support for CMake subprojects. You can now clone Magnum into a subdirectory in your project and add it using add_subdirectory(). The find_package() command will then use the CMake subproject instead of looking for it in system-wide locations. See mosra/magnum#49. mosra/magnum#140.
  • Reworked CMake buildsystem to use the new imported target workflow, see Usage with CMake for more information (see mosra/magnum#103)
  • CMake targets are now organized in folders for better development experience in IDEs such as Visual Studio or Xcode
  • Added Homebrew package
  • Improvements and dependency updates to the Debian package (see mosra/magnum#119)
  • Ability to build OpenGL tests also on Windows and macOS (see BUILD_GL_TESTS CMake option)
  • Ability to override the implicit plugin directory using a MAGNUM_PLUGINS_DIR CMake cache variable
  • Ability to override deploy directory (used for example by Emscripten) using a MAGNUM_DEPLOY_PREFIX CMake cache variable
  • Better handling of compiled-in resources in static build. You don't need to manually register resources when using Shaders library in static builds (see mosra/magnum-examples#9)
  • MACOSX_RPATH is now enabled by default on CMake 3.0+ (see mosra/magnum#126
  • Enabling only C++ in CMake project() call, if possible, to speed up initial CMake run
  • Windowless application libraries now make use of the BUILD_STATIC_PIC CMake option
  • Fixed FindSDL2.cmake module to work out-of-the-box on Windows and macOS (see mosra/magnum#166)
  • Fixed FindSDL2.cmake to link to EGL when targeting GLES (see mosra/magnum-examples#9)
  • Bundling a patched version of FindOpenAL.cmake to make it working on Emscripten
  • Fixed EMSCRIPTEN environment variable handling in Emscripten toolchains (see mosra/toolchains#2, mosra/toolchains#3)

Bug fixes

Deprecated APIs

Potential compatibility breakages, removed APIs

Performance improvements

  • Reduced size of and number of allocations in Mesh class.

Documentation

Changelogs for previous versions are available in Archived changelogs.