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()and- Platform::*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, use- GL::pixelSize()or- Magnum::pixelSize()instead
- PixelStorage::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()instead
- Image*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()and- Shaders::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. Use- Shaders::*Vector::bindVectorTexture(),- Shaders::Flat::bindTexture(),- Shaders::Phong::bindAmbientTexture(),- Shaders::Phong::bindDiffuseTexture(),- Shaders::Phong::bindSpecularTexture()and- Shaders::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 version
- Shaders::Phonggained the ability to have both color and texture
- Shaders::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()and- SceneGraph::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::AbstractCamera2Dand- SceneGraph::AbstractCamera3Dare deprecated, use SceneGraph::- Camera, SceneGraph:: - BasicCamera2D, SceneGraph:: - BasicCamera3D, SceneGraph:: - Camera2D and SceneGraph:: - Camera3D instead 
- Math::Matrix::IdentityType,- Math::Matrix::ZeroType,- Math::Matrix::Identityand- Math::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 and- ImageReferencetype is deprecated, use Magnum/- ImageView.h and ImageView instead 
- Magnum/Color.hheader and- BasicColor3and- BasiColor4types are deprecated, use Magnum/- Math/ - Color.h, Math:: - Color3 and Math:: - Color4 instead 
- Magnum/ColorFormat.hheader and- ColorFormatand- ColorTypeenums 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::WheelUpand- Platform::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()and- Math::Color*toHSV()are deprecated, use Math::- Color*:: - fromHsv() and Math:: - Color*:: - toHsv() instead 
- Math::normalize()and- Math::denormalize()had confusing naming and thus are deprecated, use Math::- pack() and Math:: - unpack() from the Magnum/ - Math/ - Packing.h header instead 
- Trade::MeshData2Dand- Trade::MeshData3Dconstructors without the- colorsparameter are deprecated, use the full ones instead
- Shaders::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()and- Buffer::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()and- lastChild()are deprecated, use methods on linked list returned by SceneGraph::- AbstractObject:: - features() and SceneGraph:: - Object:: - children() instead. 
- Platform::ScreenedApplication::frontScreen()and- Platform::ScreenedApplication::backScreen()are deprecated, use methods on linked list returned by Platform::- ScreenedApplication:: - screens() instead. 
- *Framebuffer::read()functions taking two vectors are deprecated, use overload taking Range2Di instead.
- The Mesh::maxVertexAttributes()function is deprecated, 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()and- Math::Vector3::cross()are deprecated, use Math::- dot(), Math:: - angle(), Math:: - lerp(), Math:: - slerp() and Math:: - cross() instead (see mosra/ - magnum#74) 
- The *Framebuffer::bind(FramebufferTarget)function is deprecated, use parameter-less*Framebuffer::bind()instead.
- The FramebufferTarget::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 to- Shapes::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 driver
- Context::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()and- Renderer::resetNotificationStrategy()functions are enabled on OpenGL ES as a no-op
- Added std::vector overload of MeshTools::combineIndexArrays()for greater runtime-usage flexibility
- Platform::Sdl2Application now defaults to non-resizable window, you can change the behavior using Platform:: Sdl2Application:: Configuration:: setWindowFlags() 
- It's now possible to import objects without materials
- More robust OpenGL version checks when creating context
- Thorough documentation review, fixes and improvements
Build system
- 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()and- Mesh::setIndexCount()had nonintuitive behavior in some corner cases and are deprecated, use general- Mesh::setCount()function instead
- MeshView::setVertexRange()and four-/two-argument- MeshView::setIndexRange()are deprecated for similar reason as above, use- MeshView::setCount(),- MeshView::setBaseVertex()and three-/one-argument- MeshView::setIndexRange()instead
- Texture::Targetenum is deprecated as the API was too error-prone, use dedicated- TextureArray,- MultisampleTextureand- RectangleTextureclasses instead
- Framebuffer::attachTexture*D()is deprecated, use more generic- Framebuffer::attachTexture()and- Framebuffer::attachTextureLayer()instead
- FramebufferBlit::*Bufferenum values are deprecated, use shorter- FramebufferBlit::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, use- Context::Flag::RobustAccesswhich reflects OpenGL naming better instead
- Texture::maxLayers()has misleading naming and is deprecated, use- Shader::maxCombinedTextureImageUnits()instead
Potential compatibility breakages, removed APIs
- All functionality deprecated in 2013.10 has been removed, namely:- Removed deprecated raw-pointer versions of Buffer::setData()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>()returns- trueif value is nonzero (was returning- trueonly 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 global- BufferUsageenum instead
- Mesh::Primitiveenum is deprecated to reduce header dependencies, use global- MeshPrimitiveenum instead
- Sampler::maxAnisotropy()is deprecated to avoid naming conflict with- *Texture::setMaxAnisotropy(), use- Sampler::maxMaxAnisotropy()instead
- Magnum::Geometry::Rectangleclass (and- Rectangle*typedefs) is deprecated, use more generic and feature-rich Math::- Range instead. 
- Platform::Sdl2Application::Configuration::setFlags()function and related enum is deprecated to avoid naming conflict in the future, use Platform::- Sdl2Application:: - Configuration:: - setWindowFlags() instead 
- SceneGraph::Animable::group()is deprecated, use non-ambiguous SceneGraph::- Animable:: - animables() instead 
- Magnum/Shaders/magnumShadersResourceImport.hppheader is deprecated in favor of less verbose- Magnum/Shaders/resourceImport.hpp
- Text::TextRendererclass (and- Text::TextRenderer2D,- Text::TextRenderer3Dtypedefs) is deprecated, use less redundant name- Text::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()and- Buffer::setSubData()are now accepting- Containers::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
- Matrix2and- Matrix2dis deprecated, use Matrix2x2 and Matrix2x2d instead
- swizzle()is deprecated, all of its functionality has been moved into- Math::swizzle()
- Buffer::setData()and- Buffer::setSubData()overloads taking pair of data pointer and size are deprecated, use- Containers::ArrayReference-based- Buffer::setData()and- Buffer::setSubData()
- ImageFormat.hheader,- ImageFormatand- ImageTypeenums are deprecated, use- ColorFormat.hheader,- ColorFormatand- ColorTypeenums which reflect OpenGL naming better instead
- Platform::*Application::InputEvent::Modifier::*Buttonenum values are deprecated, use Platform::- *Application:: - *Event:: - buttons() and Platform:: - *Application:: - *Event:: - Button enum instead 
- AbstractShaderProgram::maxSupportedVertexAttributeCount(),- AbstractTexture::maxSupportedLayerCount()and- Sampler::maxSupportedAnisotropy()are deprecated in favor of less verbose- AbstractShaderProgram::maxVertexAttributes(),- AbstractTexture::maxLayers()and- Sampler::maxAnisotropy()
Documentation
- 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.