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 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, 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
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, useGL::pixelSize()
orMagnum::pixelSize()
insteadPixelStorage::dataProperties(GL::PixelFormat, GL::PixelSize, const Vector3i&)
was deprecated for being too GL-specific, use PixelStorage::dataProperties(std:: size_t, const Vector3i&) const together with GL::pixelSize()
insteadImage*type()
functions are deprecated as these are too GL-specific. The second format specifier is now available through Image::formatExtra(), ImageView:: formatExtra() and Trade:: ImageData:: formatExtra() Audio::Buffer::Format
is 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::IndexType
enum 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
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::Line
is deprecated, use the Primitives::line2D() and Primitives:: line3D() free functions 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. UseShaders::*Vector::bindVectorTexture()
,Shaders::Flat::bindTexture()
,Shaders::Phong::bindAmbientTexture()
,Shaders::Phong::bindDiffuseTexture()
,Shaders::Phong::bindSpecularTexture()
andShaders::Phong::bindTextures()
instead.
Potential compatibility breakages, removed APIs
- Code that was previously linking just to the core Magnum library may now need to explicitly link to the Magnum::
Trade and Magnum:: GL libraries as well. If using CMake, these dependencies might get linked in transitively from other libraries, but that doesn't handle all cases. Due to the complexity of this change, no backwards compatibility is provided. - The
magnum-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*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::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 ofMagnum/PrimitiveQuery.h
,Magnum/SampleQuery.h
orMagnum/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 (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_MULTITHREADED
CMake option and a correspondingMAGNUM_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:: 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::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
andTrade::MeshData3D
- Trade::
AbstractImageConverter member functions were changed to non- const
to 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::*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 versionShaders::Phong
gained the ability to have both color and textureShaders::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 - Fixed
EMSCRIPTEN
environment variable handling in Emscripten toolchains (see mosra/toolchains#2, mosra/ toolchains#3)
Bug fixes
- Wrapping mode for CubeMapTexture is now correctly two-dimensional instead of three-dimensional, wrapping mode for TextureNDArray is now correctly N-dimensional instead of N+1
- Fixed WebGL context creation on Internet Explorer, it claims to have version 0.94
- Fixed random browser-specific issues by avoiding the use of XHTML in Emscripten builds
- ObjImporter plugin now opens the files as binary to avoid line ending issues
- Various compatibility updates to the Shaders library
- Updates to OpenGL tests to work better on non-NVidia cards
- Various fixes for OpenGL object label queries on AMD drivers
- Fixed
TextureTools::distanceField()
on 3.0 <= GL < 3.2 - Fixed driver crash on AMD with
TextureTools::distanceField()
- Framebuffer::
attachCubeMapTexture() incorrectly behaved as a layered attachment (see mosra/ magnum#123) - Fixed object label queries using the EXT_
debug_ label extension - EXT_
direct_ state_ access function was accidentally used in ARB_ direct_ state_ access code path, causing crashes on Mesa - Properly export Framebuffer::
DrawAttachment to avoid linker failures on Windows - Fixed Framebuffer attachments on GLES2 drivers w/o separate read/draw bindings (see mosra/
magnum#204) - Fixed Framebuffer binding on WebGL (see mosra/
magnum#134) - On Emscripten, Platform::
Sdl2Application was by default rendering a 800x600 canvas to an area of 640x480 pixels, causing severe aliasing. Canvas is now by default sized to 640x480 to match the default CSS style. - Platform::
WindowlessWglApplication is fixed to allow the GL context to be created and destroyed multiple times during application run - SceneGraph::
Camera now works properly with Double underlying type - It's now possible to delete a running SceneGraph::
Animable - Text::
AbstractLayouter has now a virtual destructor to avoid leaking its subclasses - Fixed Trade::
ObjImporter on Android - Fixed assertion when using DebugTools::
ObjectRenderer - Fixed appearance of
Primitives::Cylinder::solid()
andPrimitives::Circle::solid()
(see mosra/magnum#197, mosra/ magnum#220) - Fixed a possible OOB access when reading Math::
Vector / Math:: RectangularMatrix from Corrade:: Utility:: Configuration - Fixed unfortunate interaction of VAOs and index buffers on platforms without direct state access
- Fixed resetting a bit in
Math::BoolVector::set()
(see mosra/magnum#208, [mosra/magnum# - Audio::
Context:: hrtfSpecifierString() was crashing on systems supporting only ALC_ SOFTX_ HRTF and not ALC_ SOFT_ HRTF - Fixed bad interaction of builtin OpenGL headers and Qt on macOS (see mosra/
magnum#212) - Fixed building for Android with standard build systems (see mosra/
magnum#131) - Fixed building of WGL context library (see mosra/
magnum#137) - Various compilation warning/error fixes on various compilers (see mosra/
magnum#100, mosra/ magnum#109, mosra/ magnum#138, mosra/ magnum#189, mosra/ magnum#190)
Deprecated APIs
Timeline::setMinimalFrameTime()
is deprecated, use Platform::*Application:: setSwapInterval() and/or Platform:: *Application:: setMinimalLoopPeriod() instead SceneGraph::Camera2D::setProjection()
,SceneGraph::Camera3D::setOrthographic()
andSceneGraph::Camera3D::setPerspective()
are deprecated, use SceneGraph::Camera:: setProjectionMatrix() in combination with Matrix3:: projection(), Matrix4:: orthographicProjection() and Matrix4:: perspectiveProjection() instead SceneGraph::AbstractCamera
,SceneGraph::AbstractBasicCamera2D
,SceneGraph::AbstractBasicCamera3D
,SceneGraph::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
andTrade::MeshData3D
constructors without thecolors
parameter are deprecated, use the full ones insteadShaders::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
andMath::Geometry::Intersection
classes are now a namespace (might breakusing
declarations, but otherwise it's fully source-compatible) - Removed
Context::majorVersion()
andContext::minorVersion()
functions, use GL::Context:: version() instead - Removed deprecated
Magnum/DebugMarker.h
header, useMagnum/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
GL::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
- 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 TransformFeedback
class, 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 DebugGroup
class.
- 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::*Context
libraries 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
glLoadGen
for OpenGL extension loading - Platform::
Sdl2Application now tries to create core context on all platforms, not just OSX (see mosra/ magnum#80). Buffer::bind()
,Buffer::unbind()
andBuffer::Target
is 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 char
instead ofconst unsigned char
for 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.cmake
to library-specific location, making it usable without providing own copy of the file in depending projects. TheWITH_FIND_MODULE
option 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::MeshVisualizer
to work in GLSL ES. - Fixed
Shaders::*Vector
on 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.h
header is deprecated, use one ofMagnum/PrimitiveQuery.h
,Magnum/SampleQuery.h
orMagnum/TimeQuery.h
instead. - Using
Buffer::Target
as constructor orBuffer::setTargetHint()
parameter is deprecated, useBuffer::TargetHint
instead. - The
SceneGraph::TransformationType
enum is depracted, use separate<transform>()
and<transform>Local()
variants instead. SceneGraph::AbstractObject::hasFeatures()
,firstFeature()
,lastFeature()
,SceneGraph::Object::hasChildren()
,firstChild()
andlastChild()
are deprecated, use methods on linked list returned by SceneGraph::AbstractObject:: features() and SceneGraph:: Object:: children() instead. Platform::ScreenedApplication::frontScreen()
andPlatform::ScreenedApplication::backScreen()
are deprecated, use methods on linked list returned by Platform::ScreenedApplication:: screens() instead. *Framebuffer::read()
functions taking two vectors are deprecated, use overload taking Range2Di instead.- The
Mesh::maxVertexAttributes()
function is deprecated, useAbstractShaderProgram::maxVertexAttributes()
instead. Math::Vector::dot()
,Math::Complex::dot()
,Math::Quaternion::dot()
,Math::Vector::angle()
,Math::Complex::angle()
,Math::Quaternion::angle()
,Math::Quaternion::lerp()
,Math::Quaternion::slerp()
,Math::Vector2::cross()
andMath::Vector3::cross()
are deprecated, use Math::dot(), Math:: angle(), Math:: lerp(), Math:: slerp() and Math:: cross() instead (see mosra/ magnum#74) - The
*Framebuffer::bind(FramebufferTarget)
function is deprecated, use parameter-less*Framebuffer::bind()
instead. - The
FramebufferTarget::ReadDraw
enum value is deprecated, use separateFramebufferTarget::Read
andFramebufferTarget::Draw
values instead. CubeMapTexture::imageSize()
with explicit face parameter is deprecated, use overload that returns one value for all faces instead.- The
Magnum/DebugMessage.h
header is deprecated, useMagnum/DebugOutput.h
instead (see mosra/magnum#89) - The
DebugMessage::Severity
enum is deprecated, useDebugOutput::Severity
instead. - The
DebugMessage::Callback
typedef,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::Source
enum are deprecated, useDebugOutput::setEnabled()
along withDebugOutput::Source
,DebugOutput::Type
andDebugOutput::Severity
instead. - Parameter-less
*Query
constructor 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::Primitive
enum, useMeshPrimitive
instead. - Removed deprecated
Sampler::maxAnisotropy()
function, useSampler::maxMaxAnisotropy()
instead. - Removed deprecated
Math::Geometry::Rectangle
class, use Math::Range instead. - Removed deprecated
SceneGraph::Animable::group()
function, use SceneGraph::Animable:: animables() instead. - Removed deprecated
Shaders/magnumShadersResourceImport.hpp
file, useShaders/resourceImport.hpp
instead. - Removed deprecated
Text::TextRenderer
alias, use Text::Renderer instead. - 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::string
just 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
compatibility
branch (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 *Texture
classes - Basic support for ARB_
texture_ multisample and ARB_ texture_ storage_ multisample in new MultisampleTexture
class - Instanced rendering, base vertex and base instance specification in
Mesh
andMeshView
classes;Mesh::addVertexBufferInstanced()
function for adding buffers with per-instance data (see mosra/magnum#47) - Mesh multi-draw using
MeshView::draw()
- Initial ARB_
multi_ bind support with AbstractTexture::bind()
- Support for ARB_
vertex_ type_ 10f_ 11f_ 11f_ rev in AbstractShaderProgram::Attribute::DataType
- New variants of
Shader::compile()
andAbstractShaderProgram::link()
, allowing the driver to perform parallel compilation in multiple threads. - Added
*Texture::maxSize()
queries - MeshTools::
compile() for automagic creation of 2D and 3D meshes from imported data - MeshTools::
interleaveInto() for interleaving data into existing buffer Shapes::Shape::collision()
function as complement toShapes::Shape::collides()
Platform::GlutApplication::KeyEvent
finally has more complete key support- Math::
Range:: data() function, useful when querying range values from GL - Support for specifying context flags using
Platform::*Application::Configuration::setFlags()
, they are now also shown in magnum-info - More robust support for driver detection and driver bug workarounds. Driver can be detected using
Context::detectedDriver()
, problematic extension disabled, which is then shown in magnum-info and can be also queried usingContext::isExtensionDisabled()
Context::extensionStrings()
for getting list of all extension strings exposed by the driverContext::resetState()
for resetting internal state tracker, allowing to use Magnum along with third-party OpenGL code (see mosra/magnum#48) - MAGNUM_
TARGET_ WEBGL CMake and preprocessor variable
Changes
- Libraries and plugins in debug build configuration are installed to different locations, making it possible to have debug and release libraries installed alongside each other (see mosra/
magnum#20, mosra/ magnum#45) - Platform::
Sdl2Application is now used everywhere (documentation, tutorials, examples) by default, replacing Platform::GlutApplication
. The GLUT application is still available, though. See mosra/magnum#39. - The need for compiler compatibility mode is now automatically detected by CMake to avoid strange compilation errors later
- Split out
Texture
functionality into dedicatedTextureArray
,MultisampleTexture
andRectangleTexture
classes to make their usage less error-prone Buffer::invalidateData()
,Buffer::invalidateSubData()
andRenderer::resetNotificationStrategy()
functions are enabled on OpenGL ES as a no-op- Added std::
vector overload of MeshTools::combineIndexArrays()
for greater runtime-usage flexibility - Platform::
Sdl2Application now defaults to non-resizable window, you can change the behavior using Platform:: Sdl2Application:: Configuration:: setWindowFlags() - It's now possible to import objects without materials
- More robust OpenGL version checks when creating context
- Thorough documentation review, fixes and improvements
Build system
- Avoiding unnecessary linking of the OpenGL library (see mosra/
magnum#60)
Bug fixes
- Fixed usage with OpenGL ES 3.1 contexts (it complained about invalid version)
- Fixed compilation of
Shaders::MeshVisualizer
under WebGL and with ANGLE, see mosra/magnum#56 - Fixed various build issues on Mac OS X, see mosra/
magnum#51 and mosra/ magnum#54
Deprecated APIs
Mesh::setVertexCount()
andMesh::setIndexCount()
had nonintuitive behavior in some corner cases and are deprecated, use generalMesh::setCount()
function insteadMeshView::setVertexRange()
and four-/two-argumentMeshView::setIndexRange()
are deprecated for similar reason as above, useMeshView::setCount()
,MeshView::setBaseVertex()
and three-/one-argumentMeshView::setIndexRange()
insteadTexture::Target
enum is deprecated as the API was too error-prone, use dedicatedTextureArray
,MultisampleTexture
andRectangleTexture
classes insteadFramebuffer::attachTexture*D()
is deprecated, use more genericFramebuffer::attachTexture()
andFramebuffer::attachTextureLayer()
insteadFramebufferBlit::*Buffer
enum values are deprecated, use shorterFramebufferBlit::Color
and 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 Mesh
andBuffer
directly 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::Robustness
is deprecated, useContext::Flag::RobustAccess
which reflects OpenGL naming better insteadTexture::maxLayers()
has misleading naming and is deprecated, useShader::maxCombinedTextureImageUnits()
instead
Potential compatibility breakages, removed APIs
- All functionality deprecated in 2013.10 has been removed, namely:
- Removed deprecated raw-pointer versions of
Buffer::setData()
andBuffer::setSubData()
, use overloads takingContainers::ArrayReference
instead - Removed deprecated
Magnum/ImageFormat.h
header andImageFormat
/ImageType
enums, useMagnum/ColorFormat.h
header andColorFormat
/ColorType
enums instead - Removed deprecated
Matrix2
andMatrix2d
typedefs, use Matrix2x2 and Matrix2x2d instead - Removed deprecated
Magnum/Swizzle.h
header 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::*Button
enum values, use Platform::*Application:: *Event:: buttons() function and Platform:: *Application:: *Event:: Button enum instead Platform::Sdl2Application::Configuration::Flag
enum 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
compatibility
branch - 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_FONTCONVERTER
CMake option (currently Linux only), seemagnum-fontconverter --help
for 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 convertingVersion
enum 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::Generic
class 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::MeshData2D
andTrade::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
#include
path
Changes
- Preferring absolute includes instead of relative (see mosra/
magnum#36) - The
magnum-distancefield
utility is now named Distance Field conversion utility for consistency with other command-line utilities ImageReference
class 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>()
returnstrue
if value is nonzero (was returningtrue
only 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::Flat
now 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
MeshView
class - Fixed various issues with textured
Shaders::Flat
shader (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::Usage
enum is deprecated to reduce header dependencies, use globalBufferUsage
enum insteadMesh::Primitive
enum is deprecated to reduce header dependencies, use globalMeshPrimitive
enum insteadSampler::maxAnisotropy()
is deprecated to avoid naming conflict with*Texture::setMaxAnisotropy()
, useSampler::maxMaxAnisotropy()
insteadMagnum::Geometry::Rectangle
class (andRectangle*
typedefs) is deprecated, use more generic and feature-rich Math::Range instead. Platform::Sdl2Application::Configuration::setFlags()
function and related enum is deprecated to avoid naming conflict in the future, use Platform::Sdl2Application:: Configuration:: setWindowFlags() instead SceneGraph::Animable::group()
is deprecated, use non-ambiguous SceneGraph::Animable:: animables() instead Magnum/Shaders/magnumShadersResourceImport.hpp
header is deprecated in favor of less verboseMagnum/Shaders/resourceImport.hpp
Text::TextRenderer
class (andText::TextRenderer2D
,Text::TextRenderer3D
typedefs) is deprecated, use less redundant name Text::Renderer instead
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 float
anddouble
non-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
InvertedSphere
shape in Shapes library - Texture support in
Shaders::Flat
- Mouse button queries in Platform::
*Application:: MouseMoveEvent
Changes
Buffer::setData()
andBuffer::setSubData()
are now acceptingContainers::ArrayReference
for 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::AbstractCamera
symbols (see mosra/magnum-bootstrap#3)
Deprecated APIs
Matrix2
andMatrix2d
is deprecated, use Matrix2x2 and Matrix2x2d insteadswizzle()
is deprecated, all of its functionality has been moved intoMath::swizzle()
Buffer::setData()
andBuffer::setSubData()
overloads taking pair of data pointer and size are deprecated, useContainers::ArrayReference
-basedBuffer::setData()
andBuffer::setSubData()
ImageFormat.h
header,ImageFormat
andImageType
enums are deprecated, useColorFormat.h
header,ColorFormat
andColorType
enums which reflect OpenGL naming better insteadPlatform::*Application::InputEvent::Modifier::*Button
enum values are deprecated, use Platform::*Application:: *Event:: buttons() and Platform:: *Application:: *Event:: Button enum instead AbstractShaderProgram::maxSupportedVertexAttributeCount()
,AbstractTexture::maxSupportedLayerCount()
andSampler::maxSupportedAnisotropy()
are deprecated in favor of less verboseAbstractShaderProgram::maxVertexAttributes()
,AbstractTexture::maxLayers()
andSampler::maxAnisotropy()
Documentation
- Fixed SceneGraph bootstrap branch name (see mosra/
magnum-bootstrap#1)
Potential compatibility breakages, removed APIs
No deprecated API was removed in this release.
2013.08
Released 2013-08-30, tagged as v2013.08. See the project announcement for a high-level overview.