- Changes since 2020.06
- New SpirvToolsShaderConverter plugin for SPIR-V shader (dis)assembly and validation
- New GlslangShaderConverter plugin for GLSL shader validation and GLSL->SPIR-V compilation
- New OpenExrImporter and OpenExrImageConverter plugins for reading and writing OpenEXR files, including cube map, custom channel, multi-part and deep image support
- New StbDxtImageConverter for compressing RGBA images into block-compressed BC1/BC3.
- TinyGltfImporter material import was reworked for the new Trade::
MaterialData API, supporting all core properties as well as everything from the KHR_ materials_ pbrSpecularGlossiness, KHR_ materials_ unlit and KHR_ materials_ clearcoat extensions. All the previous limitations on texture transformation or coordinate set variability are now gone.
- TinyGltfImporter now imports skins through Trade::
AbstractImporter:: skin3D(), Trade:: MeshObjectData3D:: skin() and related APIs
- AssimpImporter now imports ambient lights, light attenuation and spotlight cone angle properties
- AssimpImporter can now import animations and skins (see mosra/
magnum-plugins#97, mosra/ magnum-plugins#99 and mosra/ magnum-plugins#100)
- TinyGltfImporter now imports light range and spotlight cone angle properties
- The workaround for an Assimp 4.1 white ambient bug in AssimpImporter can now be disabled using the
- FreeTypeFont now treats its internal global library handle as thread-local on all platforms except Windows, making it possible to be used in multi-threaded environments
- StanfordImporter now supports also indices specified as
vertex_index, which is what Assimp uses for export (see mosra/
- TinyGltfImporter now performs range checks on scene, node, camera, mesh, material, child and light references in the scene hierarchy for more robust handling of broken files
- StbImageImporter now imports 16-bit PNG and PSD files as 16-bit instead of converting to 8 bit
- StbImageImporter now makes it possible to override imported image channel count using
- StbImageConverter can now detect output format from the file extension when calling convertToData() without having to load the plugin with a concrete format alias
- DrFlacAudioImporter no longer advertises support for 32-bit-per-channel FLAC files, as there's no known way to produce them and thus the case is impossible to test for.
versionPlugins.hheader now gets populated from Git correctly also when inside a CMake subproject
- Linux, Emscripten and macOS builds were migrated from Travis to Circle CI
UseEmscriptenis no longer implicitly included on Emscripten as it's not needed for anything (see mosra/
- On CMake 3.16 and newer,
FindMagnumPlugins.cmakecan provide additional details if some component is not found.
FindAssimp.cmakenow attempts to use installed Assimp CMake config files, if they are not broken, to correctly find and link to all dependencies in case of a static build. This is mainly to support static builds in Vcpkg, vanilla Assimp 5.0.1 config files are irreparably broken on all platforms except dynamic Windows builds.
- The Homebrew package now uses
std_cmake_argsinstead of hardcoded build type and install prefix, which resolves certain build issues (see mosra/
- AssimpImporter used to add a strange "skeleton
visualizer" meshes to files such as COLLADA even though the file had no skeletons in the first place. Turns out this was due to insane defaults and it was enough to just disable such misfeature. See also mosra/
- AssimpImporter now correctly imports files with backslashes in image paths also on non-Windows platforms (see mosra/
magnum-plugins#101 and mosra/ magnum-plugins#102)
- JpegImageConverter was mistakenly using the
BUILD_STATICCMake option instead of
- Fixed BasisImporter to work with direct instantiation without a plugin manager (see mosra/
ASSIMP_INCLUDE_DIRthat could be used to force Assimp location in
FindAssimp.cmakeare deprecated in favor of
- Various fixes and updates (see mosra/
Released 2020-06-27, tagged as v2020.06.
- Multi-primitive mesh support in AssimpImporter, consistent with TinyGltfImporter behavior (see mosra/
magnum-plugins#68 and mosra/ magnum-plugins#81)
- Tangent and bitangent import in AssimpImporter, normal texture support
- Vertex color, normal, texture coordinate and per-vertex object ID import in StanfordImporter; colors, normals and object IDs are supported per-face as well
- Custom vertex and face attribute import in StanfordImporter
- Support for the
KHR_lights_punctualextension in TinyGltfImporter, replacing the obsolete unuspported
- Support for the
KHR_mesh_quantizationextensions in TinyGltfImporter
- Tangent, object ID and custom vertex attribute support in TinyGltfImporter, normal texture import
- DdsImporter and BasisImporter, now support loading image mip levels; AssimpImporter, OpenGexImporter and TinyGltfImporter were updated to proxy mip level loading to image importer plugins (see mosra/
- New IcoImporter plugin for importing ICO files with embedded PNGs (see mosra/
- New PrimitiveImporter plugin for accessing contents of the Primitives library via importer APIs
- New StanfordSceneConverter for writing binary PLY files
- New StlImporter plugin for importing binary STL files
- New MeshOptimizerSceneConverter plugin, integrating meshoptimizer
- Animated GIF support in StbImageImporter
- Texture coordinate set import in AssimpImporter and TinyGltfImporter (see mosra/
- AssimpImporter now imports color alpha channel in Trade::
PhongMaterialData as well as importing both color and texture for file formats that support it
- DevIlImageImporter now also considers file extension when detecting file format, being able to open files that don't really have any easy-to-detect magic header; additionally the file type can be also forced though a plugin-specific configuration option.
- DevIlImageImporter can now load multi-image files such as
*.icos or animated GIFs
- Minor speedup in the StbTrueTypeFont plugin by avoiding use of 64-bit floating-point operations (see mosra/
- TinyGltfImporter now supports interleaved animation and mesh attributes
- TinyGltfImporter and OpenGexImporter now import both color and texture information instead of only one of them
- AssimpImporter inadvertently ignored base orientation for files that are defined with Z up instead of Y, this behavior is now also configurable (see mosra/
- AssimpImporter, DdsImporter and StanfordImporter now recognize the Trade::
ImporterFlag:: Verbose flag, printing verbose messages on the output if enabled
- StbImageImporter is now thread-safe if CORRADE_
BUILD_ MULTITHREADED is enabled.
- Library version is now exposed through
MAGNUMPLUGINS_VERSION_STRINGpreprocessor defines in a new
Magnum/versionPlugins.hheader. This header is not included by any other header to avoid trigerring a full rebuild when Git commit changes. If Git is not found, only the first two defines are present.
PngImporter now recognizes and imports gray+alpha files as well (see mosra/ magnum-plugins#71)
FindAssimp.cmakeis updated to look for IrrXML on all systems, not just Windows, since Vcpkg has the static build the same on all platforms
FindBasisUniversal.cmakeis updated to work with the Vcpkg package of Basis Universal (and consequently builds of the fork at https://github.com/jherico/basis_
universal as well). See mosra/ magnum-plugins#72.
- Disabling file I/O APIs in the DrFlacAudioImporter as they weren't used and unnecessarily pulled in
windows.h; fixed static builds of JpegImageConverter and JpegImporter on with libjpeg coming from MSYS2 MinGW packages (see mosra/
- Fixed build of DrWavAudioImporter on static libraries with dynamic plugins (see mosra/
- The library again compiles and tests cleanly with CORRADE_
NO_ ASSERT enabled, and this setup is verified on the CI to avoid further regressions
- Properly installing plugin binaries in Gentoo packages (see mosra/
- AssimpImporter could crash on a division-by-zero when custom file callbacks encounter an empty file
- Importing one image multiple times with DevIlImageImporter would cause it being differently flipped every time
- Fixed a crash in PngImporter when encountering palette files with less than 8 bits per pixel
- Removed OpenDdl headers in
MagnumPlugins/OpenGexImporter/OpenDdlthat were deprecated in 2018.04, include them from the
- TinyGltfImporter translation of PBR materials into a Phong shading model left Trade::
PhongMaterialData:: shininess() set at
1.0f, which wasn't a good default. Now it's set to
80.0fto match defaults of Shaders::
- Support for the KHR_
materials_ cmnBlinnPhong glTF extension has been removed from TinyGltfImporter, as it seems to be effectively abandoned. The branch didn't see any update since 2017 and there are no exporters supporting it.
- The bundled
tiny_gltfcode was updated from
v2.4.1in order to implement support for
KHR_lights_punctual. A lot happened between these two versions including a change in how it parses numeric data. It may cause the imported transformations to be slightly different than in 2019.10, resulting in very minor differences in rendered images, particularly on aliased edges. See also facebookresearch/
- DdsImporter now exposes mip levels not as separate images, but through the new
levelparameter and Trade::
AbstractImporter:: image2DLevelCount() / Trade:: AbstractImporter:: image3DLevelCount() APIs.
Released 2019-10-24, tagged as v2019.10.
- 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.
- MSVC 2019 compatibility, following other Magnum projects
- When using Magnum as a CMake subproject, it now puts all binaries into a common directory to simplify
PATHhandling and dynamic plugin loading. For more information see Using Magnum Plugins as a CMake subproject, mosra/
magnum#357 and mosra/ magnum-plugins#63.
- New DrMp3AudioImporter plugin for importing MP3 files (see mosra/
- New BasisImporter and BasisImageConverter plugin for importing and converting Basis files, support for Basis-encoded textures in TinyGltfImporter (see mosra/
magnum-plugins#62, mosra/ magnum-plugins#65 and mosra/ magnum-plugins#69)
- Calling image2D() in AssimpImporter, OpenGexImporter and TinyGltfImporter now behaves consistently in regards to file loading callbacks — failing with an error if and only if image is not embedded, the file is not opened from a filesystem and file loading callbacks are not set. Previously it could errorneously assert even when loading embedded images, try to look for images on the filesystem when loading in-memory data or fail to open images when a file inside current working directory was opened.
- The AssimpImporter plugin now detects ambient color set to
0xffffff_srgbfand forces it back to
0x000000_srgbf. This is a bug in Assimp 4.1, causing all other color information to get discarded. See also assimp/
assimp#2059, assimp/ assimp#2563 and mosra/ magnum-plugins#64.
- The AssimpImporter plugin now trims trailing space from image paths in order to deal better with OBJ meshes from hell (see mosra/
- The AssimpImporter plugin now imports each image just once in case a single image is shared by more than one texture
- JpegImporter now prints error info to Corrade::
Utility:: Error, allowing it to be redirected or suppressed consistently to other plugin implementations (see mosra/ magnum-plugins#53)
- PngImporter and PngImageConverter now print error and warning info to Corrade::
Utility:: Error and Corrade:: Utility:: Warning, allowing it to be redirected to suppressed consistently to other plugin implementations
- DevIlImageImporter now converts BGR data to RGB instead of expanding them to RGBA
- DevIlImageImporter, JpegImporter, PngImporter and StbImageImporter now properly report an error message when opening an empty file
- Switched TinyGltfImporter to use Corrade::
Utility:: Directory:: read() instead of tiny_gltf's internal APIs for loading external files, making it work correctly for UTF-8 paths on Windows
- Better diagnostics in TinyGltfImporter when an external buffer file is not found or when a file loaded from memory attempts to reference an external buffer without file callbacks being set
- DrFlacAudioImporter, DrWavAudioImporter and StbVorbisAudioImporter plugins no longer treat files with zero samples as errors, but give back an empty buffer instead
dr_wavfor DrWavAudioImporter to version 0.8.5 which supports a wider range of file types (see mosra/
- Actually reporting errors from FreeTypeFont instead of just failing without a message
- MSYS2 packages are now in official repositories, installable directly via
- The JpegImageConverter plugin was mistakenly using the
JPEG_INCLUDE_DIRSCMake variable which was not present on versions before 3.12. The JpegImporter plugin is not affected by this. See also mosra/
- Upgraded TinyGltfImporter to use json.hpp 3.3.0, fixing a compile error on some Clang versions (see mosra/
FindMagnumPlugins.cmaketo behave correctly when both a debug and a release version of libjpeg is found
FindMagnumPlugins.cmaketo correctly handle the
FindMagnumPlugins.cmakenow correctly finds debug versions of statically built plugins when using Vcpkg
FindMagnumPlugins.cmaketo correctly link to zlib also when both a debug and a release version of libpng is found
FindAssimp.cmakenow can optionally link to the IrrXML library (needed for static builds on Vcpkg)
- Emscripten builds now have the
-fPICoption disabled by default as it causes linker errors related to
__memory_baseon 1.38.36 (see also emscripten-core/
- AssimpImporter was returning a random value for material shininess with STL models, now it correctly returns
0.0fwhen the shininess value is not present.
- For files that had multiple textures, AssimpImporter was incorrectly importing only the first image, multiple times. Fixed independently also by mosra/
magnum-plugins#66 which got submitted three minutes after the change was pushed to
- StbImageImporter was not correctly handling image import failures, randomly hitting unreachable code assertions
- Fixed DevIlImageImporter BGR(A)-to-RGB(A) conversion to not return random memory
- PngImporter now handles too short files gracefully instead of aborting on an assertion
- PngImporter now handles paletted images and images with tRNS alpha mask correctly
- Fixed memory leaks in PngImporter error handling
FindMagnumPlugins.cmaketo correctly look for the
- Fixed handling of corrupted / incomplete data in StbTrueTypeFont (see mosra/
- Removed the
ColladaImporterplugin, deprecated since 2018.10, because it was based on an outdated toolkit and, due to the complexity of the COLLADA format and poor conformance of various exporters, it was not feasible to maintain a builtin importer anymore.
Released 2019-02-04, tagged as v2019.01.
- 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/
- 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/
MAGNUMPLUGINS_*_INCLUDE_DIRSCMake variables, which were deprecated in favor of
MagnumPlugins::*imported targets in February 2016.
Released 2018-10-23, tagged as v2018.10.
- Support for object transformation animation import in TinyGltfImporter (see mosra/
- New Trade::
JpegImageConverter plugin for writing JPEG files (see mosra/ magnum-plugins#26)
- Minimal support for the KHR_
materials_ pbrSpecularGlossiness extension in TinyGltfImporter
- The top-level
tinygltf::Modelstructure is now exposed through Trade::
TinyGltfImporter:: importerState() for easier access to extra data, exposing also Trade:: SceneData:: importerState() and Trade:: TextureData:: importerState()
- TinyGltfImporter now implements mapping between names and IDs for all currently imported data
- TinyGltfImporter now imports alpha mode, alpha mask and double sided material properties
- TinyGltfImporter now imports all camera properties together with type and aspect ratio / projection size
- AssimpImporter, OpenGexImporter and TinyGltfImporter now support
Trade::AbstractImporter::Feature::FileCallbackfor specifying custom callbacks to load extra files (see mosra/
- StbImageConverter was updated with a new version of
stb_image_write, supporting also JPEG export now (see mosra/
- StbTrueTypeFont was updated with a new version of
stb_truetype, supporting also OpenType fonts now
- FreeTypeFont, HarfBuzzFont and StbTrueTypeFont plugins can now be loaded also using the
OpenTypeFontalias, in addition to `TrueTypeFont
- Texture coordinate, color vertex attribute and base object color import in TinyGltfImporter (see mosra/
magnum-plugins#41, mosra/ magnum-plugins#43)
- Mesh name and complete multi-primitive mesh loading in TinyGltfImporter (see mosra/
- OpenGexImporter and TinyGltfImporter now properly import alpha for Trade::
- TinyGltfImporter now exposes the translation/rotation/scaling properties of Trade::
ObjectData3D separately if they are separate in the source file
- HarfBuzzFont is now providing
TrueTypeFont, similarly to other plugins supporting TTF fonts
- StbImageImporter now properly supports Apple proprietary CgBI PNGs. Stock
libPNGdoesn't support that but there are forks that can do it, updated documentation of PngImporter to mention that.
- StbImageConverter no longer requires input data to be tightly packed, allowing to export image subrectangles
- StbImageConverter now prints warnings when channels are lost on output due to limitations of the output format (such as alpha channel for JPEGs)
TinyGltfImporter:: defaultScene() now returns the first scene if no default scene is present in the file
- New Trade::
TinyGltfImporter:: TinyGltfImporter(PluginManager:: Manager<Trade:: AbstractImporter>&) constructor for easier usage of statically-built plugins
- Cleaned up some unnecessary memory copies and reallocations in the TinyGltfImporter implementation
- Upstreamed local patches to
- There's now a PPA for Ubuntu packages. See Packages for Debian, Ubuntu and derivatives for more information. See also mosra/
- TinyGLTF headers are now installed alongside the plugin for easier access to importer state. See Access to internal importer state for more information.
- TinyGltfImporter no longer depends on StbImageImporter to import images embedded in buffers or data URIs. Instead it proxies the loading to AnyImageImporter, the same way as was already done for external files.
- Fixed a TinyGltfImporter crash on materials without a PBR extension (see mosra/
- Fixed improper order of applying translation/rotation/scaling node transformations in TinyGltfImporter
- TinyGltfImporter now loads external images from
*.glbfiles and images embedded as URI data properly
- TinyGltfImporter now properly imports non-indexed meshes and meshes without the normal attribute
- Fixed quite a few critical issues with TinyGltfImporter mesh data import (see mosra/
undefined symbol: __cpu_modelerror when compiling StbImageImporter on GCC 5
- AssimpImporter now properly prints out an message on file opening error instead of failing silently
- AssimpImporter incorrectly imported object transformation matrices transposed
- AssimpImporter incorrectly imported the scene twice, once as a scene and once as a object that all other objects were parented to. However, in presence of postprocessing flags such as
PreTransformVerticesAssimp collapses all nodes into one and then the node is imported as a single object.
- FreeTypeFont was not handling subsequent calls to Text::
FreeTypeFont:: initialize() properly (see mosra/ magnum-plugins#49)
ColladaImporteris deprecated because it's based on an outdated toolkit. Moreover, due to the complexity of the COLLADA format and poor conformance of various exporters it's not feasible to maintain a builtin importer anymore and thus this plugin is scheduled for removal in a future release. Please consider either using AssimpImporter for COLLADA import or switching to simpler and better supported formats such as glTF or OpenGEX using TinyGltfImporter or OpenGexImporter. There's also the official COLLADA2GLTF converter.
Changelogs for previous versions are available in Archived plugin changelogs.