Archived changelogs
See also:
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 Cross-compiling for Android for more information.
 
New features
- New PixelFormat / CompressedPixelFormat enums containing generic API-independent pixel formats, together with 
pixelSize(), pixelFormatWrap() / pixelFormatUnwrap(), compressedPixelFormatWrap() / compressedPixelFormatUnwrap() and isPixelFormatImplementationSpecific() / isCompressedPixelFormatImplementationSpecific() utilities now used by Image / CompressedImage and ImageView / CompressedImageView instead of the GL-specific formats - New MeshPrimitive and MeshIndexType enums containing generic API-independent mesh primitive types and index types, together with meshIndexTypeSize() utilities
 - New SamplerFilter, SamplerMipmap and SamplerWrapping enums containing generic API-independent texture sampler modes
 
Math library
- Added Math::
isInf(), Math:: isNan()  
GL library
- A new library that now contains wrappers for the OpenGL family of graphics APIs, separated from the core Magnum library (see mosra/
magnum#233)  - New GL::
hasPixelFormat(), GL:: pixelFormat(), GL:: pixelType(), GL:: hasCompressedPixelFormat(), GL:: compressedPixelFormat() utilities for converting generic PixelFormat / CompressedPixelFormat to GL-specific GL:: PixelFormat, GL:: PixelType and GL:: CompressedPixelFormat values. The GL:: BufferImage and GL:: CompressedBufferImage classes now have overloads accepting both types.  - New GL::
meshPrimitive() and GL:: meshIndexType() utilities for converting generic MeshPrimitive and MeshIndexType to GL-specific GL:: MeshPrimitive and GL:: MeshIndexType values. The GL:: Mesh class now has overloads accepting both types.  - New GL::
Mesh:: indexType() and GL:: MeshView:: mesh() getters  - New GL::
samplerFilter(), GL:: samplerMipmap() and GL:: samplerWrapping() utilities for converting generic SamplerFilter, SamplerMipmap and SamplerWrapping to G L-specific GL:: SamplerFilter, GL:: SamplerMipmap and GL:: SamplerWrapping values. All texture classes now have overloads accepting both types.  - Initial support for OpenGL ES 3.2 and OpenGL 4.6 (see mosra/
magnum#224, mosra/ magnum#231)  - New OpenGL extension support:
 - Ported GL::
OpenGLTester to WebGL  
Platform libraries
- Ability to create Platform::
Sdl2Application and Platform:: GlfwApplication classes without implicitly created OpenGL context by passing Configuration:: WindowFlag:: Contextless to them. These two can be now also built completely without the GL library.  - Added Platform::
AndroidApplication:: windowSize()  - Added Platform::
AndroidApplication:: nativeActivity() to access underlying ANativeActivitystructure for calling various Android APIs 
Primitives library
Trade library
- Debug output operator for Trade::
PhongMaterialData:: Flag and Trade:: PhongMaterialData:: Flags  
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
- DebugTools::
textureSubImage() now accepts both GL-specific GL:: PixelFormat / GL:: PixelType combination and the generic PixelFormat enum  - DebugTools::
CompareImage now accepts generic PixelFormat on input instead of GL-specific GL:: PixelFormat / GL:: PixelType  
GL library
- The GL::
Mesh:: indexTypeSize() and GL::MeshView::setIndexRange()now expect that the mesh is indexed (instead of silently not doing anything) 
Text library
- The 
Text::GlyphCachenow unconditionally uses GL::TextureFormat:: Luminance on ES2 and WebGL 1, instead of trying GL:: TextureFormat:: Red there first. That's done for consistency with GL:: pixelFormat(), which unconditionally returns GL:: PixelFormat:: Luminance for PixelFormat:: R8Unorm.  
Platform libraries
- Separated Platform::
*Application:: Configuration into Configuration and GLConfiguration to allow creation of non-GL application instances in the future  
Plugins
- TgaImporter and TgaImageConverter plugins now operate on the generic PixelFormat instead of GL-specific GL::
PixelFormat / GL:: PixelType  - AnySceneImporter now uses 
GlbImporterfor loading binary glTF files instead of proxying them toGltfImporterplugins 
Build system
- The core Magnum library is not depending on OpenGL anymore, all GL-related APIs are now part of a new GL library
 - Primitives and Trade libraries do not depend on OpenGL anymore
 - DebugTools, MeshTools and TextureTools have only an optional dependency on the GL library, controlled with 
TARGET_GLCMake option - All plugin interfaces now implement pluginSearchPaths() for plugin directory autodetection — you no longer need to specify the plugin directory explicitly when loading plugins. See Loading and instantiating plugins for more information. See also mosra/
magnum#235.  - Plugins now provide an automatic means of static plugin import via CMake targets, no need to call CORRADE_
PLUGIN_ IMPORT() implicitly anymore. For this to work, you just need to update local copies of all Find modules. See Static plugins for more information.  - The AnyAudioImporter, AnyImageConverter, AnyImageImporter and AnySceneImporter plugins were moved from the plugins repository to the core Magnum repository. If you are using them statically via CMake, you need to update your copies of 
FindMagnum.cmakeandFindMagnumPlugins.cmakemodules. See Downloading and building and Usage with CMake for more information. - The Trade namespace is now a separate library, allowing to use core Magnum functionality without Corrade::
PluginManager  - Suppressed a MSVC warning in MeshTools::
interleave() (see mosra/ magnum#238)  - Fixed Vcpkg packages to properly copy all plugin and their dependencies along the executable (see mosra/
magnum#235, mosra/ magnum-examples#41)  - Stable version of Magnum is now available as a binary package in the ArchLinux 
[community]repo - Homebrew macOS packages were updated to install the stable version by default
 - Fixed the Debian package after introducing 
SOVERSIONto all libraries (see mosra/magnum#237)  - Fixed the Debian package to not include a revision. While just a warning on Ubuntu, it's a hard error on Debian. (See mosra/
corrade#44.)  
Bug fixes
- Engine startup info was not properly printed to Android log since introducing the 
--magnum-logoption 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=1would 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::HalfFloatwas 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_DIRvariables to contain proper absolute location by default again. 
Deprecated APIs
- All GL-related headers and APIs from the root 
Magnum/directory and Magnum namespace were moved to theMagnum/GL/directory and Magnum::GL namespace. See their documentation for information about particular files, classes, enums, typedefs, values and functions.  - The 
MAGNUM_ASSERT_VERSION_SUPPORTED(),MAGNUM_ASSERT_EXTENSION_SUPPORTED()andMAGNUM_VERIFY_NO_ERROR()macros are deprecated, use MAGNUM_ASSERT_ GL_ VERSION_ SUPPORTED(), MAGNUM_ ASSERT_ GL_ EXTENSION_ SUPPORTED() and MAGNUM_ VERIFY_ NO_ GL_ ERROR() instead  - The 
Platform::Contextclass is deprecated, use Platform::GLContext instead  Platform::*ApplicationcreateContext()andPlatform::*ApplicationtryCreateContext()functions are deprecated for being too GL-specific, use create() and tryCreate() instead- The 
Extensions::GLnamespace is deprecated, use GL::Extensions instead  - The PixelFormat and CompressedPixelFormat enum now contains generic API-independent values. The GL-specific formats are present there, but marked as deprecated. Use either the generic values or GL::
PixelFormat (together with GL:: PixelType) and GL:: CompressedPixelFormat instead.  PixelStorage::pixelSize()was deprecated, useGL::pixelSize()orMagnum::pixelSize()insteadPixelStorage::dataProperties(GL::PixelFormat, GL::PixelSize, const Vector3i&)was deprecated for being too GL-specific, use PixelStorage::dataProperties(std:: size_t, const Vector3i&) const together with GL::pixelSize()insteadImage*type()functions are deprecated as these are too GL-specific. The second format specifier is now available through Image::formatExtra(), ImageView:: formatExtra() and Trade:: ImageData:: formatExtra() Audio::Buffer::Formatis deprecated, use Audio::BufferFormat instead setData()functions in the Image and CompressedImage classes are deprecated because they don't offer anything extra over simple move-assignment of a new instance.- The MeshPrimitive enum now contains generic API-independent values. The additional GL-specific types are present there, but marked as deprecated. Use the GL-specific GL::
MeshPrimitive enum instead.  - THe 
GL::Mesh::IndexTypeenum and theMesh::indexSize(MeshIndexType)function is deprecated, use Magnum::MeshIndexType / GL:: MeshIndexType and meshIndexTypeSize() instead  - The 
GL::Mesh::indexSize()function is deprecated, useGL::Mesh::indexTypeSize()instead - The 
Samplerclass and theSampler::Filter,Sampler::Mipmap,Sampler::Wrapping,Sampler::CompareMode,Sampler::CompareFunctionandSampler::DepthStencilModeenums are deprecated, use GL::Sampler, SamplerFilter / GL:: SamplerFilter, SamplerMipmap / GL:: SamplerMipmap, SamplerWrapping / GL:: SamplerWrapping, GL:: SamplerCompareMode, GL:: SamplerCompareFunction and GL:: SamplerDepthStencilMode instead  - Class 
Primitives::Capsule2DandPrimitives::Capsule3Dis deprecated, use Primitives::capsule2DWireframe(), Primitives:: capsule3DSolid() and Primitives:: capsule3DWireframe() free functions instead  - Class 
Primitives::Circleis deprecated, use Primitives::circle2DSolid() and Primitives:: circle2DWireframe() instead  - Class 
Primitives::Crosshair2DandPrimitives::Crosshair3Dis deprecated, use Primitives::crosshair2D() and Primitives:: crosshair3D() free function instead  - Class 
Primitives::Cubeis deprecated, use Primitives::cubeSolid(), Primitives:: cubeSolidStrip() and Primitives:: cubeWireframe() free functions instead  - Class 
Primitives::Cylinderis deprecated, use Primitives::cylinderSolid(), Primitives:: cylinderWireframe() free functions instead  - Class 
Primitives::Icosphereis deprecated, use the Primitives::icosphereSolid() free function instead  - Class 
Primitives::Lineis deprecated, use the Primitives::line2D() and Primitives:: line3D() free functions instead  - Class 
Primitives::Planeis deprecated, use Primitives::planeSolid() and Primitives:: planeWireframe() free functions instead  - Class 
Primitives::Squareis deprecated, use Primitives::squareSolid() and Primitives:: squareWireframe() free functions instead  - Class 
Primitives::UVSphereis deprecated, use Primitives::uvSphereSolid() and Primitives:: uvSphereWireframe() free functions instead  Shaders::*Vector::setVectorTexture(),Shaders::Flat::setTexture(),Shaders::Phong::setAmbientTexture(),Shaders::Phong::setDiffuseTexture(),Shaders::Phong::setSpecularTexture()andShaders::Phong::setTextures()are deprecated because texture binding (a global state) is confused there with uniform setup (a shader-local state). That can lead to accidental state mismatches where a texture is forgotten to be rebound. UseShaders::*Vector::bindVectorTexture(),Shaders::Flat::bindTexture(),Shaders::Phong::bindAmbientTexture(),Shaders::Phong::bindDiffuseTexture(),Shaders::Phong::bindSpecularTexture()andShaders::Phong::bindTextures()instead.
Potential compatibility breakages, removed APIs
- Code that was previously linking just to the core Magnum library may now need to explicitly link to the Magnum::
Trade and Magnum:: GL libraries as well. If using CMake, these dependencies might get linked in transitively from other libraries, but that doesn't handle all cases. Due to the complexity of this change, no backwards compatibility is provided.  - The 
magnum-infoutility was renamed to Magnum GL Info. No backwards compatibility symlinks or aliases are provided. - The 
Magnum::Contexttarget alias was renamed toMagnum::GLContext. No backwards compatibility aliases are provided. - PixelStorage::
dataProperties(), Image:: dataProperties(), ImageView:: dataProperties(), Trade:: ImageData:: dataProperties(), and GL:: BufferImage:: dataProperties() now return just a pair of two values, as the third value is now accessible directly through *Image:: pixelSize() and no longer calculated on-demand  - CompressedPixelStorage::
dataProperties(), CompressedImage:: dataProperties(), CompressedImageView:: dataProperties() and GL:: CompressedBufferImage:: dataProperties() now return just a pair of two values, as the third value is accessible directly through CompressedPixelStorage:: compressedBlockDataSize()  - ImageView and CompressedImageView methods are no longer 
constexpr. It might be possible to have themconstexprin C++14, but the resulting increase in maintenance costs and compile times is not worth it. PixelFormathas been moved verbatim to GL::PixelFormat and there's a new Magnum:: PixelFormat enum for generic pixel formats. It contains (deprecated) GL:: PixelFormat values for covering most of backwards compatibility, but code that relies on these two types being the same may break. In particular, GL:: BufferImage:: format() now returns GL:: PixelFormat instead of Magnum:: PixelFormat, code depending on the return type being implicitly convertible to Magnum:: PixelFormat may break. In all other cases, Image*:: format() returns Magnum:: PixelFormat. CompressedPixelFormathas been moved verbatim to GL::CompressedPixelFormat and there's a new Magnum:: CompressedPixelFormat enum for generic pixel formats. It contains (deprecated) GL:: CompressedPixelFormat values for covering most of backwards compatibility, but code that relies on these two types being the same may break. In particular, GL:: CompressedBufferImage:: format() now returns GL:: CompressedPixelFormat instead of Magnum:: CompressedPixelFormat, code depending on the return type being implicitly convertible to Magnum:: CompressedPixelFormat may break. In all other cases, CompressedImage*:: format() returns Magnum:: CompressedPixelFormat. MeshPrimitivehas been moved verbatim to GL::MeshPrimitive and there's a new Magnum:: MeshPrimitive enum for generic primitive types. It contains (deprecated) additional GL:: MeshPrimitive values for covering most of backwards compatibility, but code that relies on these two types being the same (or have values that match GL enums) may break. In particular, GL:: Mesh:: primitive() now returns GL:: MeshPrimitive instead of Magnum:: MeshPrimitive, code depending on the return type being implicitly convertible to Magnum:: MeshPrimitive may break. In all other cases, Trade::MeshData*Dprimitive()etc. returns Magnum::MeshPrimitive. - Configuration value reader/writers are now for only Magnum::
MeshPrimitive and Magnum:: MeshIndexType, not for GL:: MeshPrimitive or GL:: MeshIndexType  - DebugTools::
CompareImage no longer accepts GL-specific pixel formats, only the non-deprecated values from the generic PixelFormat enum  - The TgaImageConverter plugin no longer accepts GL-specific pixel formats, only the non-deprecated values from the generic PixelFormat enum
 - The Image::
pixelSize(), ImageView:: pixelSize(), Trade:: ImageData:: pixelSize() and GL:: BufferImage:: pixelSize() functions now return UnsignedInt instead of std::size_t. - Removed 
PixelStorage::setSwapBytes(), as every Magnum API dealing with images basically only asserted that it's not set. Use Corrade::Utility:: Endianness instead.  - Removed the 
Buffer::Usageenum that was deprecated in 2014.01, use the global GL::BufferUsage enum instead  - Removed the 
Magnum/Query.hheader that was deprecated in 2015.05, use one ofMagnum/PrimitiveQuery.h,Magnum/SampleQuery.horMagnum/TimeQuery.hinstead - Removed ability to use GL::
Buffer:: Target as constructor or GL:: Buffer:: setTargetHint() parameter that was deprecated in 2015.05, use GL:: Buffer:: TargetHint instead  - Removed the 
SceneGraph::TransformationTypeenum that was deprecated in 2015.05, use separate<transform>()and<transform>Local()variants instead - Removed 
SceneGraph::AbstractObject::hasFeatures(),firstFeature(),lastFeature(),SceneGraph::Object::hasChildren(),firstChild()andlastChild()that were deprecated in 2015.05, use methods on linked list returned by SceneGraph::AbstractObject:: features() and SceneGraph:: Object:: children() instead  - Removed 
Platform::ScreenedApplication::frontScreen()andPlatform::ScreenedApplication::backScreen()that were deprecated in 2015.05, use methods on linked list returned by Platform::ScreenedApplication:: screens() instead  - Removed *Framebuffer::
read() functions taking two vectors that was deprecated in 2015.05, use overload taking Range2Di instead  - Removed the 
Mesh::maxVertexAttributes()function that was deprecated in 2015.05, use GL::AbstractShaderProgram:: maxVertexAttributes() instead  - Removed 
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()andMath::Vector3::cross()that were deprecated in 2015.05, use Math::dot(), Math:: angle(), Math:: lerp(), Math:: slerp() and Math:: cross() instead  - Removed 
*Framebuffer::bind(FramebufferTarget)function that was deprecated in 2%15.05, use parameter-less *Framebuffer::bind() instead  - Removed 
FramebufferTarget::ReadDrawenum value that was deprecated in 2015.05, use separateFramebufferTarget::ReadandFramebufferTarget::Drawvalues instead - Removed GL::
CubeMapTexture:: imageSize() with explicit face parameter that was deprecated in 2015.05, use overload that returns one value for all faces instead  - Removed the 
Magnum/DebugMessage.hheader that was deprecated in 2015.05, use Magnum/GL/ DebugOutput.h instead  - Removed the 
DebugMessage::Severityenum that was deprecated in 2015.05, use GL::DebugOutput:: Severity instead  - Removed 
DebugMessage::Callbacktypedef,DebugMessage::setCallback()andDebugMessage::setDefaultCallback()function that were deprecated in 2015.05, use GL::DebugOutput:: Callback, GL:: DebugOutput:: setCallback() and GL:: DebugOutput:: setDefaultCallback() instead  - Removed 
DebugMessage::maxLoggedMessages()andDebugMessage::maxMessageLength()functions that were deprecated in 2015.05, use GL::DebugOutput:: maxLoggedMessages() and GL:: DebugOutput:: maxMessageLength() instead  - Removed 
DebugMessage::setEnabled()function and related values fromDebugMessage::Sourceenum that were deprecated in 2015.05, use GL::DebugOutput:: setEnabled() along with GL:: DebugOutput:: Source, GL:: DebugOutput:: Type and GL:: DebugOutput:: Severity instead  - Removed parameter-less 
*Queryconstructor and parametrized*Query::begin()function that were deprecated in 2015.05, use constructor with parameter and parameter-less GL::*Query:: begin() instead  - Removed 
Timeline::setMinimalFrameTime()that was deprecated since June 2015, use Platform::*Application:: setSwapInterval() and/or Platform:: *Application:: setMinimalLoopPeriod() instead  - Removed 
SceneGraph::Camera2D::setProjection(),SceneGraph::Camera3D::setOrthographic()andSceneGraph::Camera3D::setPerspective()that were deprecated since June 2015, use SceneGraph::Camera:: setProjectionMatrix() in combination with Matrix3:: projection(), Matrix4:: orthographicProjection() and Matrix4:: perspectiveProjection() instead  - Removed 
SceneGraph::AbstractCamera,SceneGraph::AbstractBasicCamera2D,SceneGraph::AbstractBasicCamera3D,SceneGraph::AbstractCamera2DandSceneGraph::AbstractCamera3Dthat were deprecated since June 2015, use SceneGraph::Camera, SceneGraph:: BasicCamera2D, SceneGraph:: BasicCamera3D, SceneGraph:: Camera2D and SceneGraph:: Camera3D instead  - Removed 
Math::Matrix::IdentityType,Math::Matrix::ZeroType,Math::Matrix::IdentityandMath::Matrix::Zerothat were deprecated since June 2015, use the Math::IdentityInit and Math:: ZeroInit tags instead  - Removed 
Magnum/ImageReference.hheader andImageReferencetype that were deprecated since July 2015, use Magnum/ImageView.h and ImageView instead  - Removed 
Magnum/Color.hheader andBasicColor3andBasiColor4types that were deprecated since August 2015, use Magnum/Math/ Color.h, Math:: Color3 and Math:: Color4 instead  - Removed 
Magnum/ColorFormat.hheader andColorFormatandColorTypeenums that were deprecated since August 2015, use Magnum/GL/ PixelFormat.h, GL:: PixelFormat and GL:: PixelType instead  - Removed Image, ImageView, Trade::
ImageData constructors, Image::setData()andImageView::setData()takingvoid*that were deprecated since August 2015, use constructors and functions taking Corrade::Containers:: Array / Corrade:: Containers:: ArrayView instead  
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
- Completely removed NaCl support (see https:/
/ blog.chromium.org/ 2017/ 05/ goodbye-pnacl-hello-webassembly.html, mosra/ magnum#198)  - Dropped support for the old MinGW32 (only MinGW-w64 is supported now) (see mosra/
magnum#46  - Bumped minimal CMake version to 2.8.12
 - Removed support for macOS 10.8 and older
 - Dropped the 
compatibilitybranch and all support for MSVC 2013 and GCC < 4.7 
New features
- MSVC 2015 and MSVC 2017 support in 
masterbranch (see mosra/magnum#96, mosra/ magnum#209)  - ANGLE ES2/ES3 support, ability to create desktop GLES contexts on Windows
 - Windows Phone/Store support via ANGLE
 - iOS support (see mosra/
magnum#82)  - WebAssembly support when building for Emscripten (see also mosra/
magnum-bootstrap#11)  - WebGL 2.0 support
 - New OpenGL extension support:
- EXT_
draw_ buffers ES2 extension  - EXT_
sRGB_ write_ control ES extension  - NV_
polygon_ mode ES extension  - KHR_
blend_ equation_ advanced, KHR_ blend_ equation_ advanced_ coherent desktop and ES extensions  - ANDROID_
extension_ pack_ es31a ES3 extension, which includes:  - NV_
shader_ noperspective_ interpolation ES3 extension  - EXT_
texture_ compression_ s3tc desktop and ES extension, WEBGL_ compressed_ texture_ s3tc WebGL extension  - KHR_
texture_ compression_ astc_ ldr, KHR_ texture_ compression_ astc_ hdr desktop and ES extension  - EXT_
unpack_ subimage and NV_ pack_ subimage ES2 extensions  - ARB_
uniform_ buffer_ object and its ES3/WebGL2 counterpart, except for data layout queries  - ARB_
texture_ barrier  - ARB_
shader_ storage_ buffer_ object and its ES3.1 counterpart  - ARB_
compute_ shader and its ES3.1 counterpart  - ARB_
shader_ image_ load_ store and its ES3.1 counterpart  - KHR_
no_ error desktop and ES extension  - EXT_
shader_ framebuffer_ fetch, ARM_ shader_ framebuffer_ fetch and ARM_ shader_ framebuffer_ fetch_ depth_ stencil (partial support)  - ARB_
transform_ feedback2, ARB_ transform_ feedback3, AMD_ transform_ feedback3_ lines_ triangles, ARB_ transform_ feedback_ overflow_ query desktop extension and their ES3 counterparts, if applicable (see mosra/ magnum#53)  
 - EXT_
 - Compressed image support:
- Added CompressedPixelFormat enum, CompressedImage, CompressedImageView and CompressedBufferImage classes
 - Added *Texture::
setCompressedImage(), *Texture:: setCompressedSubImage() and Texture:: compressedImage() functions  - Added Renderer::
Hint:: TextureCompression enum value  
 - Ability to pass arguments to engine startup via command-line and environment variables:
- The engine now prints what driver workarounds are enabled and gives the user an ability to disable them via 
--magnum-disable-workarounds - It's possible to disable OpenGL extensions to work around driver bugs using 
--magnum-disable-extensions - It's possible to control amount of log output on engine startup via 
--magnum-log 
 - The engine now prints what driver workarounds are enabled and gives the user an ability to disable them via 
 - Published OpenGL test setup code to a new OpenGLTester library and added GPU time benchmarking to it
 - Added PixelStorage class, tracking OpenGL pixel storage state and applying it prior to read and upload of image data (see mosra/
magnum#104)  - Added NoCreate tag to control initialization of GL object classes
 - Added templated version of Buffer::
map*() functions  - New 
BUILD_MULTITHREADEDCMake option and a correspondingMAGNUM_BUILD_MULTITHREADEDCMake variable and preprocessor define - Added Framebuffer::
detach() as a conunterpart to all the attach*() functions  - Added Framebuffer::
attachLayeredTexture() for layered texture attachments  - Added AbstractFramebuffer::
clearDepth(), AbstractFramebuffer:: clearStencil(), AbstractFramebuffer:: clearStencil(), DefaultFramebuffer:: clearColor(), Framebuffer:: clearColor()  - Added {Compressed,}BufferImage::
release() and an ability to create {Compressed,}BufferImage from an existing Buffer  - New Buffer::
mapRead() convenience alternatives to Buffer:: map() that return constpointer and implicitly map as read-only - Implemented Renderer::
setMemoryBarrier() and Renderer:: setMemoryBarrierByRegion()  - Added isVersionES() utility
 - Added Context::
isCoreProfile()  - Added TransformFeedback::
maxVertexStreams() limit query  
Audio library
- Ported to Emscripten (see mosra/
magnum#216  - Added Audio::
Source:: position(), Audio:: Source:: velocity(), Audio:: Source:: isRelative(), Audio:: Source:: gain(), Audio:: Source:: minGain(), Audio:: Source:: maxGain(), Audio:: Source:: referenceDistance(), Audio:: Source:: rolloffFactor(), Audio:: Source:: maxDistance(), Audio:: Source:: direction(), Audio:: Source:: innerConeAngle(), Audio:: Source:: outerConeAngle(), Audio:: Source:: outerConeGain(), Audio:: Source:: pitch() getters (see mosra/ magnum#107)  - Added Audio::
Renderer:: listenerPosition(), Audio:: Renderer:: listenerOrientation(), Audio:: Renderer:: listenerVelocity(), Audio:: Renderer:: listenerGain(), Audio:: Renderer:: dopplerFactor(), Audio:: Renderer:: speedOfSound(), Audio:: Renderer:: distanceModel() getters (see mosra/ magnum#107)  - Added debug operator for Audio::
Renderer:: DistanceModel  - Added Audio::
Playable, Audio:: Listener scene graph features and Audio:: PlayableGroup feature group (see mosra/ magnum#110, mosra/ magnum#116)  - New namespace Audio::
Extensions for OpenAL extensions, similar to Extensions for OpenGL (see mosra/ magnum#111)  - HRTF support through Audio::
Context:: Configuration:: setHrtf(), Audio:: Context:: isHrtfEnabled(), Audio:: Context:: hrtfStatus() (see mosra/ magnum#121)  - Floating-point audio support in Audio::
Buffer  - WavAudioImporter plugin now supports more formats, is more flexible and gives better errors (see mosra/
magnum#174, mosra/ magnum#175, mosra/ magnum#176, mosra/ magnum#177, mosra/ magnum#179)  - New magnum-al-info utility, available for all desktop platforms and Emscripten
 
DebugTools library
- Added DebugTools::
bufferData(), DebugTools:: bufferSubData() and DebugTools:: textureSubImage() debugging helpers to emulate missing functionality on OpenGL ES  - New DebugTools::
CompareImage class for fuzzy image comparison in Corrade:: TestSuite  
Math library
- New Math::
Bezier class for handling N-dimensional M-order Bézier curves (see mosra/ magnum#165)  - New Math::
Frustum class and Math::Geometry::Intersection::pointFrustum(),Math::Geometry::Intersection::boxFrustum()functions (see mosra/magnum#185  - New Math::
Half class, Math:: Literals:: HalfLiterals:: operator""_h literal and Math:: packHalf() and Math:: unpackHalf() functions  - New Math::
Color3:: fromSrgb(), Math:: Color3:: toSrgb(), Math:: Color4:: fromSrgbAlpha(), Math:: Color4:: toSrgbAlpha()  - 8-bit and float RGB, RGBA, sRGB and sRGBA literals in Math::
Literals namespace  - Added Math::
Color*:: fromXyz(), Math:: Color*:: toXyz(), Math:: xyYToXyz() and Math:: xyzToXyY()  - New Math::
pack() and Math:: unpack() functions for (un)packing floats to an integral range with given number of bits  - Implemented Math::
sclerp() for dual quaternions (see mosra/ magnum#114, mosra/ magnum#117, mosra/ magnum#118, mosra/ magnum#122  - Added Math::
sincos() for real and Math:: Dual numbers  - Added Math::
clamp() taking three vectors  - Added Math::
min() / Math:: max() taking a vector and a scalar  - Added Math::
min(), Math:: max() and Math:: minmax() for value ranges (see mosra/ magnum#193)  - Added Math::
pow(), Math:: log() and Math:: exp()  - Added Math::
Algorithms:: qr(), Math:: Algorithms:: gaussJordanInverted(), Math:: Algorithms:: kahanSum()  - Added 
Math::Geometry::Distance::pointPlane(),Math::Geometry::Distance::pointPlaneScaled(),Math::Geometry::Distance::pointPlaneNormalized()functions - Added Math::
Range:: contains() and Math:: join() to join two ranges  - Ability to convert Math::
Complex, Math:: DualComplex, Math:: Quaternion, Math:: DualQuaternion, Math:: Color3, Math:: Color4 and Math:: Range classes from/to external representation  - Ability to construct Math::
Dual, Math:: Complex and Math:: Quaternion from a different underlying type  - Added Math::
ZeroInit, Math:: NoInit, Math:: IdentityInit tags to control initialization of all math classes  - Added 
Math::lerp(const Vector<size, T>&, const Vector<size, T>&, const BoolVector<size>&) - Added Math::
Vector:: flipped(), Math:: RectangularMatrix:: flippedCols(), Math:: RectangularMatrix:: flippedRows()  - Added Math::
TypeTraits:: name() and Math:: TypeTraits:: equalsZero()  - Added Math::
RectangularMatrix:: setRow()  - Ability to multiply and divide Math::
Dual with a real number  - Ability to access Math::
Dual members via reference  - Ability to construct Math::
DualQuaternion from dual vector and scalar  - Ability to save and restore Deg and Rad from Corrade::
Utility:: Configuration  - Explicit bool conversion for 
Math::BoolVector(see mosra/magnum#182)  - Component-wise comparison for Math::
RectangularMatrix  - Ability to construct Math::
RectangularMatrix and derived classes with one value for all components  
Platform libraries
- New Platform::
GlfwApplication class (see mosra/ magnum#141, mosra/ magnum#160, mosra/ magnum-bootstrap#6)  - Text input support in Platform::
Sdl2Application and Platform:: GlfwApplication (see mosra/ magnum#129)  - Added 
Platform::WindowlessWindowsEglApplicationand Platform::WindowlessIosApplication for ANGLE and iOS  - New Platform::
WindowlessEglApplication that works on headless NVidia, Mesa drivers and Emscripten (see mosra/ magnum#133)  - New Platform::
Windowless*Context classes that manage OpenGL context to make threaded context creation possible  - Ported magnum-info to Emscripten
 - First-class support for scroll events in Platform::
Sdl2Application:: MouseScrollEvent (see mosra/ magnum#157)  - Added Platform::
Sdl2Application:: MouseEvent:: clickCount()  - Added Platform::
Sdl2Application:: multiGestureEvent()  - Exposing key repeat in Platform::
*Application:: KeyEvent:: isRepeated() (see mosra/ magnum#161, mosra/ magnum#162)  - Added Platform::
Sdl2Application:: setMinimalLoopPeriod(), which, along with Platform:: Sdl2Application:: setSwapInterval() replaces Timeline::setMinimalFrameTime() - Added Platform::
Sdl2Application:: window() and Platform:: GlfwApplication:: window() to access the underlying window handle  - Added Platform::
Sdl2Application:: tickEvent()  - Added Platform::
Context:: tryCreate(), which allows the context to be destructed and created again in case the version is not what the application wants (as opposed to just aborting the application) (see mosra/ magnum#105)  - Added 
Platform::Sdl2Application::Configuration::setSRGBCapable() - Added Platform::
Sdl2Application:: Configuration:: WindowFlag:: Borderless and Platform::Sdl2Application::Configuration::WindowFlag::AllowHighDpifor iOS and macOS - Added Platform::
Windowless*Application:: Configuration:: setFlags() with Flag:: Debug  - magnum-info now accepts 
--shortand--extension-stringsoptions - Added Platform::
Sdl2Application:: windowSize(), Platform:: GlfwApplication:: windowSize()  - Extended Platform::
Sdl2Application:: KeyEvent:: Key to be consistent with Platform:: GlfwApplication  - Added modifier keys to Platform::
*Application:: KeyEvent:: Key  - Added Platform::
Sdl2Application:: InputEvent:: Modifier:: Super to be consistent with Platform:: GlfwApplication (see mosra/ magnum#159)  - Added Platform::
*Application:: KeyEvent:: keyName()  - It's now possible to iterate main loop manually using Platform::
Sdl2Application:: mainLoopIteration()  - Ability to pass command-line arguments to Emscripten browser apps, see Platform::
Sdl2Application and Platform:: WindowlessEglApplication for more information  
Primitives library
- New Primitives::
axis2D() and Primitives:: axis3D() primitives  
Shaders library
Text library
- New Text::
AbstractFont:: ascent() and Text:: AbstractFont:: descent() font properties  
Trade library
- New magnum-imageconverter utility
 - Initial implementation of Trade::
CameraData and Trade:: LightData  - Vertex color support in 
Trade::MeshData2DandTrade::MeshData3D - Trade::
AbstractImageConverter member functions were changed to non- constto make implementation of complex converter plugins possible - New 
Trade::AbstractImageConverter::exportToCompressedImage()plugin interface andTrade::AbstractImageConverter::exportToData(),Trade::AbstractImageConverter::exportToFile()taking CompressedImageView as a parameter - Providing access to plugin manager in Trade::
AbstractImporter, Trade:: AbstractImageConverter and Audio:: AbstractImporter plugin APIs now have access to the plugin manager in order to be able to load other plugins  - Trade::
ImageData now handles both compressed and uncompressed images, Trade:: AbstractImageConverter is able to take it and then delegate to proper function based on whether the image is commpressed or not  - Trade::
AbstractImporter and all Trade::*Dataclasses now provide memberimporterState()functions allowing the user to access importer-specific state - Added Trade::
AbstractImporter:: openState() (see mosra/ magnum#225)  - magnum-distancefieldconverter now uses AnyImageConverter by default
 - TgaImporter sets proper PixelStorage alignment if rows are not four-byte aligned
 - TgaImageConverter now properly handles PixelStorage parameters
 
Changes and improvements
- Functionality that is not available on WebGL (like debug output etc.) is not present in WebGL builds to reduce compiled code size
 - The Mesh class now stores a copy of Buffer instance instead of reference, meaning that you can move your buffers freely after assigning them to a mesh
 - *Texture::
setStorage() fallback implementation on OpenGL ES 2.0 and WebGL 1.0 now properly translates sized texture formats to what the drivers expect (see mosra/ magnum#214)  - TgaImporter and TgaImageConverter now consistently use RGB(A) on all platforms and don't require BGR(A) on desktop
 - Ignoring 
"No errors."message produced by GLSL compiler/linker on Intel Windows drivers. - *Texture::
image() and *Framebuffer:: read() now reallocate image data only if needed, for both Image and BufferImage types  - R-value Image* no longer restricts conversion to ImageView as it is a valid use case (for example passing output from Framebuffer::
read() directly to Trade::AbstractImageConverter::exportToFile()) - It's no longer possible to call Image*::
data() on r-value instances as that would cause accessing freed data. Use Image:: release() instead.  - Buffer::
map() now returns Corrade:: Containers:: ArrayView instead of a plain pointer for better security  - Improved Context::
resetState() to better handle corner cases with VAOs  - Graceful handling of broken GL contexts
 - Behavior of Version::
GLES200 and upwards on desktop OpenGL is changed to request an ES dialect of GLSL when used in Shader (instead of a particular desktop GL version that supports given ES version), looks for ARB_ ES2_ compatibility and others (instead of checking for a particular desktop GL version that supports given ES version)  - Binding some default VAO in case the engine is running on core profile with ARB_
vertex_ array_ object disabled  - It's now possible to create ImageView with 
nullptrdata (for example for old-style texture allocation using Texture::setImage())  - Various workarounds to make the engine working better on SVGA3D drivers (VMWare guest)
 - Various updates and code modernization (see mosra/
magnum#200)  
Math library
- Double types are no longer restricted to just desktop GL builds, all related types also work on ES and WebGL builds
 - Default-constructed Color4 has zero alpha now instead of fully opaque black
 - Proper implementation of Math::
Vector:: isZero() for integers  - Math::
Matrix4:: transformPoint() now properly uses the perspective divide from projection matrices  - Updated Math::
TypeTraits fuzzy comparison epsilon values for long doubleanddouble - Math::
Matrix4:: perspectiveProjection() now supports infinite far plane  - Math::
pow() now works for both vectors and scalars  - Math::
Vector:: minmax() now works on arbitrary vectors instead of just Math:: Vector2  
Platform library
- Requesting core OpenGL context by default in Platform::
WindowlessGlxApplication and Platform:: Sdl2Application. On binary NVidia, AMD and Windows Intel drivers this causes the context to be stuck on OpenGL 3.1, in which case the context is destroyed and old-style forward-compatible context is requested instead.  - Platform::
Sdl2Application now leaves windows positioning on the system instead of forcing the window to be centered  - Platform::
Sdl2Application now shows the window only once the GL context is fully created to avoid flickering  
Shaders library
Shaders::Flatnow sets default color to white only in textured versionShaders::Phonggained the ability to have both color and textureShaders::Phongis now able to do alpha-masking (see mosra/magnum#112, mosra/ magnum-examples#29) 
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(). Thefind_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_TESTSCMake option) - Ability to override the implicit plugin directory using a 
MAGNUM_PLUGINS_DIRCMake cache variable - Ability to override deploy directory (used for example by Emscripten) using a 
MAGNUM_DEPLOY_PREFIXCMake 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_RPATHis 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_PICCMake option - Fixed 
FindSDL2.cmakemodule to work out-of-the-box on Windows and macOS (see mosra/magnum#166)  - Fixed 
FindSDL2.cmaketo link to EGL when targeting GLES (see mosra/magnum-examples#9)  - Bundling a patched version of 
FindOpenAL.cmaketo make it working on Emscripten - Fixed 
EMSCRIPTENenvironment variable handling in Emscripten toolchains (see mosra/toolchains#2, mosra/ toolchains#3)  
Bug fixes
- Wrapping mode for CubeMapTexture is now correctly two-dimensional instead of three-dimensional, wrapping mode for TextureNDArray is now correctly N-dimensional instead of N+1
 - Fixed WebGL context creation on Internet Explorer, it claims to have version 0.94
 - Fixed random browser-specific issues by avoiding the use of XHTML in Emscripten builds
 - ObjImporter plugin now opens the files as binary to avoid line ending issues
 - Various compatibility updates to the Shaders library
 - Updates to OpenGL tests to work better on non-NVidia cards
 - Various fixes for OpenGL object label queries on AMD drivers
 - Fixed 
TextureTools::distanceField()on 3.0 <= GL < 3.2 - Fixed driver crash on AMD with 
TextureTools::distanceField() - Framebuffer::
attachCubeMapTexture() incorrectly behaved as a layered attachment (see mosra/ magnum#123)  - Fixed object label queries using the EXT_
debug_ label extension  - EXT_
direct_ state_ access function was accidentally used in ARB_ direct_ state_ access code path, causing crashes on Mesa  - Properly export Framebuffer::
DrawAttachment to avoid linker failures on Windows  - Fixed Framebuffer attachments on GLES2 drivers w/o separate read/draw bindings (see mosra/
magnum#204)  - Fixed Framebuffer binding on WebGL (see mosra/
magnum#134)  - On Emscripten, Platform::
Sdl2Application was by default rendering a 800x600 canvas to an area of 640x480 pixels, causing severe aliasing. Canvas is now by default sized to 640x480 to match the default CSS style.  - Platform::
WindowlessWglApplication is fixed to allow the GL context to be created and destroyed multiple times during application run  - SceneGraph::
Camera now works properly with Double underlying type  - It's now possible to delete a running SceneGraph::
Animable  - Text::
AbstractLayouter has now a virtual destructor to avoid leaking its subclasses  - Fixed Trade::
ObjImporter on Android  - Fixed assertion when using DebugTools::
ObjectRenderer  - Fixed appearance of 
Primitives::Cylinder::solid()andPrimitives::Circle::solid()(see mosra/magnum#197, mosra/ magnum#220)  - Fixed a possible OOB access when reading Math::
Vector / Math:: RectangularMatrix from Corrade:: Utility:: Configuration  - Fixed unfortunate interaction of VAOs and index buffers on platforms without direct state access
 - Fixed resetting a bit in 
Math::BoolVector::set()(see mosra/magnum#208, [mosra/magnum#  - Audio::
Context:: hrtfSpecifierString() was crashing on systems supporting only ALC_ SOFTX_ HRTF and not ALC_ SOFT_ HRTF  - Fixed bad interaction of builtin OpenGL headers and Qt on macOS (see mosra/
magnum#212)  - Fixed building for Android with standard build systems (see mosra/
magnum#131)  - Fixed building of WGL context library (see mosra/
magnum#137)  - Various compilation warning/error fixes on various compilers (see mosra/
magnum#100, mosra/ magnum#109, mosra/ magnum#138, mosra/ magnum#189, mosra/ magnum#190)  
Deprecated APIs
Timeline::setMinimalFrameTime()is deprecated, use Platform::*Application:: setSwapInterval() and/or Platform:: *Application:: setMinimalLoopPeriod() instead SceneGraph::Camera2D::setProjection(),SceneGraph::Camera3D::setOrthographic()andSceneGraph::Camera3D::setPerspective()are deprecated, use SceneGraph::Camera:: setProjectionMatrix() in combination with Matrix3:: projection(), Matrix4:: orthographicProjection() and Matrix4:: perspectiveProjection() instead SceneGraph::AbstractCamera,SceneGraph::AbstractBasicCamera2D,SceneGraph::AbstractBasicCamera3D,SceneGraph::AbstractCamera2DandSceneGraph::AbstractCamera3Dare deprecated, use SceneGraph::Camera, SceneGraph:: BasicCamera2D, SceneGraph:: BasicCamera3D, SceneGraph:: Camera2D and SceneGraph:: Camera3D instead Math::Matrix::IdentityType,Math::Matrix::ZeroType,Math::Matrix::IdentityandMath::Matrix::Zeroare deprecated, use the new Math::IdentityInit and Math:: ZeroInit tags instead AbstractShaderProgram::setUniform(Int, UnsignedInt, const T*)is deprecated, use AbstractShaderProgram::setUniform(Int, Containers:: ArrayView<const T>) instead Magnum/ImageReference.hheader andImageReferencetype is deprecated, use Magnum/ImageView.h and ImageView instead Magnum/Color.hheader andBasicColor3andBasiColor4types are deprecated, use Magnum/Math/ Color.h, Math:: Color3 and Math:: Color4 instead Magnum/ColorFormat.hheader andColorFormatandColorTypeenums are deprecated, use Magnum/PixelFormat.h, PixelFormat and PixelType instead - Image, ImageView, Trade::
ImageData constructors, Image::setData()andImageView::setData()takingvoid*are deprecated, use constructors and functions taking Corrade::Containers:: Array / Corrade:: Containers:: ArrayView instead  - Templated Buffer:.data(), Buffer::
subData() and Buffer:: map() are deprecated, use the non-templated versions in combination with Corrade:: Containers:: arrayCast() instead (see mosra/ magnum#213)  CubeMapTexture::Coordinateenum is deprecated, use CubeMapCoordinate instead- Context::
current() and Audio:: Context:: current() returning a pointer is deprecated, it's returning a reference now and asserts that a context exists. Use Context:: hasCurrent() and Audio:: Context:: hasCurrent() to check for context presence.  - Angle literals available directly in the Magnum namespace are deprecated, import the Math::
Literals namespace instead  Platform::Sdl2Application::MouseEvent::Button::WheelUp,Platform::Sdl2Application::MouseEvent::Button::WheelDown,Platform::GlfwApplication::MouseEvent::Button::WheelUpandPlatform::GlfwApplication::MouseEvent::Button::WheelDownmouse events are deprecated, use Platform::Sdl2Application:: mouseScrollEvent() / Platform:: GlfwApplication:: mouseScrollEvent() and Platform:: Sdl2Application:: MouseScrollEvent / Platform:: GlfwApplication:: MouseScrollEvent instead - Platform::
*Application:: *Application() and Platform:: Windowless*Application:: Windowless*Application() constructors taking nullptrare deprecated, use constructors taking NoCreateT instead to create an application without creating OpenGL context Math::Color*fromHSV()andMath::Color*toHSV()are deprecated, use Math::Color*:: fromHsv() and Math:: Color*:: toHsv() instead Math::normalize()andMath::denormalize()had confusing naming and thus are deprecated, use Math::pack() and Math:: unpack() from the Magnum/ Math/ Packing.h header instead Trade::MeshData2DandTrade::MeshData3Dconstructors without thecolorsparameter are deprecated, use the full ones insteadShaders::Generic::Colorvertex attribute implicit constructor is deprecated, use a constructor with explicit component count instead- The bundled std::
optional implementation was causing serious conflicts with C++17 and it's now deprecated in favor of Corrade:: Containers:: Optional. (Deprecated) aliases and conversion operators are provided for backwards compatibility.  Audio::Context::hrtfSpecifier()is deprecated, use Audio::Context:: hrtfSpecifierString() instead 
Potential compatibility breakages, removed APIs
- The 
Math::Geometry::DistanceandMath::Geometry::Intersectionclasses are now a namespace (might breakusingdeclarations, but otherwise it's fully source-compatible) - Removed 
Context::majorVersion()andContext::minorVersion()functions, use GL::Context:: version() instead  - Removed deprecated 
Magnum/DebugMarker.hheader, useMagnum/DebugOutput.hand DebugMessage class instead - Removed deprecated 
*Buffervalues from FramebufferBlit, use values without theBuffersuffix - Removed deprecated list-argument functions taking pointers from Audio and SceneGraph libraries, use lists of references instead
 - Removed deprecated texture unit enums from Shaders library, use dedicated texture setters instead
 - Removed deprecated 
*TexturemaxLayers()functions, use Shader::maxCombinedTextureImageUnits() instead  - Removed deprecated 
MeshTools::combineIndexedArrays(), MeshTools::compressIndices(), MeshTools:: interleave() and MeshTools::removeDuplicates()overloads, use the general ones instead - Removed deprecated 
Mesh*set*{Range,Count}()functions, use Mesh*::setCount() and MeshView::setIndexRange()instead - Removed deprecated parameterless 
GL::Mesh::draw()overload, use the one with explicit shader parameter instead - Removed deprecated 
Context::Flag::Robustnessenum value, use Context::Flag:: RobustAccess instead  - Removed deprecated 
Texture::Targetenum, use dedicated Texture, TextureArray, RectangleTexture and MultisampleTexture classes instead - Removed deprecated Resource conversion operator, use explicit conversion instead
 - Removed deprecated 
Framebuffer::attachTexture*D()overloads, use one of Framebuffer::attachTexture() or Framebuffer:: attachTextureLayer() overloads instead.  - Removed 
SceneGraph::Camera3D::near()andSceneGraph::Camera3D::far()getters, because they can't be provided anymore with current more general implementation. THe user is advised to cache the values on application side if they are really needed. - Removed 
AbstractImageclass andMagnum/AbstractImage.hheader, its functionality is present in the Image* classes directly - Removed 
Image::dataSize()function as it has ambiguous meaning in regards to recently added features, use Image::dataProperties() instead  - The 
FindGLFW.cmakenow prefers absolute includes (i.e.GLFW/glfw3.hinstead of justglfw3.h). The Platform::GlfwApplication now depends on this, so be sure to update your copy to avoid build issues.  
Performance improvements
- Reduced size of and number of allocations in Mesh class.
 
Documentation
- New documentation theme powered by m.css and related massive updates of everything (see mosra/
magnum#113)  - Explicit list of extensions that are available in WebGL builds
 - New page explaining OpenGL wrapper layer
 - Documented extra CMake modules
 - The Downloading and building documentation now prefers package installation instead of manual build
 - Clarified behavior of Math::
Matrix4:: lookAt() (see mosra/ magnum#127)  - Documented how to use Vcpkg packages
 - Updated links to OpenGL API documentation (see mosra/
magnum#196  - Various other documentation updates (see mosra/
magnum#94, mosra/ magnum#135, mosra/ magnum#170, mosra/ magnum-plugins#17, mosra/ magnum-bootstrap#8)  
2015.05
Released 2015-05-09, tagged as v2015.05. See the release announcement for a high-level overview.
New features
- Proper extension loading for OpenGL ES 2.0, 3.0 and 3.1 using flextGL.
 - Enabled already implemented functionality on OpenGL ES 3.1.
 - Support for new OpenGL functionality:
- Support for ARB_
direct_ state_ acccess (OpenGL 4.5) everywhere except in Mesh.  - Support for ARB_
conditional_ render_ inverted (OpenGL 4.5) in SampleQuery. - Support for ARB_
get_ texture_ sub_ image (OpenGL 4.5) in *Texture::subImage(). - Support for EXT_
transform_ feedback, ARB_ transform_ feedback2 (OpenGL 3.0, 4.0, OpenGL ES 3.0) in new TransformFeedbackclass, addedRenderer::Feature::RasterizerDiscard. - Support for ARB_
robustness_ isolation in Renderer::graphicsResetStatus(). - Support for ARB_
framebuffer_ sRGB (OpenGL 3.0) in Renderer::Feature::FramebufferSRGB - Support for OES_
texture_ npot ES extension.  - Support for debug groups from KHR_
debug (OpenGL 4.5) and EXT_ debug_ marker extensions in DebugGroupclass. 
 - Support for ARB_
 - Added 
CubeMapTexture::*image()that returns all six faces together. - Added 
Primitives::Cube::solidStrip(). - Added 
AbstractShaderProgram::attachShaders()as a list-based complement toShader::compile()andAbstractShaderProgram::link(). - Separated 
Renderer::setFeature()into shorterRenderer::enable()andRenderer::disable(). - Added 
tau(),piHalf(),e(),nan()andinf()to Math::Constants.  - Added Math::
Matrix[34]:: shearing*().  - Added Math::
Matrix4:: lookAt() (see mosra/ magnum#88).  - Added Math::
Vector:: pad().  - Added Math::
div().  - Using range-based-for to traverse object children and features in SceneGraph and screens in Platform::
ScreenedApplication.  - Convenience overload for 
*Framebuffer::read()and*Texture::image()that returns the queried image by value instead of as parameter. - Added 
Buffer::uniformOffsetAlignment()andMesh::maxElementIndex()limit queries. - Added 
AbstractTexture::unbind()for unbinding range of texture units. - Added SceneGraph::
AbstractObject:: addFeature() and SceneGraph:: Object:: addChild() functions (see mosra/ magnum#86).  - VSync support in Platform::
Sdl2Application.  - Added 
Platform::*Contextlibraries for users which want to use custom windowing toolkits instead of the ones provided. - Improved documentation about Shaders namespace, added sample image for each.
 
Changes
- Using flextGL instead of 
glLoadGenfor OpenGL extension loading - Platform::
Sdl2Application now tries to create core context on all platforms, not just OSX (see mosra/ magnum#80).  Buffer::bind(),Buffer::unbind()andBuffer::Targetis now used for indexed buffer binding only.- Moved static binary operations from Math classes into free functions for more convenient usage (see mosra/
magnum#74).  - Better algorithm for comparing floating-point values.
 - Ensuring that all OpenGL objects are properly created before using them.
 - Using 
const charinstead ofconst unsigned charfor raw binary data. - Removed annoying restriction when adding reference-counted resources to ResourceManager.
 - Extension querying cleanup:
- Removed APPLE_
flush_ buffer_ range extension.  - Replaced APPLE_
vertex_ array_ object with ARB_ vertex_ array_ object.  - Replaced NV_
half_ float with ARB_ half_ float_ vertex.  - Replaced EXT_
framebuffer_ sRGB with ARB_ framebuffer_ sRGB.  
 - Removed APPLE_
 - Documentation cleanup, fixes and improvements.
 
Build system
- CMake now always installs 
FindMagnum.cmaketo library-specific location, making it usable without providing own copy of the file in depending projects. TheWITH_FIND_MODULEoption 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
- Fixed 
TextureTools::distanceField()to work in GLSL < 4.20 (see mosra/magnum#62).  - Fixed 
Shaders::MeshVisualizerto work in GLSL ES. - Fixed 
Shaders::*Vectoron Intel GPUs. - Fixed assertion on contexts without default framebuffer (see mosra/
magnum#93).  - Fixed cases where shader would use extension that is not advertised by the driver.
 - Properly handle case where glVertexArrayVertexAttribDivisorEXT() is not available in the driver (see mosra/
magnum#77).  - Removed superfluous level argument from 
Framebuffer::attachTexture*()overloads for texture types that don't support mipmapping. - Proper no-op fallback for 
*Framebuffer::invalidate()on platforms where the extensions is not supported (see mosra/magnum#63).  - Fixed garbage characters in shader compilation output (see mosra/
magnum#87).  - Fixed memory corruption on MSVC 2013 (see mosra/
magnum#70).  - Fixed potential memory corruption errors with static build (see mosra/
magnum#79).  - Fixed aspect-ratio-corrected projection with inverted Y in SceneGraph::
Camera*D.  - Fixed wheel direction in Platform::
Sdl2Application (see mosra/ magnum#68).  - Fixed bogus version check in Platform::
WindowlessCglApplication (see mosra/ magnum#92)  - Fixed matrix to quaternion conversion algorithm.
 - Two different headers in Primitives had the same include guard by accident (see mosra/
magnum#72)  - Various compilation fixes on various platforms (see mosra/
magnum#71)  
Deprecated APIs
- The 
Magnum/Query.hheader is deprecated, use one ofMagnum/PrimitiveQuery.h,Magnum/SampleQuery.horMagnum/TimeQuery.hinstead. - Using 
Buffer::Targetas constructor orBuffer::setTargetHint()parameter is deprecated, useBuffer::TargetHintinstead. - The 
SceneGraph::TransformationTypeenum is depracted, use separate<transform>()and<transform>Local()variants instead. SceneGraph::AbstractObject::hasFeatures(),firstFeature(),lastFeature(),SceneGraph::Object::hasChildren(),firstChild()andlastChild()are deprecated, use methods on linked list returned by SceneGraph::AbstractObject:: features() and SceneGraph:: Object:: children() instead. Platform::ScreenedApplication::frontScreen()andPlatform::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, useAbstractShaderProgram::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()andMath::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::ReadDrawenum value is deprecated, use separateFramebufferTarget::ReadandFramebufferTarget::Drawvalues instead. CubeMapTexture::imageSize()with explicit face parameter is deprecated, use overload that returns one value for all faces instead.- The 
Magnum/DebugMessage.hheader is deprecated, useMagnum/DebugOutput.hinstead (see mosra/magnum#89)  - The 
DebugMessage::Severityenum is deprecated, useDebugOutput::Severityinstead. - The 
DebugMessage::Callbacktypedef,DebugMessage::setCallback()andDebugMessage::setDefaultCallback()function is deprecated, useDebugOutput::Callback,DebugOutput::setCallback()andDebugOutput::setDefaultCallback()instead. - The 
DebugMessage::maxLoggedMessages()andDebugMessage::maxMessageLength()functions are deprecated, useDebugOutput::maxLoggedMessages()andDebugOutput::maxMessageLength()instead. - The 
DebugMessage::setEnabled()function and related values fromDebugMessage::Sourceenum are deprecated, useDebugOutput::setEnabled()along withDebugOutput::Source,DebugOutput::TypeandDebugOutput::Severityinstead. - Parameter-less 
*Queryconstructor 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::Primitiveenum, useMeshPrimitiveinstead. - Removed deprecated 
Sampler::maxAnisotropy()function, useSampler::maxMaxAnisotropy()instead. - Removed deprecated 
Math::Geometry::Rectangleclass, use Math::Range instead.  - Removed deprecated 
SceneGraph::Animable::group()function, use SceneGraph::Animable:: animables() instead.  - Removed deprecated 
Shaders/magnumShadersResourceImport.hppfile, useShaders/resourceImport.hppinstead. - Removed deprecated 
Text::TextRendereralias, useText::Rendererinstead. - Removed long-deprecated 
BufferImage::setData()overload, use the other one instead. 
 - Removed deprecated ability to use relative includes (e.g. 
 
Performance improvements
- Faster vector multiplication in Math::
Quaternion.  - Saved one swizzle in Math::
cross().  - Allocation-free overloads of functions that took 
std::stringjust 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 
compatibilitybranch (see mosra/magnum#18)  
New features
- Experimental Android support, see building documentation for more information
 - Initial implementation of Platform::
AndroidApplication class  - Platform::
WindowlessWglApplication and Platform:: WindowlessCglApplication, which enable magnum-info, Distance Field conversion utility and Font conversion utility utilities on OS X and Windows. See mosra/ magnum#40 and mosra/ magnum#59.  - ObjImporter plugin, mesh import only (no materials yet)
 - Completed support of EXT_
texture_ integer, ARB_ stencil_ texturing, ARB_ texture_ rectangle, ARB_ texture_ buffer_ object, ARB_ texture_ swizzle, EXT_ texture_ sRGB_ decode extensions (and related ES extensions) and other missing parameters in *Textureclasses - Basic support for ARB_
texture_ multisample and ARB_ texture_ storage_ multisample in new MultisampleTextureclass - Instanced rendering, base vertex and base instance specification in 
MeshandMeshViewclasses;Mesh::addVertexBufferInstanced()function for adding buffers with per-instance data (see mosra/magnum#47)  - Mesh multi-draw using 
MeshView::draw() - Initial ARB_
multi_ bind support with AbstractTexture::bind() - Support for ARB_
vertex_ type_ 10f_ 11f_ 11f_ rev in AbstractShaderProgram::Attribute::DataType - New variants of 
Shader::compile()andAbstractShaderProgram::link(), allowing the driver to perform parallel compilation in multiple threads. - Added 
*Texture::maxSize()queries - MeshTools::
compile() for automagic creation of 2D and 3D meshes from imported data  - MeshTools::
interleaveInto() for interleaving data into existing buffer  Shapes::Shape::collision()function as complement toShapes::Shape::collides()Platform::GlutApplication::KeyEventfinally has more complete key support- Math::
Range:: data() function, useful when querying range values from GL  - Support for specifying context flags using 
Platform::*Application::Configuration::setFlags(), they are now also shown in magnum-info - More robust support for driver detection and driver bug workarounds. Driver can be detected using 
Context::detectedDriver(), problematic extension disabled, which is then shown in magnum-info and can be also queried usingContext::isExtensionDisabled() Context::extensionStrings()for getting list of all extension strings exposed by the driverContext::resetState()for resetting internal state tracker, allowing to use Magnum along with third-party OpenGL code (see mosra/magnum#48) - MAGNUM_
TARGET_ WEBGL CMake and preprocessor variable  
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 
Texturefunctionality into dedicatedTextureArray,MultisampleTextureandRectangleTextureclasses to make their usage less error-prone Buffer::invalidateData(),Buffer::invalidateSubData()andRenderer::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
- Avoiding unnecessary linking of the OpenGL library (see mosra/
magnum#60)  
Bug fixes
- Fixed usage with OpenGL ES 3.1 contexts (it complained about invalid version)
 - Fixed compilation of 
Shaders::MeshVisualizerunder 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()andMesh::setIndexCount()had nonintuitive behavior in some corner cases and are deprecated, use generalMesh::setCount()function insteadMeshView::setVertexRange()and four-/two-argumentMeshView::setIndexRange()are deprecated for similar reason as above, useMeshView::setCount(),MeshView::setBaseVertex()and three-/one-argumentMeshView::setIndexRange()insteadTexture::Targetenum is deprecated as the API was too error-prone, use dedicatedTextureArray,MultisampleTextureandRectangleTextureclasses insteadFramebuffer::attachTexture*D()is deprecated, use more genericFramebuffer::attachTexture()andFramebuffer::attachTextureLayer()insteadFramebufferBlit::*Bufferenum values are deprecated, use shorterFramebufferBlit::Colorand 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 MeshandBufferdirectly 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()andMeshView::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::Robustnessis deprecated, useContext::Flag::RobustAccesswhich reflects OpenGL naming better insteadTexture::maxLayers()has misleading naming and is deprecated, useShader::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()andBuffer::setSubData(), use overloads takingContainers::ArrayReferenceinstead - Removed deprecated 
Magnum/ImageFormat.hheader andImageFormat/ImageTypeenums, useMagnum/ColorFormat.hheader andColorFormat/ColorTypeenums instead - Removed deprecated 
Matrix2andMatrix2dtypedefs, use Matrix2x2 and Matrix2x2d instead - Removed deprecated 
Magnum/Swizzle.hheader andMagnum::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::*Buttonenum values, use Platform::*Application:: *Event:: buttons() function and Platform:: *Application:: *Event:: Button enum instead  Platform::Sdl2Application::Configuration::Flagenum and related functions were replaced with WindowFlag, as the name would now conflict with context flags
 - Removed deprecated raw-pointer versions of 
 
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
- MSVC 2013 support in 
compatibilitybranch - Dependency-less plugins from Magnum Plugins repository are now part of Magnum to make their usage easier, in particular the MagnumFont, MagnumFontConverter, TgaImporter, TgaImageConverter and WavAudioImporter plugins.
 - Documented state of OpenGL support, mapping between OpenGL and Magnum API, general plugin usage and added troubleshooting page for most common building and rendering issues
 - Support for horizontal and vertical text alignment and multi-line text in 
Text::Renderer(line wrapping is still left up to the user) - New Font conversion utility utility for converting between font formats (e.g. creating distance-field raster font from TTF font). Enable it with 
WITH_FONTCONVERTERCMake option (currently Linux only), seemagnum-fontconverter --helpfor more information. - Support for OpenGL object labels, debug message insertion and retrieval ( KHR_
debug, EXT_ debug_ label and EXT_ debug_ marker extensions) (see mosra/ magnum#42)  - Platform::
ScreenedApplication class allowing the users to easily use multiple independent screens in the application.  - New 1D, 2D and 3D Math::
Range class  - Added 
red(),green(),blue(),cyan(),magenta()andyellow()convenience functions to Color3 and Color4 classes - Convenience Color3ub and Color4ub typedefs
 - New 
version()utility functions for convertingVersionenum value to major/minor version number and back - Added 
release()function to Image and Trade::ImageData for releasing ownership of the data, similar to std:: unique_ptr:: release() (see mosra/ magnum#29)  *Image::dataSize()function for computing size of buffer required to store image of given size- Disallowing conversion of rvalue Image and Trade::
ImageData to ImageReference as it would result in access to deleted memory (GCC 4.8.1/Clang only)  - No-op fallback for 
*Texture::setMaxAnisotropy()in case EXT_texture_ filter_ anisotropic extension is not supported  - Added 
round(),floor()andceil()scalar/vector functions to Math namespace - Math::
minmax() and Math:: Vector2:: minmax() functions  - Modulo operations for integral Math::
Vector classes  - Ability to request context version in all windowed Platform::
*Application classes  - Mouse wheel support in 
Platform::NaClApplication::MouseEvent - No-op 
Platform::GlutApplication::keyReleaseEvent()andPlatform::NaClApplication::Configuration::setTitle()functions to preserve source compatibility with other application classes. - SceneGraph::
Drawable:: drawables() function as a non-ambiguous alternative to group() - Ability to specify background color color in 
Shaders::Vector, allowing it to use without blending enabled (fully transparent black was used previously) - New 
Shaders::Genericclass with common definitions, so you can configure mesh for the generic shader and render it with any other compatible shader - Convenience 
hasNormals(),hasTextureCoords2D()functions inTrade::MeshData2DandTrade::MeshData3D - OpenGL ES 3.0 build now shares list of vendor extensions with OpenGL ES 2.0 build (i.e. only those extensions that aren't part of ES 3.0 are present in 
Extensions) - All classes in documentation are now shown with corresponding 
#includepath 
Changes
- Preferring absolute includes instead of relative (see mosra/
magnum#36)  - The 
magnum-distancefieldutility is now named Distance Field conversion utility for consistency with other command-line utilities ImageReferenceclass 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>()returnstrueif value is nonzero (was returningtrueonly 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::Flatnow 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 
MeshViewclass - Fixed various issues with textured 
Shaders::Flatshader (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::Usageenum is deprecated to reduce header dependencies, use globalBufferUsageenum insteadMesh::Primitiveenum is deprecated to reduce header dependencies, use globalMeshPrimitiveenum insteadSampler::maxAnisotropy()is deprecated to avoid naming conflict with*Texture::setMaxAnisotropy(), useSampler::maxMaxAnisotropy()insteadMagnum::Geometry::Rectangleclass (andRectangle*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.hppheader is deprecated in favor of less verboseMagnum/Shaders/resourceImport.hppText::TextRendererclass (andText::TextRenderer2D,Text::TextRenderer3Dtypedefs) is deprecated, use less redundant nameText::Rendererinstead
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
- Various documentation updates and fixes (see mosra/
magnum#28)  
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 tosrc/Magnum,external/directory was moved tosrc/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
- Removed GLEW dependency in favor of built-in 
glLoadGen, resulting in greatly reduced compilation time and less compatibility issues. The base library thus now depends only on Corrade and OpenGL libraries. See mosra/magnum#11, mosra/ magnum#16, mosra/ magnum#21, mosra/ magnum#22, mosra/ magnum#23, mosra/ magnum-bootstrap#2.  
New features
- Initial Emscripten (HTML5/WebGL) port. See Platform::
Sdl2Application for detailed porting information. The examples page has now links to online Emscripten demos, see also base-emscripten branch in Magnum Bootstrap.  - Mac OS X port (thanks to Miguel Martin)
 - Math::
Vector:: isZero() and Math:: Vector2:: aspectRatio() convenience functions  - Bitwise AND, OR, XOR, bit inversion and bit shift in integral Math::
Vector classes  - Math::
MatrixMxN<T> and Math:: MatrixNxN<T> template aliases for non-square and non-transforming square matrices in Math namespace, MatrixNxN and MatrixNxNd typedefs for floatanddoublenon-transforming square matrices in root Magnum namespace. Note that template aliases are not present in GCC 4.6 builds. - Limit queries for all OpenGL objects, the information is now printed also by magnum-info utility.
 Context::isExtensionSupported()is now able to query extension availability on particular GLSL version- Using std::
unique_ptr and C++1y std:: optional for resources returned from Trade:: AbstractImporter for better usability and to avoid accidental memory leaks  - New translation-only transformation in SceneGraph supporting also purely integral coordinates, useful e.g. for UI or 2D platformers.
 - Detailed collision queries and new 
InvertedSphereshape in Shapes library - Texture support in 
Shaders::Flat - Mouse button queries in Platform::
*Application:: MouseMoveEvent  
Changes
Buffer::setData()andBuffer::setSubData()are now acceptingContainers::ArrayReferencefor 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::AbstractCamerasymbols (see mosra/magnum-bootstrap#3)  
Deprecated APIs
Matrix2andMatrix2dis deprecated, use Matrix2x2 and Matrix2x2d insteadswizzle()is deprecated, all of its functionality has been moved intoMath::swizzle()Buffer::setData()andBuffer::setSubData()overloads taking pair of data pointer and size are deprecated, useContainers::ArrayReference-basedBuffer::setData()andBuffer::setSubData()ImageFormat.hheader,ImageFormatandImageTypeenums are deprecated, useColorFormat.hheader,ColorFormatandColorTypeenums which reflect OpenGL naming better insteadPlatform::*Application::InputEvent::Modifier::*Buttonenum values are deprecated, use Platform::*Application:: *Event:: buttons() and Platform:: *Application:: *Event:: Button enum instead AbstractShaderProgram::maxSupportedVertexAttributeCount(),AbstractTexture::maxSupportedLayerCount()andSampler::maxSupportedAnisotropy()are deprecated in favor of less verboseAbstractShaderProgram::maxVertexAttributes(),AbstractTexture::maxLayers()andSampler::maxAnisotropy()
Documentation
- Fixed SceneGraph bootstrap branch name (see mosra/
magnum-bootstrap#1)  
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.