Changelog
Contents
- 2018.04
- 2018.02
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 Crosscompiling 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(), 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 ANativeActivity
structure 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::
GlyphCache now 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
GlbImporter
for loading binary glTF files instead of proxying them toGltfImporter
plugins
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_GL
CMake 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.cmake
andFindMagnumPlugins.cmake
modules. 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) - 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
SOVERSION
to 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-log
option in version 2018.02 - Dropped Google Closure Compiler from Emscripten toolchains, it was bringing more harm than good (see mosra/
magnum#211) - Working around Emscripten issue where
-s USE_PTHREADS=1
would cause all shader sources containing Unicode characters to be truncated to empty strings. See the"emscripten-pthreads-broken-unicode-shader-sources"
workaround description and mosra/magnum#239 for details. - GL::
Attribute:: DataType:: HalfFloat was not available on WebGL 2 by mistake - A wrong code path for GL::
Framebuffer:: checkStatus() was selected on WebGL 1 by mistake - Fixed
MAGNUM_PLUGINS_DIR
variables to contain proper absolute location by default again.
Deprecated APIs
- 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::Context
class 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::GL
namespace 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::Format
is deprecated, useAudio::BufferFormat
insteadsetData()
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::IndexType
enum and theMesh::indexSize(MeshIndexType)
function is deprecated, use Magnum::MeshIndexType / GL:: MeshIndexType and meshIndexTypeSize() instead - The
GL::Mesh::indexSize()
function is deprecated, use GL::Mesh:: indexTypeSize() instead - The
Sampler
class and theSampler::Filter
,Sampler::Mipmap
,Sampler::Wrapping
,Sampler::CompareMode
,Sampler::CompareFunction
andSampler::DepthStencilMode
enums are deprecated, use GL::Sampler, SamplerFilter / GL:: SamplerFilter, SamplerMipmap / GL:: SamplerMipmap, SamplerWrapping / GL:: SamplerWrapping, GL:: SamplerCompareMode, GL:: SamplerCompareFunction and GL:: SamplerDepthStencilMode instead - Class
Primitives::Capsule2D
andPrimitives::Capsule3D
is deprecated, use Primitives::capsule2DWireframe(), Primitives:: capsule3DSolid() and Primitives:: capsule3DWireframe() free functions instead - Class
Primitives::Circle
is deprecated, use Primitives::circle2DSolid() and Primitives:: circle2DWireframe() instead - Class
Primitives::Crosshair2D
andPrimitives::Crosshair3D
is deprecated, use Primitives::crosshair2D() and Primitives:: crosshair3D() free function instead - Class
Primitives::Cube
is deprecated, use Primitives::cubeSolid(), Primitives:: cubeSolidStrip() and Primitives:: cubeWireframe() free functions instead - Class
Primitives::Cylinder
is deprecated, use Primitives::cylinderSolid(), Primitives:: cylinderWireframe() free functions instead - Class
Primitives::Icosphere
is deprecated, use the Primitives::icosphereSolid() free function instead - Class
Primitives::Plane
is deprecated, use Primitives::planeSolid() and Primitives:: planeWireframe() free functions instead - Class
Primitives::Square
is deprecated, use Primitives::squareSolid() and Primitives:: squareWireframe() free functions instead - Class
Primitives::UVSphere
is 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. 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-info
utility was renamed to Magnum GL Info. No backwards compatibility symlinks or aliases are provided. - The
Magnum::Context
target 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 themconstexpr
in C++14, but the resulting increase in maintenance costs and compile times is not worth it. PixelFormat
has 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. CompressedPixelFormat
has 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. MeshPrimitive
has 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*D:: primitive() 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::Usage
enum that was deprecated in 2014.01, use the global GL::BufferUsage enum instead - Removed the
Magnum/Query.h
header that was deprecated in 2015.05, use one of Magnum/PrimitiveQuery.h, Magnum/ SampleQuery.h or Magnum/ TimeQuery.h instead - 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::TransformationType
enum 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::ReadDraw
enum value that was deprecated in 2015.05, use separateFramebufferTarget::Read
andFramebufferTarget::Draw
values 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.h
header that was deprecated in 2015.05, use Magnum/GL/ DebugOutput.h instead - Removed the
DebugMessage::Severity
enum that was deprecated in 2015.05, use GL::DebugOutput:: Severity instead - Removed
DebugMessage::Callback
typedef,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::Source
enum 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
*Query
constructor 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::AbstractCamera2D
andSceneGraph::AbstractCamera3D
that 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::Identity
andMath::Matrix::Zero
that were deprecated since June 2015, use the Math::IdentityInit and Math:: ZeroInit tags instead - Removed
Magnum/ImageReference.h
header andImageReference
type that were deprecated since July 2015, use Magnum/ImageView.h and ImageView instead - Removed
Magnum/Color.h
header andBasicColor3
andBasiColor4
types that were deprecated since August 2015, use Magnum/Math/ Color.h, Math:: Color3 and Math:: Color4 instead - Removed
Magnum/ColorFormat.h
header andColorFormat
andColorType
enums 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
compatibility
branch and all support for MSVC 2013 and GCC < 4.7
New features
- MSVC 2015 and MSVC 2017 support in
master
branch (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
- 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_MULTITHREADED
CMake option and a corresponding MAGNUM_BUILD_ MULTITHREADED CMake 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 const
pointer 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:: 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) - Text input support in Platform::
Sdl2Application and Platform:: GlfwApplication (see mosra/ magnum#129) - Added Platform::
WindowlessWindowsEglApplication and 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:: AllowHighDpi for iOS and macOS - Added Platform::
Windowless*Application:: Configuration:: setFlags() with Flag:: Debug - magnum-info now accepts
--short
and--extension-strings
options - 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::
MeshData2D and Trade:: MeshData3D - Trade::
AbstractImageConverter member functions were changed to non- const
to make implementation of complex converter plugins possible - New Trade::
AbstractImageConverter:: exportToCompressedImage() plugin interface and Trade:: 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::*Data
classes 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
nullptr
data (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 double
anddouble
- 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::
Flat now sets default color to white only in textured version - Shaders::
Phong gained the ability to have both color and texture - Shaders::
Phong is 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_TESTS
CMake option) - Ability to override the implicit plugin directory using a
MAGNUM_PLUGINS_DIR
CMake cache variable - Ability to override deploy directory (used for example by Emscripten) using a
MAGNUM_DEPLOY_PREFIX
CMake cache variable - Better handling of compiled-in resources in static build. You don't need to manually register resources when using Shaders library in static builds (see mosra/
magnum-examples#9) MACOSX_RPATH
is now enabled by default on CMake 3.0+ (see mosra/magnum#126 - Enabling only C++ in CMake
project()
call, if possible, to speed up initial CMake run - Windowless application libraries now make use of the
BUILD_STATIC_PIC
CMake option - Fixed
FindSDL2.cmake
module to work out-of-the-box on Windows and macOS (see mosra/magnum#166) - Fixed
FindSDL2.cmake
to link to EGL when targeting GLES (see mosra/magnum-examples#9) - Bundling a patched version of
FindOpenAL.cmake
to make it working on Emscripten
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::AbstractCamera2D
andSceneGraph::AbstractCamera3D
are deprecated, use SceneGraph::Camera, SceneGraph:: BasicCamera2D, SceneGraph:: BasicCamera3D, SceneGraph:: Camera2D and SceneGraph:: Camera3D instead Math::Matrix::IdentityType
,Math::Matrix::ZeroType
,Math::Matrix::Identity
andMath::Matrix::Zero
are 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.h
header andImageReference
type is deprecated, use Magnum/ImageView.h and ImageView instead Magnum/Color.h
header andBasicColor3
andBasiColor4
types are deprecated, use Magnum/Math/ Color.h, Math:: Color3 and Math:: Color4 instead Magnum/ColorFormat.h
header andColorFormat
andColorType
enums 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::Coordinate
enum 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::WheelUp
andPlatform::GlfwApplication::MouseEvent::Button::WheelDown
mouse 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 nullptr
are 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::
MeshData2D and Trade:: MeshData3D constructors without the colors
parameter are deprecated, use the full ones instead - Shaders::
Generic:: Color vertex 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:: Distance and Math:: Geometry:: Intersection classes are now a namespace (might break using
declarations, but otherwise it's fully source-compatible) - Removed
Context::majorVersion()
andContext::minorVersion()
functions, use Context::version() instead - Removed deprecated
Magnum/DebugMarker.h
header, use Magnum/DebugOutput.h and DebugMessage class instead - Removed deprecated
*Buffer
values from FramebufferBlit, use values without theBuffer
suffix - 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 Mesh*::
draw() overload, use the one with explicit shader parameter instead - Removed deprecated
Context::Flag::Robustness
enum value, use Context::Flag:: RobustAccess instead - Removed deprecated
Texture::Target
enum, 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
AbstractImage
class andMagnum/AbstractImage.h
header, 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.cmake
now prefers absolute includes (i.e.GLFW/glfw3.h
instead 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 in Other 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)
Changelogs for previous versions are available in Archived changelogs.