You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1920 lines
110 KiB

/*
This file is part of Magnum.
Copyright © 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019,
2020, 2021, 2022, 2023 Vladimír Vondruš <mosra@centrum.cz>
Permission is hereby granted, free of charge, to any person obtaining a
copy of this software and associated documentation files (the "Software"),
to deal in the Software without restriction, including without limitation
the rights to use, copy, modify, merge, publish, distribute, sublicense,
and/or sell copies of the Software, and to permit persons to whom the
Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included
in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
DEALINGS IN THE SOFTWARE.
*/
namespace Magnum {
/** @page changelog-old Archived changelogs
@tableofcontents
See also:
- @subpage changelog-plugins-old "Archived plugin changelogs"
- @subpage changelog-integration-old "Archived integration changelogs"
- @subpage changelog-examples-old "Archived example changelogs"
@section changelog-2018-04 2018.04
Released 2018-05-01, tagged as
[v2018.04](https://github.com/mosra/magnum/releases/tag/v2018.04).
@subsection changelog-2018-04-dependencies 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
@ref building-cross-android for more information.
@subsection changelog-2018-04-new New features
- New @ref PixelFormat / @ref CompressedPixelFormat enums containing generic
API-independent pixel formats, together with @cpp pixelSize() @ce,
@ref pixelFormatWrap() / @ref pixelFormatUnwrap(),
@ref compressedPixelFormatWrap() / @ref compressedPixelFormatUnwrap() and @ref isPixelFormatImplementationSpecific() /
@ref isCompressedPixelFormatImplementationSpecific() utilities now used by
@ref Image / @ref CompressedImage and @ref ImageView /
@ref CompressedImageView instead of the GL-specific formats
- New @ref MeshPrimitive and @ref MeshIndexType enums containing generic
API-independent mesh primitive types and index types, together with
@ref meshIndexTypeSize() utilities
- New @ref SamplerFilter, @ref SamplerMipmap and @ref SamplerWrapping enums
containing generic API-independent texture sampler modes
@subsubsection changelog-2018-04-new-math Math library
- Added @ref Math::isInf(), @ref Math::isNan()
@subsubsection changelog-2018-04-new-gl 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](https://github.com/mosra/magnum/pull/233))
- New @ref GL::hasPixelFormat(), @ref GL::pixelFormat(), @ref GL::pixelType(),
@ref GL::hasCompressedPixelFormat(), @ref compressedPixelFormat() utilities
for converting generic @ref PixelFormat / @ref CompressedPixelFormat to
GL-specific @ref GL::PixelFormat, @ref GL::PixelType and
@ref GL::CompressedPixelFormat values. The @ref GL::BufferImage and
@ref GL::CompressedBufferImage classes now have overloads accepting both
types.
- New @ref GL::meshPrimitive() and @ref GL::meshIndexType() utilities for
converting generic @ref MeshPrimitive and @ref MeshIndexType to GL-specific
@ref GL::MeshPrimitive and @ref GL::MeshIndexType values. The @ref GL::Mesh
class now has overloads accepting both types.
- New @ref GL::Mesh::indexType() and @ref GL::MeshView::mesh() getters
- New @ref GL::samplerFilter(), @ref GL::samplerMipmap() and
@ref GL::samplerWrapping() utilities for converting generic
@ref SamplerFilter, @ref SamplerMipmap and @ref SamplerWrapping to G
L-specific @ref GL::SamplerFilter, @ref GL::SamplerMipmap and
@ref 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](https://github.com/mosra/magnum/issues/224),
[mosra/magnum#231](https://github.com/mosra/magnum/pull/231))
- New OpenGL extension support:
- @gl_extension{ARB,texture_filter_anisotropic}
- @gl_extension{OES,texture_float}, @gl_extension2{OES,texture_half_float,OES_texture_float}
- @gl_extension{EXT,color_buffer_float},
@gl_extension2{EXT,color_buffer_half_float,EXT_color_buffer_half_float}
and
their WebGL counterparts @webgl_extension{EXT,color_buffer_half_float},
@webgl_extension{WEBGL,color_buffer_float},
@webgl_extension{EXT,color_buffer_float}
- Ported @ref GL::OpenGLTester to WebGL
@subsubsection changelog-2018-04-new-platform Platform libraries
- Ability to create @ref Platform::Sdl2Application and
@ref Platform::GlfwApplication classes without implicitly created OpenGL
context by passing @ref Platform::Sdl2Application::Configuration::WindowFlag::Contextless "Configuration::WindowFlag::Contextless"
to them. These two can be now also built completely without the GL library.
- Added @ref Platform::AndroidApplication::windowSize()
- Added @ref Platform::AndroidApplication::nativeActivity() to access
underlying `ANativeActivity` structure for calling various Android APIs
@subsubsection changelog-2018-04-new-primitives Primitives library
- New @ref Primitives::circle3DSolid(), @ref Primitives::circle3DWireframe(),
@ref Primitives::coneSolid(), @ref Primitives::coneWireframe(),
@ref Primitives::grid3DSolid() and @ref Primitives::grid3DWireframe()
primitives
@subsubsection changelog-2018-04-new-trade Trade library
- Debug output operator for @ref Trade::PhongMaterialData::Flag and
@ref Trade::PhongMaterialData::Flags
@subsection changelog-2018-04-changes Changes and improvements
- The @ref 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 @ref GL library expects that
all parameters are at their defaults.
@subsubsection changelog-2018-04-changes-debugtools DebugTools library
- @ref DebugTools::textureSubImage() now accepts both GL-specific
@ref GL::PixelFormat / @ref GL::PixelType combination and the generic
@ref PixelFormat enum
- @ref DebugTools::CompareImage now accepts generic @ref PixelFormat on input
instead of GL-specific @ref GL::PixelFormat / @ref GL::PixelType
@subsubsection changelog-2018-04-changes-gl GL library
- The @ref GL::Mesh::indexTypeSize() and @cpp GL::MeshView::setIndexRange() @ce
now expect that the mesh is indexed (instead of silently not doing
anything)
@subsubsection changelog-2018-04-changes-text Text library
- The @ref Text::GlyphCache now unconditionally uses
@ref GL::TextureFormat::Luminance on ES2 and WebGL 1, instead of trying
@ref GL::TextureFormat::Red there first. That's done for consistency with
@ref GL::pixelFormat(), which unconditionally returns
@ref GL::PixelFormat::Luminance for @ref PixelFormat::R8Unorm.
@subsubsection changelog-2018-04-changes-platform Platform libraries
- Separated @ref Platform::Sdl2Application::Configuration "Platform::*Application::Configuration"
into @ref Platform::Sdl2Application::Configuration "Configuration" and
@ref Platform::Sdl2Application::GLConfiguration "GLConfiguration" to allow
creation of non-GL application instances in the future
@subsubsection changelog-2018-04-changes-plugins Plugins
- @ref Trade::TgaImporter "TgaImporter" and
@ref Trade::TgaImageConverter "TgaImageConverter" plugins now operate on
the generic @ref PixelFormat instead of GL-specific @ref GL::PixelFormat /
@ref GL::PixelType
- @ref Trade::AnySceneImporter "AnySceneImporter" now uses `GlbImporter` for
loading binary glTF files instead of proxying them to `GltfImporter`
plugins
@subsection changelog-2018-04-buildsystem Build system
- The core @ref Magnum library is not depending on OpenGL anymore, all
GL-related APIs are now part of a new @ref GL library
- @ref Primitives and @ref Trade libraries do not depend on OpenGL anymore
- @ref DebugTools, @ref MeshTools and @ref TextureTools have only an optional
dependency on the @ref GL library, controlled with `TARGET_GL` CMake option
- All plugin interfaces now implement
@ref Corrade::PluginManager::AbstractPlugin::pluginSearchPaths() "pluginSearchPaths()"
for plugin directory autodetection --- you no longer need to specify the
plugin directory explicitly when loading plugins. See @ref plugins-loading
for more information. See also [mosra/magnum#235](https://github.com/mosra/magnum/issues/235).
- Plugins now provide an automatic means of static plugin import via CMake
targets, no need to call @ref CORRADE_PLUGIN_IMPORT() implicitly anymore.
For this to work, you just need to update local copies of all Find modules.
See @ref plugins-static for more information.
- The @ref Audio::AnyImporter "AnyAudioImporter", @ref Trade::AnyImageConverter "AnyImageConverter",
@ref Trade::AnyImageImporter "AnyImageImporter" and @ref Trade::AnySceneImporter "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` and `FindMagnumPlugins.cmake` modules.
See @ref building and @ref cmake for more information.
- The @ref Trade namespace is now a separate library, allowing to use core
Magnum functionality without @ref Corrade::PluginManager
- Suppressed a MSVC warning in @ref MeshTools::interleave() (see
[mosra/magnum#238](https://github.com/mosra/magnum/issues/238))
- Fixed Vcpkg packages to properly copy all plugin and their dependencies
along the executable (see [mosra/magnum#235](https://github.com/mosra/magnum/issues/235),
[mosra/magnum-examples#41](https://github.com/mosra/magnum-examples/issues/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](https://github.com/mosra/magnum/issues/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](https://github.com/mosra/corrade/issues/44).)
@subsection changelog-2018-04-bugfixes 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](https://github.com/mosra/magnum/issues/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 @cpp "emscripten-pthreads-broken-unicode-shader-sources" @ce
workaround description and [mosra/magnum#239](https://github.com/mosra/magnum/issues/239)
for details.
- @cpp GL::Attribute::DataType::HalfFloat @ce was not available on WebGL 2 by
mistake
- A wrong code path for @ref GL::Framebuffer::checkStatus() was selected on
WebGL 1 by mistake
- Fixed `MAGNUM_PLUGINS_DIR` variables to contain proper absolute location by
default again.
@subsection changelog-2018-04-deprecated Deprecated APIs
- All GL-related headers and APIs from the root `Magnum/` directory and
@ref Magnum namespace were moved to the `Magnum/GL/` directory and
@ref 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()`
and `MAGNUM_VERIFY_NO_ERROR()` macros are deprecated, use
@ref MAGNUM_ASSERT_GL_VERSION_SUPPORTED(),
@ref MAGNUM_ASSERT_GL_EXTENSION_SUPPORTED() and
@ref MAGNUM_VERIFY_NO_GL_ERROR() instead
- The `Platform::Context` class is deprecated, use @ref Platform::GLContext
instead
- `Platform::*Application::createContext()` and
`Platform::*Application::tryCreateContext()` functions are deprecated for
being too GL-specific, use @ref Platform::Sdl2Application::create() "create()"
and @ref Platform::Sdl2Application::tryCreate() "tryCreate()" instead
- The `Extensions::GL` namespace is deprecated, use @ref GL::Extensions
instead
- The @ref PixelFormat and @ref 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
@ref GL::PixelFormat (together with @ref GL::PixelType) and
@ref GL::CompressedPixelFormat instead.
- `PixelStorage::pixelSize()` was deprecated, use @cpp GL::pixelSize() @ce
or @cpp Magnum::pixelSize() @ce instead
- `PixelStorage::dataProperties(GL::PixelFormat, GL::PixelSize, const Vector3i&)`
was deprecated for being too GL-specific, use
@ref PixelStorage::dataProperties(std::size_t, const Vector3i&) const
together with @cpp GL::pixelSize() @ce instead
- `Image*::type()` functions are deprecated as these are too GL-specific. The
second format specifier is now available through @ref Image::formatExtra(),
@ref ImageView::formatExtra() and @ref Trade::ImageData::formatExtra()
- `Audio::Buffer::Format` is deprecated, use @ref Audio::BufferFormat instead
- `setData()` functions in the @ref Image and @ref CompressedImage classes
are deprecated because they don't offer anything extra over simple
move-assignment of a new instance.
- The @ref MeshPrimitive enum now contains generic API-independent values.
The additional GL-specific types are present there, but marked as
deprecated. Use the GL-specific @ref GL::MeshPrimitive enum instead.
- THe `GL::Mesh::IndexType` enum and the `Mesh::indexSize(MeshIndexType)`
function is deprecated, use @ref Magnum::MeshIndexType /
@ref GL::MeshIndexType and @ref meshIndexTypeSize() instead
- The `GL::Mesh::indexSize()` function is deprecated, use
@cpp GL::Mesh::indexTypeSize() @ce instead
- The `Sampler` class and the `Sampler::Filter`, `Sampler::Mipmap`,
`Sampler::Wrapping`, `Sampler::CompareMode`, `Sampler::CompareFunction` and
`Sampler::DepthStencilMode` enums are deprecated, use @ref GL::Sampler,
@ref SamplerFilter / @ref GL::SamplerFilter, @ref SamplerMipmap /
@ref GL::SamplerMipmap, @ref SamplerWrapping / @ref GL::SamplerWrapping,
@ref GL::SamplerCompareMode, @ref GL::SamplerCompareFunction and
@ref GL::SamplerDepthStencilMode instead
- Class @cpp Primitives::Capsule2D @ce and @cpp Primitives::Capsule3D @ce is
deprecated, use @ref Primitives::capsule2DWireframe(),
@ref Primitives::capsule3DSolid() and @ref Primitives::capsule3DWireframe()
free functions instead
- Class @cpp Primitives::Circle @ce is deprecated, use
@ref Primitives::circle2DSolid() and @ref Primitives::circle2DWireframe()
instead
- Class @cpp Primitives::Crosshair2D @ce and @cpp Primitives::Crosshair3D @ce
is deprecated, use @ref Primitives::crosshair2D() and
@ref Primitives::crosshair3D() free function instead
- Class @cpp Primitives::Cube @ce is deprecated, use @ref Primitives::cubeSolid(),
@ref Primitives::cubeSolidStrip() and @ref Primitives::cubeWireframe() free
functions instead
- Class @cpp Primitives::Cylinder @ce is deprecated, use
@ref Primitives::cylinderSolid(), @ref Primitives::cylinderWireframe() free
functions instead
- Class @cpp Primitives::Icosphere @ce is deprecated, use the
@ref Primitives::icosphereSolid() free function instead
- Class @cpp Primitives::Line @ce is deprecated, use the
@ref Primitives::line2D() and @ref Primitives::line3D() free functions
instead
- Class @cpp Primitives::Plane @ce is deprecated, use
@ref Primitives::planeSolid() and @ref Primitives::planeWireframe() free
functions instead
- Class @cpp Primitives::Square @ce is deprecated, use
@ref Primitives::squareSolid() and @ref Primitives::squareWireframe() free
functions instead
- Class @cpp Primitives::UVSphere @ce is deprecated, use
@ref Primitives::uvSphereSolid() and @ref Primitives::uvSphereWireframe()
free functions instead
- @cpp Shaders::*Vector::setVectorTexture() @ce, @cpp Shaders::Flat::setTexture() @ce,
@cpp Shaders::Phong::setAmbientTexture() @ce, @cpp Shaders::Phong::setDiffuseTexture() @ce,
@cpp Shaders::Phong::setSpecularTexture() @ce and @cpp Shaders::Phong::setTextures() @ce
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
@cpp Shaders::*Vector::bindVectorTexture() @ce,
@cpp Shaders::Flat::bindTexture() @ce,
@cpp Shaders::Phong::bindAmbientTexture() @ce,
@cpp Shaders::Phong::bindDiffuseTexture() @ce,
@cpp Shaders::Phong::bindSpecularTexture() @ce
and @cpp Shaders::Phong::bindTextures() @ce instead.
@subsection changelog-2018-04-compatibility Potential compatibility breakages, removed APIs
- Code that was previously linking just to the core @ref Magnum library may
now need to explicitly link to the @ref Magnum::Trade and @ref 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 @ref magnum-gl-info. No backwards
compatibility symlinks or aliases are provided.
- The `Magnum::Context` target alias was renamed to `Magnum::GLContext`. No
backwards compatibility aliases are provided.
- @ref PixelStorage::dataProperties(), @ref Image::dataProperties(),
@ref ImageView::dataProperties(), @ref Trade::ImageData::dataProperties(), and @ref GL::BufferImage::dataProperties() now return just a pair of two
values, as the third value is now accessible directly through
@ref Image::pixelSize() "*Image::pixelSize()" and no longer calculated
on-demand
- @ref CompressedPixelStorage::dataProperties(),
@ref CompressedImage::dataProperties(),
@ref CompressedImageView::dataProperties() and
@ref GL::CompressedBufferImage::dataProperties() now return just a pair
of two values, as the third value is accessible directly through
@ref CompressedPixelStorage::compressedBlockDataSize()
- @ref ImageView and @ref CompressedImageView methods are no longer
@cpp constexpr @ce. It might be possible to have them @cpp constexpr @ce in
C++14, but the resulting increase in maintenance costs and compile times is
not worth it.
- `PixelFormat` has been moved verbatim to @ref GL::PixelFormat and there's a
new @ref Magnum::PixelFormat enum for generic pixel formats. It contains
(deprecated) @ref GL::PixelFormat values for covering most of backwards
compatibility, but code that relies on these two types being the same may
break. In particular, @ref GL::BufferImage::format() now returns
@ref GL::PixelFormat instead of @ref Magnum::PixelFormat, code depending on
the return type being implicitly convertible to @ref Magnum::PixelFormat
may break. In all other cases, @ref Image::format() "Image*::format()"
returns @ref Magnum::PixelFormat.
- `CompressedPixelFormat` has been moved verbatim to
@ref GL::CompressedPixelFormat and there's a new
@ref Magnum::CompressedPixelFormat enum for generic pixel formats. It
contains (deprecated) @ref GL::CompressedPixelFormat values for covering
most of backwards compatibility, but code that relies on these two types
being the same may break. In particular,
@ref GL::CompressedBufferImage::format() now returns
@ref GL::CompressedPixelFormat instead of @ref Magnum::CompressedPixelFormat,
code depending on the return type being implicitly convertible to
@ref Magnum::CompressedPixelFormat may break. In all other cases,
@ref CompressedImage::format() "CompressedImage*::format()"
returns @ref Magnum::CompressedPixelFormat.
- `MeshPrimitive` has been moved verbatim to @ref GL::MeshPrimitive and
there's a new @ref Magnum::MeshPrimitive enum for generic primitive types.
It contains (deprecated) additional @ref 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, @ref GL::Mesh::primitive() now returns
@ref GL::MeshPrimitive instead of @ref Magnum::MeshPrimitive, code
depending on the return type being implicitly convertible to
@ref Magnum::MeshPrimitive may break. In all other cases,
`Trade::MeshData*D::primitive()` etc. returns @ref Magnum::MeshPrimitive.
- Configuration value reader/writers are now for only
@ref Magnum::MeshPrimitive and @ref Magnum::MeshIndexType, not for
@ref GL::MeshPrimitive or @ref GL::MeshIndexType
- @ref DebugTools::CompareImage no longer accepts GL-specific pixel formats,
only the non-deprecated values from the generic @ref PixelFormat enum
- The @ref Trade::TgaImageConverter "TgaImageConverter" plugin no longer
accepts GL-specific pixel formats, only the non-deprecated values from the
generic @ref PixelFormat enum
- The @ref Image::pixelSize(), @ref ImageView::pixelSize(),
@ref Trade::ImageData::pixelSize() and @ref GL::BufferImage::pixelSize()
functions now return @ref UnsignedInt instead of @cpp std::size_t @ce.
- Removed `PixelStorage::setSwapBytes()`, as every Magnum API dealing with
images basically only asserted that it's not set. Use
@ref Corrade::Utility::Endianness instead.
- Removed the @cpp Buffer::Usage @ce enum that was deprecated in 2014.01, use
the global @ref 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 @ref GL::Buffer::Target as constructor or
@ref GL::Buffer::setTargetHint() parameter that was deprecated in 2015.05,
use @ref GL::Buffer::TargetHint instead
- Removed the @cpp SceneGraph::TransformationType @ce enum that was
deprecated in 2015.05, use separate `<transform>()` and `<transform>Local()`
variants instead
- Removed @cpp SceneGraph::AbstractObject::hasFeatures() @ce, @cpp firstFeature() @ce,
@cpp lastFeature() @ce, @cpp SceneGraph::Object::hasChildren() @ce,
@cpp firstChild() @ce and @cpp lastChild() @ce that were deprecated in
2015.05, use methods on linked list returned by
@ref SceneGraph::AbstractObject::features() and
@ref SceneGraph::Object::children() instead
- Removed @cpp Platform::ScreenedApplication::frontScreen() @ce and
@cpp Platform::ScreenedApplication::backScreen() @ce that were deprecated
in 2015.05, use methods on linked list returned by
@ref Platform::BasicScreenedApplication::screens() "Platform::ScreenedApplication::screens()"
instead
- Removed @ref Framebuffer::read() "*Framebuffer::read()" functions taking two
vectors that was deprecated in 2015.05, use overload taking @ref Range2Di
instead
- Removed the @cpp Mesh::maxVertexAttributes() @ce function that was
deprecated in 2015.05, use @ref GL::AbstractShaderProgram::maxVertexAttributes()
instead
- Removed @cpp Math::Vector::dot() @ce, @cpp Math::Complex::dot() @ce,
@cpp Math::Quaternion::dot() @ce, @cpp Math::Vector::angle() @ce,
@cpp Math::Complex::angle() @ce, @cpp Math::Quaternion::angle() @ce,
@cpp Math::Quaternion::lerp() @ce, @cpp Math::Quaternion::slerp() @ce,
@cpp Math::Vector2::cross() @ce and @cpp Math::Vector3::cross() @ce that
were deprecated in 2015.05, use @ref Math::dot(), @ref Math::angle(),
@ref Math::lerp(), @ref Math::slerp() and @ref Math::cross() instead
- Removed @cpp *Framebuffer::bind(FramebufferTarget) @ce function that was
deprecated in 2%15.05, use parameter-less @ref GL::Framebuffer::bind() "*Framebuffer::bind()"
instead
- Removed @cpp FramebufferTarget::ReadDraw @ce enum value that was deprecated
in 2015.05, use separate @cpp FramebufferTarget::Read @ce and
@cpp FramebufferTarget::Draw @ce values instead
- Removed @ref 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 @ref Magnum/GL/DebugOutput.h instead
- Removed the @cpp DebugMessage::Severity @ce enum that was deprecated in
2015.05, use @ref GL::DebugOutput::Severity instead
- Removed @cpp DebugMessage::Callback @ce typedef, @cpp DebugMessage::setCallback() @ce
and @cpp DebugMessage::setDefaultCallback() @ce function that were
deprecated in 2015.05, use @ref GL::DebugOutput::Callback,
@ref GL::DebugOutput::setCallback() and
@ref GL::DebugOutput::setDefaultCallback() instead
- Removed @cpp DebugMessage::maxLoggedMessages() @ce and
@cpp DebugMessage::maxMessageLength() @ce functions that were deprecated in
2015.05, use @ref GL::DebugOutput::maxLoggedMessages() and
@ref GL::DebugOutput::maxMessageLength() instead
- Removed @cpp DebugMessage::setEnabled() @ce function and related values
from @cpp DebugMessage::Source @ce enum that were deprecated in 2015.05,
use @ref GL::DebugOutput::setEnabled() along with @ref GL::DebugOutput::Source,
@ref GL::DebugOutput::Type and @ref GL::DebugOutput::Severity instead
- Removed parameter-less @cpp *Query @ce constructor and parametrized
@cpp *Query::begin() @ce function that were deprecated in 2015.05, use
constructor with parameter and parameter-less
@ref GL::SampleQuery::begin() "GL::*Query::begin()" instead
- Removed `Timeline::setMinimalFrameTime()` that was deprecated since June
2015, use @ref Platform::Sdl2Application::setSwapInterval() "Platform::*Application::setSwapInterval()"
and/or @ref Platform::Sdl2Application::setMinimalLoopPeriod() "Platform::*Application::setMinimalLoopPeriod()"
instead
- Removed `SceneGraph::Camera2D::setProjection()`,
`SceneGraph::Camera3D::setOrthographic()` and
`SceneGraph::Camera3D::setPerspective()` that were deprecated since June
2015, use @ref SceneGraph::Camera::setProjectionMatrix() in combination
with @ref Matrix3::projection(), @ref Matrix4::orthographicProjection() and
@ref Matrix4::perspectiveProjection() instead
- Removed `SceneGraph::AbstractCamera`, `SceneGraph::AbstractBasicCamera2D`,
`SceneGraph::AbstractBasicCamera3D`, `SceneGraph::AbstractCamera2D` and
`SceneGraph::AbstractCamera3D` that were deprecated since June 2015, use
@ref SceneGraph::Camera, @ref SceneGraph::BasicCamera2D,
@ref SceneGraph::BasicCamera3D, @ref SceneGraph::Camera2D and
@ref SceneGraph::Camera3D instead
- Removed `Math::Matrix::IdentityType`, `Math::Matrix::ZeroType`,
`Math::Matrix::Identity` and `Math::Matrix::Zero` that were deprecated
since June 2015, use the @ref Math::IdentityInit and @ref Math::ZeroInit
tags instead
- Removed `Magnum/ImageReference.h` header and `ImageReference` type that
were deprecated since July 2015, use @ref Magnum/ImageView.h and
@ref ImageView instead
- Removed `Magnum/Color.h` header and `BasicColor3` and `BasiColor4` types
that were deprecated since August 2015, use @ref Magnum/Math/Color.h,
@ref Math::Color3 and @ref Math::Color4 instead
- Removed `Magnum/ColorFormat.h` header and `ColorFormat` and `ColorType`
enums that were deprecated since August 2015, use
@ref Magnum/GL/PixelFormat.h, @ref GL::PixelFormat and @ref GL::PixelType
instead
- Removed @ref Image, @ref ImageView, @ref Trade::ImageData constructors,
`Image::setData()` and `ImageView::setData()` taking `void*` that were
deprecated since August 2015, use constructors and functions taking
@ref Corrade::Containers::Array / @ref Corrade::Containers::ArrayView
instead
@subsection changelog-2018-04-docs Documentation
- A new @ref developers page containing step-by-step checklists for
maintainers and core developers
- A new set of @ref platforms "platform-specific guides" containing extended
information that was previously scattered across @ref Platform application
class docs and elsewhere
- Completely reworked @ref platforms-android "Android building"
documentation, now using Gradle CMake integration instead of the outdated
and no longer supported Apache Ant workflow.
- The @ref 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
@section changelog-2018-02 2018.02
Released 2018-02-15, tagged as
[v2018.02](https://github.com/mosra/magnum/releases/tag/v2018.02). See the
[release announcement](https://blog.magnum.graphics/announcements/2018.02/) for
a high-level overview.
@subsection changelog-2018-02-dependencies Dependency changes
- Completely removed NaCl support (see https://blog.chromium.org/2017/05/goodbye-pnacl-hello-webassembly.html,
[mosra/magnum#198](https://github.com/mosra/magnum/issues/198))
- Dropped support for the old MinGW32 (only MinGW-w64 is supported now) (see
[mosra/magnum#46](https://github.com/mosra/magnum/issues/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
@subsection changelog-2018-02-new New features
- MSVC 2015 and MSVC 2017 support in `master` branch (see
[mosra/magnum#96](https://github.com/mosra/magnum/issues/96),
[mosra/magnum#209](https://github.com/mosra/magnum/pull/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](https://github.com/mosra/magnum/issues/82))
- WebAssembly support when building for Emscripten (see also
[mosra/magnum-bootstrap#11](https://github.com/mosra/magnum-bootstrap/issues/11))
- WebGL 2.0 support
- New OpenGL extension support:
- @gl_extension{EXT,draw_buffers} ES2 extension
- @gl_extension{EXT,sRGB_write_control} ES extension
- @gl_extension{NV,polygon_mode} ES extension
- @gl_extension{KHR,blend_equation_advanced},
@gl_extension2{KHR,blend_equation_advanced_coherent,KHR_blend_equation_advanced}
desktop and ES extensions
- @gl_extension{ANDROID,extension_pack_es31a} ES3 extension, which
includes:
- @gl_extension{OES,texture_storage_multisample_2d_array}
- @gl_extension{OES,texture_stencil8}
- @gl_extension{EXT,texture_border_clamp}
- @gl_extension{EXT,texture_cube_map_array}
- @gl_extension{EXT,texture_buffer}
- @gl_extension{EXT,geometry_shader}
- @gl_extension{EXT,tessellation_shader}
- @gl_extension{NV,shader_noperspective_interpolation} ES3 extension
- @gl_extension{EXT,texture_compression_s3tc} desktop and ES extension,
@webgl_extension{WEBGL,compressed_texture_s3tc} WebGL extension
- @gl_extension2{KHR,texture_compression_astc_ldr,KHR_texture_compression_astc_hdr},
@gl_extension{KHR,texture_compression_astc_hdr} desktop and ES
extension
- @gl_extension{EXT,unpack_subimage} and @gl_extension{NV,pack_subimage}
ES2 extensions
- @gl_extension{ARB,uniform_buffer_object} and its ES3/WebGL2
counterpart, except for data layout queries
- @gl_extension{ARB,texture_barrier}
- @gl_extension{ARB,shader_storage_buffer_object} and its ES3.1
counterpart
- @gl_extension{ARB,compute_shader} and its ES3.1 counterpart
- @gl_extension{ARB,shader_image_load_store} and its ES3.1 counterpart
- @gl_extension{KHR,no_error} desktop and ES extension
- @gl_extension{EXT,shader_framebuffer_fetch}, @gl_extension{ARM,shader_framebuffer_fetch}
and @gl_extension{ARM,shader_framebuffer_fetch_depth_stencil} (partial
support)
- @gl_extension{ARB,transform_feedback2},
@gl_extension{ARB,transform_feedback3},
@gl_extension{AMD,transform_feedback3_lines_triangles},
@gl_extension{ARB,transform_feedback_overflow_query} desktop extension
and their ES3 counterparts, if applicable
(see [mosra/magnum#53](https://github.com/mosra/magnum/issues/53))
- Compressed image support:
- Added @ref CompressedPixelFormat enum, @ref CompressedImage,
@ref CompressedImageView and
@ref GL::CompressedBufferImage "CompressedBufferImage" classes
- Added @ref GL::Texture::setCompressedImage() "*Texture::setCompressedImage()",
@ref GL::Texture::setCompressedSubImage() "*Texture::setCompressedSubImage()"
and @ref GL::Texture::compressedImage() "Texture::compressedImage()"
functions
- Added @ref GL::Renderer::Hint::TextureCompression "Renderer::Hint::TextureCompression"
enum value
- Ability to pass arguments to engine startup via
@ref GL::Context "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`
- Published OpenGL test setup code to a new @ref GL::OpenGLTester "OpenGLTester"
library and added GPU time benchmarking to it
- Added @ref PixelStorage class, tracking OpenGL pixel storage state and
applying it prior to read and upload of image data (see
[mosra/magnum#104](https://github.com/mosra/magnum/issues/104))
- Added @ref NoCreate tag to control initialization of GL object classes
- Added templated version of @ref GL::Buffer::map() "Buffer::map*()"
functions
- New `BUILD_MULTITHREADED` @ref cmake "CMake option" and a corresponding
@cpp MAGNUM_BUILD_MULTITHREADED @ce CMake variable and preprocessor define
- Added @ref GL::Framebuffer::detach() "Framebuffer::detach()" as a
conunterpart to all the @ref GL::Framebuffer::attachTexture() "attach*()"
functions
- Added @ref GL::Framebuffer::attachLayeredTexture() "Framebuffer::attachLayeredTexture()"
for layered texture attachments
- Added @ref GL::AbstractFramebuffer::clearDepth() "AbstractFramebuffer::clearDepth()",
@ref GL::AbstractFramebuffer::clearStencil() "AbstractFramebuffer::clearStencil()",
@ref GL::AbstractFramebuffer::clearDepthStencil() "AbstractFramebuffer::clearStencil()",
@ref GL::DefaultFramebuffer::clearColor() "DefaultFramebuffer::clearColor()",
@ref GL::Framebuffer::clearColor() "Framebuffer::clearColor()"
- Added @ref GL::BufferImage::release() "{Compressed,}BufferImage::release()"
and an ability to create @ref GL::BufferImage "{Compressed,}BufferImage"
from an existing @ref GL::Buffer "Buffer"
- New @ref GL::Buffer::mapRead() "Buffer::mapRead()" convenience alternatives
to @ref GL::Buffer::map() "Buffer::map()" that return @cpp const @ce
pointer and implicitly map as read-only
- Implemented @ref GL::Renderer::setMemoryBarrier() "Renderer::setMemoryBarrier()"
and @ref GL::Renderer::setMemoryBarrierByRegion() "Renderer::setMemoryBarrierByRegion()"
- Added @ref GL::isVersionES() "isVersionES()" utility
- Added @ref GL::Context::isCoreProfile() "Context::isCoreProfile()"
- Added @ref GL::TransformFeedback::maxVertexStreams() "TransformFeedback::maxVertexStreams()"
limit query
@subsubsection changelog-2018-02-new-audio Audio library
- Ported to Emscripten (see [mosra/magnum#216](https://github.com/mosra/magnum/pull/216)
- Added @ref Audio::Source::position(), @ref Audio::Source::velocity(),
@ref Audio::Source::isRelative(), @ref Audio::Source::gain(),
@ref Audio::Source::minGain(), @ref Audio::Source::maxGain(),
@ref Audio::Source::referenceDistance(), @ref Audio::Source::rolloffFactor(),
@ref Audio::Source::maxDistance(), @ref Audio::Source::direction(),
@ref Audio::Source::innerConeAngle(), @ref Audio::Source::outerConeAngle(),
@ref Audio::Source::outerConeGain(), @ref Audio::Source::pitch() getters
(see [mosra/magnum#107](https://github.com/mosra/magnum/pull/107))
- Added @ref Audio::Renderer::listenerPosition(), @ref Audio::Renderer::listenerOrientation(),
@ref Audio::Renderer::listenerVelocity(), @ref Audio::Renderer::listenerGain(),
@ref Audio::Renderer::dopplerFactor(), @ref Audio::Renderer::speedOfSound(),
@ref Audio::Renderer::distanceModel() getters (see
[mosra/magnum#107](https://github.com/mosra/magnum/pull/107))
- Added debug operator for @ref Audio::Renderer::DistanceModel
- Added @ref Audio::Playable, @ref Audio::Listener scene graph features and
@ref Audio::PlayableGroup feature group (see
[mosra/magnum#110](https://github.com/mosra/magnum/pull/110),
[mosra/magnum#116](https://github.com/mosra/magnum/pull/116))
- New namespace @ref Audio::Extensions for OpenAL extensions, similar to
@ref GL::Extensions "Extensions" for OpenGL (see
[mosra/magnum#111](https://github.com/mosra/magnum/pull/111))
- HRTF support through @ref Audio::Context::Configuration::setHrtf(),
@ref Audio::Context::isHrtfEnabled(), @ref Audio::Context::hrtfStatus()
(see [mosra/magnum#121](https://github.com/mosra/magnum/pull/121))
- Floating-point audio support in @ref Audio::Buffer
- @ref Audio::WavImporter "WavAudioImporter" plugin now supports more
formats, is more flexible and gives better errors (see
[mosra/magnum#174](https://github.com/mosra/magnum/issues/174),
[mosra/magnum#175](https://github.com/mosra/magnum/pull/175),
[mosra/magnum#176](https://github.com/mosra/magnum/pull/176),
[mosra/magnum#177](https://github.com/mosra/magnum/pull/177),
[mosra/magnum#179](https://github.com/mosra/magnum/pull/179))
- New @ref magnum-al-info "magnum-al-info" utility, available for all desktop
platforms and Emscripten
@subsubsection changelog-2018-02-new-debugtools DebugTools library
- Added @ref DebugTools::bufferData(), @ref DebugTools::bufferSubData()
and @ref DebugTools::textureSubImage() debugging helpers to emulate missing
functionality on OpenGL ES
- New @ref DebugTools::CompareImage class for fuzzy image comparison in
@ref Corrade::TestSuite
@subsubsection changelog-2018-02-new-math Math library
- New @ref Math::Bezier class for handling N-dimensional M-order Bézier
curves (see [mosra/magnum#165](https://github.com/mosra/magnum/pull/165))
- New @ref Math::Frustum class and @ref Math::Geometry::Intersection::pointFrustum(),
`Math::Geometry::Intersection::boxFrustum()` functions (see
[mosra/magnum#185](https://github.com/mosra/magnum/pull/185)
- New @ref Math::Half class, @link Math::Literals::operator""_h @endlink
literal and @ref Math::packHalf() and @ref Math::unpackHalf() functions
- New @ref Math::Color3::fromSrgb(), @ref Math::Color3::toSrgb(),
@ref Math::Color4::fromSrgbAlpha(), @ref Math::Color4::toSrgbAlpha()
- 8-bit and float RGB, RGBA, sRGB and sRGBA literals in @ref Math::Literals
namespace
- Added @ref Math::Color3::fromXyz() "Math::Color*::fromXyz()",
@ref Math::Color3::toXyz() "Math::Color*::toXyz()", @ref Math::xyYToXyz()
and @ref Math::xyzToXyY()
- New @ref Math::pack() and @ref Math::unpack() functions for (un)packing
floats to an integral range with given number of bits
- Implemented @ref Math::sclerp() for dual quaternions (see
[mosra/magnum#114](https://github.com/mosra/magnum/pull/114),
[mosra/magnum#117](https://github.com/mosra/magnum/issues/117),
[mosra/magnum#118](https://github.com/mosra/magnum/pull/118),
[mosra/magnum#122](https://github.com/mosra/magnum/pull/122)
- Added @ref Math::sincos() for real and @ref Math::Dual numbers
- Added @ref Math::clamp() taking three vectors
- Added @ref Math::min() / @ref Math::max() taking a vector and a scalar
- Added @ref Math::min(), @ref Math::max() and @ref Math::minmax() for value
ranges (see [mosra/magnum#193](https://github.com/mosra/magnum/pull/193))
- Added @ref Math::pow(), @ref Math::log() and @ref Math::exp()
- Added @ref Math::Algorithms::qr(), @ref Math::Algorithms::gaussJordanInverted(),
@ref Math::Algorithms::kahanSum()
- Added `Math::Geometry::Distance::pointPlane()`,
`Math::Geometry::Distance::pointPlaneScaled()`,
`Math::Geometry::Distance::pointPlaneNormalized()` functions
- Added @ref Math::Range::contains() and @ref Math::join() to join two ranges
- Ability to convert @ref Math::Complex, @ref Math::DualComplex,
@ref Math::Quaternion, @ref Math::DualQuaternion, @ref Math::Color3,
@ref Math::Color4 and @ref Math::Range classes from/to external
representation
- Ability to construct @ref Math::Dual, @ref Math::Complex and
@ref Math::Quaternion from a different underlying type
- Added @ref Math::ZeroInit, @ref Math::NoInit, @ref Math::IdentityInit tags
to control initialization of all math classes
- Added @cpp Math::lerp(const Vector<size, T>&, const Vector<size, T>&, const BoolVector<size>&) @ce
- Added @ref Math::Vector::flipped(), @ref Math::RectangularMatrix::flippedCols(),
@ref Math::RectangularMatrix::flippedRows()
- Added @ref Math::TypeTraits::name() and @ref Math::TypeTraits::equalsZero()
- Added @ref Math::RectangularMatrix::setRow()
- Ability to multiply and divide @ref Math::Dual with a real number
- Ability to access @ref Math::Dual members via reference
- Ability to construct @ref Math::DualQuaternion from dual vector and scalar
- Ability to save and restore @ref Deg and @ref Rad from
@ref Corrade::Utility::Configuration
- Explicit bool conversion for @cpp Math::BoolVector @ce (see
[mosra/magnum#182](https://github.com/mosra/magnum/issues/182))
- Component-wise comparison for @ref Math::RectangularMatrix
- Ability to construct @ref Math::RectangularMatrix and derived classes
with one value for all components
@subsubsection changelog-2018-02-new-platform Platform libraries
- New @ref Platform::GlfwApplication class (see
[mosra/magnum#141](https://github.com/mosra/magnum/pull/141),
[mosra/magnum#160](https://github.com/mosra/magnum/pull/160),
[mosra/magnum-bootstrap#6](https://github.com/mosra/magnum-bootstrap/pull/6))
- Text input support in @ref Platform::Sdl2Application and
@ref Platform::GlfwApplication (see [mosra/magnum#129](https://github.com/mosra/magnum/issues/129))
- Added @cpp Platform::WindowlessWindowsEglApplication @ce and
@ref Platform::WindowlessIosApplication for ANGLE and iOS
- New @ref Platform::WindowlessEglApplication that works on headless NVidia,
Mesa drivers and Emscripten (see [mosra/magnum#133](https://github.com/mosra/magnum/pull/133))
- New @ref Platform::WindowlessGlxContext "Platform::Windowless*Context"
classes that manage OpenGL context to make threaded context creation
possible
- Ported @ref magnum-gl-info "magnum-info" to Emscripten
- First-class support for scroll events in
@ref Platform::Sdl2Application::MouseScrollEvent (see
[mosra/magnum#157](https://github.com/mosra/magnum/pull/157))
- Added @ref Platform::Sdl2Application::MouseEvent::clickCount()
- Added @ref Platform::Sdl2Application::multiGestureEvent()
- Exposing key repeat in
@ref Platform::Sdl2Application::KeyEvent::isRepeated() "Platform::*Application::KeyEvent::isRepeated()"
(see [mosra/magnum#161](https://github.com/mosra/magnum/issues/161),
[mosra/magnum#162](https://github.com/mosra/magnum/pull/162))
- Added @ref Platform::Sdl2Application::setMinimalLoopPeriod(), which, along
with @ref Platform::Sdl2Application::setSwapInterval() replaces
@cpp Timeline::setMinimalFrameTime() @ce
- Added @ref Platform::Sdl2Application::window() and
@ref Platform::GlfwApplication::window() to access the underlying window
handle
- Added @ref Platform::Sdl2Application::tickEvent()
- Added @ref Platform::GLContext::tryCreate() "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](https://github.com/mosra/magnum/issues/105))
- Added @cpp Platform::Sdl2Application::Configuration::setSRGBCapable() @ce
- Added @ref Platform::Sdl2Application::Configuration::WindowFlag::Borderless
and `Platform::Sdl2Application::Configuration::WindowFlag::AllowHighDpi`
for iOS and macOS
- Added @ref Platform::WindowlessGlxApplication::Configuration::setFlags() "Platform::Windowless*Application::Configuration::setFlags()" with
@ref Platform::WindowlessGlxApplication::Configuration::Flag::Debug "Flag::Debug"
- @ref magnum-gl-info "magnum-info" now accepts `--short` and
`--extension-strings` options
- Added @ref Platform::Sdl2Application::windowSize(),
@ref Platform::GlfwApplication::windowSize()
- Extended @ref Platform::Sdl2Application::KeyEvent::Key to be consistent
with @ref Platform::GlfwApplication
- Added modifier keys to
@ref Platform::Sdl2Application::KeyEvent::Key "Platform::*Application::KeyEvent::Key"
- Added @ref Platform::Sdl2Application::InputEvent::Modifier::Super to be
consistent with @ref Platform::GlfwApplication (see
[mosra/magnum#159](https://github.com/mosra/magnum/pull/159))
- Added @ref Platform::Sdl2Application::KeyEvent::keyName() "Platform::*Application::KeyEvent::keyName()"
- It's now possible to iterate main loop manually using
@ref Platform::Sdl2Application::mainLoopIteration()
- Ability to pass command-line arguments to Emscripten browser apps, see
@ref Platform::Sdl2Application and @ref Platform::WindowlessEglApplication
for more information
@subsubsection changelog-2018-02-new-primitives Primitives library
- New @ref Primitives::axis2D() and @ref Primitives::axis3D() primitives
@subsubsection changelog-2018-02-new-shaders Shaders library
- Ability to construct all @ref Shaders classes without an OpenGL context
present using @ref NoCreate
@subsubsection changelog-2018-02-new-text Text library
- New @ref Text::AbstractFont::ascent() and @ref Text::AbstractFont::descent()
font properties
@subsubsection changelog-2018-02-new-trade Trade library
- New @ref magnum-imageconverter "magnum-imageconverter" utility
- Initial implementation of @ref Trade::CameraData and @ref Trade::LightData
- Vertex color support in @cpp Trade::MeshData2D @ce and
@cpp Trade::MeshData3D @ce
- @ref Trade::AbstractImageConverter member functions were changed to
non-@cpp const @ce to make implementation of complex converter plugins possible
- New @cpp Trade::AbstractImageConverter::exportToCompressedImage() @ce
plugin interface and @cpp Trade::AbstractImageConverter::exportToData() @ce,
@cpp Trade::AbstractImageConverter::exportToFile() @ce taking
@ref CompressedImageView as a parameter
- Providing access to plugin manager in @ref Trade::AbstractImporter,
@ref Trade::AbstractImageConverter and @ref Audio::AbstractImporter plugin
APIs now have access to the plugin manager in order to be able to load
other plugins
- @ref Trade::ImageData now handles both compressed and uncompressed
images, @ref Trade::AbstractImageConverter is able to take it and then
delegate to proper function based on whether the image is commpressed or
not
- @ref Trade::AbstractImporter and all `Trade::*Data` classes now provide
member `importerState()` functions allowing the user to access
importer-specific state
- Added @ref Trade::AbstractImporter::openState() (see
[mosra/magnum#225](https://github.com/mosra/magnum/pull/225))
- @ref magnum-distancefieldconverter "magnum-distancefieldconverter" now uses
@ref Trade::AnyImageConverter "AnyImageConverter" by default
- @ref Trade::TgaImporter "TgaImporter" sets proper @ref PixelStorage
alignment if rows are not four-byte aligned
- @ref Trade::TgaImageConverter "TgaImageConverter" now properly handles
@ref PixelStorage parameters
@subsection changelog-2018-02-changes 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 @ref GL::Mesh "Mesh" class now stores a copy of @ref GL::Buffer "Buffer"
instance instead of reference, meaning that you can move your buffers
freely after assigning them to a mesh
- @ref GL::Texture::setStorage() "*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](https://github.com/mosra/magnum/issues/214))
- @ref Trade::TgaImporter "TgaImporter" and @ref Trade::TgaImageConverter "TgaImageConverter"
now consistently use RGB(A) on all platforms and don't require BGR(A) on
desktop
- Ignoring @cpp "No errors." @ce message produced by GLSL compiler/linker on
Intel Windows drivers.
- @ref GL::Texture::image() "*Texture::image()" and
@ref GL::Framebuffer::read() "*Framebuffer::read()"
now reallocate image data only if needed, for both @ref Image and
@ref GL::BufferImage "BufferImage" types
- R-value @ref Image "Image*" no longer restricts conversion to
@ref ImageView as it is a valid use case (for example passing output from
@ref GL::Framebuffer::read() "Framebuffer::read()" directly to
@cpp Trade::AbstractImageConverter::exportToFile() @ce)
- It's no longer possible to call @ref Image::data() "Image*::data()" on
r-value instances as that would cause accessing freed data. Use
@ref Image::release() instead.
- @ref GL::Buffer::map() "Buffer::map()" now returns
@ref Corrade::Containers::ArrayView instead of a plain pointer for better
security
- Improved @ref GL::Context::resetState() "Context::resetState()" to better
handle corner cases with VAOs
- Graceful handling of broken GL contexts
- Behavior of @ref GL::Version::GLES200 "Version::GLES200" and upwards on
desktop OpenGL is changed to request an ES dialect of GLSL when used in
@ref GL::Shader "Shader" (instead of a particular desktop GL version that
supports given ES version), looks for @gl_extension{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
@gl_extension{ARB,vertex_array_object} disabled
- It's now possible to create @ref ImageView with @cpp nullptr @ce data (for
example for old-style texture allocation using
@ref GL::Texture::setImage() "Texture::setImage()")
- Various workarounds to make the engine working better on SVGA3D drivers
(VMWare guest)
- Various updates and code modernization (see
[mosra/magnum#200](https://github.com/mosra/magnum/pull/200))
@subsubsection changelog-2018-02-changes-math Math library
- @ref Double types are no longer restricted to just desktop GL builds, all
related types also work on ES and WebGL builds
- Default-constructed @ref Color4 has zero alpha now instead of fully opaque
black
- Proper implementation of @ref Math::Vector::isZero() for integers
- @ref Math::Matrix4::transformPoint() now properly uses the perspective
divide from projection matrices
- Updated @ref Math::TypeTraits fuzzy comparison epsilon values for
@cpp long double @ce and @cpp double @ce
- @ref Math::Matrix4::perspectiveProjection() now supports infinite far plane
- @ref Math::pow() now works for both vectors and scalars
- @ref Math::Vector::minmax() now works on arbitrary vectors instead of just
@ref Math::Vector2
@subsubsection changelog-2018-02-changes-platform Platform library
- Requesting core OpenGL context by default in @ref Platform::WindowlessGlxApplication
and @ref 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.
- @ref Platform::Sdl2Application now leaves windows positioning on the system
instead of forcing the window to be centered
- @ref Platform::Sdl2Application now shows the window only once the GL
context is fully created to avoid flickering
@subsubsection changelog-2018-02-changes-shaders Shaders library
- @cpp Shaders::Flat @ce now sets default color to white only in textured
version
- @cpp Shaders::Phong @ce gained the ability to have both color and texture
- @cpp Shaders::Phong @ce is now able to do alpha-masking (see
[mosra/magnum#112](https://github.com/mosra/magnum/issues/112),
[mosra/magnum-examples#29](https://github.com/mosra/magnum-examples/issues/29))
@subsection changelog-2018-02-buildsystem Build system
- Continuous testing for Linux, macOS, Windows MSVC, Windows MinGW, Windows RT,
iOS, Android and Emscripten on [Travis CI](https://travis-ci.org/mosra/magnum)
and [AppVeyor CI](https://ci.appveyor.com/project/mosra/magnum), with code
coverage on [codecov.io](https://codecov.io/gh/mosra/magnum); replacing the
unmaintained and outdated Jenkins configuration (see
[mosra/magnum#99](https://github.com/mosra/magnum/issues/99),
[mosra/magnum#120](https://github.com/mosra/magnum/pull/120),
[mosra/magnum#142](https://github.com/mosra/magnum/pull/142),
[mosra/magnum#203](https://github.com/mosra/magnum/pull/203))
- Support for CMake subprojects. You can now clone Magnum into a subdirectory
in your project and add it using @cmake add_subdirectory() @ce. The
@cmake find_package() @ce command will then use the CMake subproject
instead of looking for it in system-wide locations. See
[mosra/magnum#49](https://github.com/mosra/magnum/issues/49).
[mosra/magnum#140](https://github.com/mosra/magnum/issues/140).
- Reworked CMake buildsystem to use the new imported target workflow, see
@ref cmake for more information (see
[mosra/magnum#103](https://github.com/mosra/magnum/issues/103))
- CMake targets are now organized in folders for better development
experience in IDEs such as Visual Studio or Xcode
- Added @ref building-packages-brew "Homebrew package"
- Improvements and dependency updates to the
@ref building-packages-deb "Debian package" (see
[mosra/magnum#119](https://github.com/mosra/magnum/issues/119))
- Ability to build OpenGL tests also on Windows and macOS (see `BUILD_GL_TESTS`
@ref building-features "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](https://github.com/mosra/magnum-examples/issues/9))
- `MACOSX_RPATH` is now enabled by default on CMake 3.0+ (see
[mosra/magnum#126](https://github.com/mosra/magnum/pull/126)
- Enabling only C++ in CMake @cmake project() @ce call, if possible, to speed
up initial CMake run
- Windowless application libraries now make use of the `BUILD_STATIC_PIC`
@ref cmake "CMake option"
- Fixed `FindSDL2.cmake` module to work out-of-the-box on Windows and macOS
(see [mosra/magnum#166](https://github.com/mosra/magnum/pull/166))
- Fixed `FindSDL2.cmake` to link to EGL when targeting GLES (see
[mosra/magnum-examples#9](https://github.com/mosra/magnum-examples/issues/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](https://github.com/mosra/toolchains/pull/2),
[mosra/toolchains#3](https://github.com/mosra/toolchains/issues/3))
@subsection changelog-2018-02-bugfixes Bug fixes
- Wrapping mode for @ref GL::CubeMapTexture "CubeMapTexture" is now correctly
two-dimensional instead of three-dimensional, wrapping mode for
@ref GL::Texture2DArray "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
- @ref Trade::ObjImporter "ObjImporter" plugin now opens the files as binary
to avoid line ending issues
- Various compatibility updates to the @ref Shaders library
- Updates to OpenGL tests to work better on non-NVidia cards
- Various fixes for OpenGL object label queries on AMD drivers
- Fixed @cpp TextureTools::distanceField() @ce on 3.0 &lt;= GL < 3.2
- Fixed driver crash on AMD with @cpp TextureTools::distanceField() @ce
- @ref GL::Framebuffer::attachCubeMapTexture() "Framebuffer::attachCubeMapTexture()"
incorrectly behaved as a layered attachment (see
[mosra/magnum#123](https://github.com/mosra/magnum/issues/123))
- Fixed object label queries using the @gl_extension{EXT,debug_label}
extension
- @gl_extension{EXT,direct_state_access} function was accidentally used in
@gl_extension{ARB,direct_state_access} code path, causing crashes on Mesa
- Properly export @ref GL::Framebuffer::DrawAttachment "Framebuffer::DrawAttachment"
to avoid linker failures on Windows
- Fixed @ref GL::Framebuffer "Framebuffer" attachments on GLES2 drivers w/o
separate read/draw bindings (see
[mosra/magnum#204](https://github.com/mosra/magnum/issues/204))
- Fixed @ref GL::Framebuffer "Framebuffer" binding on WebGL (see
[mosra/magnum#134](https://github.com/mosra/magnum/pull/134))
- On Emscripten, @ref 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.
- @ref Platform::WindowlessWglApplication is fixed to allow the GL context to
be created and destroyed multiple times during application run
- @ref SceneGraph::Camera now works properly with @ref Double underlying type
- It's now possible to delete a running @ref SceneGraph::Animable
- @ref Text::AbstractLayouter has now a virtual destructor to avoid leaking
its subclasses
- Fixed @ref Trade::ObjImporter on Android
- Fixed assertion when using @ref DebugTools::ObjectRenderer
- Fixed appearance of `Primitives::Cylinder::solid()` and
`Primitives::Circle::solid()` (see [mosra/magnum#197](https://github.com/mosra/magnum/pull/197),
[mosra/magnum#220](https://github.com/mosra/magnum/pull/220))
- Fixed a possible OOB access when reading @ref Math::Vector /
@ref Math::RectangularMatrix from @ref Corrade::Utility::Configuration
- Fixed unfortunate interaction of VAOs and index buffers on platforms
without direct state access
- Fixed resetting a bit in @cpp Math::BoolVector::set() @ce (see
[mosra/magnum#208](https://github.com/mosra/magnum/issues/208),
[mosra/magnum#
- @ref Audio::Context::hrtfSpecifierString() was crashing on systems
supporting only @alc_extension{SOFTX,HRTF} and not @alc_extension{SOFT,HRTF}
- Fixed bad interaction of builtin OpenGL headers and Qt on macOS (see
[mosra/magnum#212](https://github.com/mosra/magnum/issues/212))
- Fixed building for Android with standard build systems (see
[mosra/magnum#131](https://github.com/mosra/magnum/issues/131))
- Fixed building of WGL context library (see
[mosra/magnum#137](https://github.com/mosra/magnum/pull/137))
- Various compilation warning/error fixes on various compilers (see
[mosra/magnum#100](https://github.com/mosra/magnum/issues/100),
[mosra/magnum#109](https://github.com/mosra/magnum/issues/109),
[mosra/magnum#138](https://github.com/mosra/magnum/pull/138),
[mosra/magnum#189](https://github.com/mosra/magnum/issues/189),
[mosra/magnum#190](https://github.com/mosra/magnum/pull/190))
@subsection changelog-2018-02-deprecated Deprecated APIs
- `Timeline::setMinimalFrameTime()` is deprecated, use
@ref Platform::Sdl2Application::setSwapInterval() "Platform::*Application::setSwapInterval()"
and/or @ref Platform::Sdl2Application::setMinimalLoopPeriod() "Platform::*Application::setMinimalLoopPeriod()"
instead
- `SceneGraph::Camera2D::setProjection()`,
`SceneGraph::Camera3D::setOrthographic()` and
`SceneGraph::Camera3D::setPerspective()` are deprecated, use
@ref SceneGraph::Camera::setProjectionMatrix() in combination with
@ref Matrix3::projection(), @ref Matrix4::orthographicProjection() and
@ref Matrix4::perspectiveProjection() instead
- `SceneGraph::AbstractCamera`, `SceneGraph::AbstractBasicCamera2D`,
`SceneGraph::AbstractBasicCamera3D`, `SceneGraph::AbstractCamera2D` and
`SceneGraph::AbstractCamera3D` are deprecated, use @ref SceneGraph::Camera,
@ref SceneGraph::BasicCamera2D, @ref SceneGraph::BasicCamera3D, @ref SceneGraph::Camera2D and @ref SceneGraph::Camera3D instead
- `Math::Matrix::IdentityType`, `Math::Matrix::ZeroType`,
`Math::Matrix::Identity` and `Math::Matrix::Zero` are deprecated, use the
new @ref Math::IdentityInit and @ref Math::ZeroInit tags instead
- `AbstractShaderProgram::setUniform(Int, UnsignedInt, const T*)` is
deprecated, use @ref GL::AbstractShaderProgram::setUniform(Int, Containers::ArrayView<const Float>) "AbstractShaderProgram::setUniform(Int, Containers::ArrayView<const T>)"
instead
- `Magnum/ImageReference.h` header and `ImageReference` type is deprecated,
use @ref Magnum/ImageView.h and @ref ImageView instead
- `Magnum/Color.h` header and `BasicColor3` and `BasiColor4` types are
deprecated, use @ref Magnum/Math/Color.h, @ref Math::Color3 and
@ref Math::Color4 instead
- `Magnum/ColorFormat.h` header and `ColorFormat` and `ColorType` enums are
deprecated, use @ref Magnum/GL/PixelFormat.h "Magnum/PixelFormat.h",
@ref GL::PixelFormat "PixelFormat" and @ref GL::PixelType "PixelType"
instead
- @ref Image, @ref ImageView, @ref Trade::ImageData constructors,
`Image::setData()` and `ImageView::setData()` taking `void*` are
deprecated, use constructors and functions taking
@ref Corrade::Containers::Array / @ref Corrade::Containers::ArrayView
instead
- Templated @ref GL::Buffer::data() "Buffer:.data()",
@ref GL::Buffer::subData() "Buffer::subData()" and
@ref GL::Buffer::map() "Buffer::map()" are deprecated, use the
non-templated versions in combination with @ref Corrade::Containers::arrayCast()
instead (see [mosra/magnum#213](https://github.com/mosra/magnum/issues/213))
- `CubeMapTexture::Coordinate` enum is deprecated, use
@ref GL::CubeMapCoordinate "CubeMapCoordinate" instead
- @ref GL::Context::current() "Context::current()" and
@ref Audio::Context::current() returning a pointer is deprecated, it's
returning a reference now and asserts that a context exists. Use
@ref GL::Context::hasCurrent() "Context::hasCurrent()" and
@ref Audio::Context::hasCurrent() to check for context presence.
- Angle literals available directly in the @ref Magnum namespace are
deprecated, import the @ref Math::Literals namespace instead
- `Platform::Sdl2Application::MouseEvent::Button::WheelUp`,
`Platform::Sdl2Application::MouseEvent::Button::WheelDown`,
`Platform::GlfwApplication::MouseEvent::Button::WheelUp` and
`Platform::GlfwApplication::MouseEvent::Button::WheelDown` mouse events are
deprecated, use @ref Platform::Sdl2Application::mouseScrollEvent() /
@ref Platform::GlfwApplication::mouseScrollEvent() and
@ref Platform::Sdl2Application::MouseScrollEvent /
@ref Platform::GlfwApplication::MouseScrollEvent instead
- @ref Platform::Sdl2Application::Sdl2Application() "Platform::*Application::*Application()"
and @ref Platform::WindowlessGlxApplication::WindowlessGlxApplication() "Platform::Windowless*Application::Windowless*Application()"
constructors taking @cpp nullptr @ce are deprecated, use constructors
taking @ref NoCreateT instead to create an application without creating
OpenGL context
- `Math::Color*::fromHSV()` and `Math::Color*::toHSV()` are deprecated, use
@ref Math::Color3::fromHsv() "Math::Color*::fromHsv()" and
@ref Math::Color3::toHsv() "Math::Color*::toHsv()" instead
- `Math::normalize()` and `Math::denormalize()` had confusing naming and thus
are deprecated, use @ref Math::pack() and @ref Math::unpack() from the
@ref Magnum/Math/Packing.h header instead
- @cpp Trade::MeshData2D @ce and @cpp Trade::MeshData3D @ce constructors
without the `colors` parameter are deprecated, use the full ones instead
- @cpp Shaders::Generic::Color @ce vertex attribute implicit constructor is
deprecated, use a constructor with explicit component count instead
- The bundled @ref std::optional implementation was causing serious conflicts
with C++17 and it's now deprecated in favor of
@ref Corrade::Containers::Optional. (Deprecated) aliases and conversion
operators are provided for backwards compatibility.
- `Audio::Context::hrtfSpecifier()` is deprecated, use
@ref Audio::Context::hrtfSpecifierString() instead
@subsection changelog-2018-02-compatibility 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()` and `Context::minorVersion()` functions,
use @ref Context::version() instead
- Removed deprecated `Magnum/DebugMarker.h` header, use
`Magnum/DebugOutput.h` and @ref GL::DebugMessage "DebugMessage" class
instead
- Removed deprecated `*Buffer` values from
@ref GL::FramebufferBlit "FramebufferBlit", use values without the `Buffer`
suffix
- Removed deprecated list-argument functions taking pointers from @ref Audio
and @ref SceneGraph libraries, use lists of references instead
- Removed deprecated texture unit enums from @ref Shaders library, use
dedicated texture setters instead
- Removed deprecated `*Texture::maxLayers()` functions, use
@ref GL::Shader::maxCombinedTextureImageUnits() "Shader::maxCombinedTextureImageUnits()"
instead
- Removed deprecated @cpp MeshTools::combineIndexedArrays() @ce,
@ref MeshTools::compressIndices(), @ref MeshTools::interleave() and
@cpp MeshTools::removeDuplicates() @ce overloads, use the general ones
instead
- Removed deprecated `Mesh*::set*{Range,Count}()` functions, use
@ref GL::Mesh::setCount() "Mesh*::setCount()" and
@cpp MeshView::setIndexRange() @ce instead
- Removed deprecated parameterless @cpp GL::Mesh::draw() @ce overload, use
the one with explicit shader parameter instead
- Removed deprecated `Context::Flag::Robustness` enum value, use
@ref GL::Context::Flag::RobustAccess "Context::Flag::RobustAccess" instead
- Removed deprecated `Texture::Target` enum, use dedicated
@ref GL::Texture "Texture", @ref GL::TextureArray "TextureArray",
@ref GL::RectangleTexture "RectangleTexture" and
@ref GL::MultisampleTexture "MultisampleTexture" classes instead
- Removed deprecated @ref Resource conversion operator, use explicit
conversion instead
- Removed deprecated `Framebuffer::attachTexture*D()` overloads, use one of
@ref GL::Framebuffer::attachTexture() "Framebuffer::attachTexture()" or
@ref GL::Framebuffer::attachTextureLayer() "Framebuffer::attachTextureLayer()"
overloads instead.
- Removed `SceneGraph::Camera3D::near()` and `SceneGraph::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 and `Magnum/AbstractImage.h` header, its
functionality is present in the @ref Image "Image*" classes directly
- Removed `Image::dataSize()` function as it has ambiguous meaning in regards
to recently added features, use @ref Image::dataProperties() "Image::dataProperties()"
instead
- The `FindGLFW.cmake` now prefers absolute includes (i.e. `GLFW/glfw3.h`
instead of just `glfw3.h`). The @ref Platform::GlfwApplication now depends
on this, so be sure to update your copy to avoid build issues.
@subsection changelog-2018-02-performance Performance improvements
- Reduced size of and number of allocations in @ref GL::Mesh "Mesh" class.
@subsection changelog-2018-02-docs Documentation
- New documentation theme powered by [m.css](http://mcss.mosra.cz) and
related massive updates of *everything* (see
[mosra/magnum#113](https://github.com/mosra/magnum/issues/113))
- Explicit list of extensions that are available in WebGL builds
- New page explaining @ref opengl-wrapping "OpenGL wrapper layer"
- Documented extra CMake modules in @ref cmake-modules
- The @ref building documentation now prefers package installation instead of
manual build
- Clarified behavior of @ref Math::Matrix4::lookAt() (see
[mosra/magnum#127](https://github.com/mosra/magnum/issues/127))
- Documented how to use Vcpkg packages
- Updated links to OpenGL API documentation (see
[mosra/magnum#196](https://github.com/mosra/magnum/pull/196)
- Various other documentation updates (see
[mosra/magnum#94](https://github.com/mosra/magnum/pull/94),
[mosra/magnum#135](https://github.com/mosra/magnum/pull/135),
[mosra/magnum#170](https://github.com/mosra/magnum/issues/170),
[mosra/magnum-plugins#17](https://github.com/mosra/magnum-plugins/issues/17),
[mosra/magnum-bootstrap#8](https://github.com/mosra/magnum-bootstrap/issues/8))
@section changelog-2015-05 2015.05
Released 2015-05-09, tagged as
[v2015.05](https://github.com/mosra/magnum/releases/tag/v2015.05). See the
8 years ago
[release announcement](https://blog.magnum.graphics/announcements/may-2015-updates/)
for a high-level overview.
@subsection changelog-2015-05-new 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 @gl_extension{ARB,direct_state_acccess} (OpenGL 4.5)
everywhere except in Mesh.
- Support for @gl_extension{ARB,conditional_render_inverted} (OpenGL
4.5) in @cpp SampleQuery @ce.
- Support for @gl_extension{ARB,get_texture_sub_image} (OpenGL 4.5) in
@cpp *Texture::subImage() @ce.
- Support for @gl_extension{EXT,transform_feedback},
@gl_extension{ARB,transform_feedback2} (OpenGL 3.0, 4.0, OpenGL ES 3.0) in
new @cpp TransformFeedback @ce class, added
@cpp Renderer::Feature::RasterizerDiscard @ce.
- Support for @gl_extension{ARB,robustness_isolation} in
@cpp Renderer::graphicsResetStatus() @ce.
- Support for @gl_extension{ARB,framebuffer_sRGB} (OpenGL 3.0) in
@cpp Renderer::Feature::FramebufferSRGB @ce
- Support for @gl_extension{OES,texture_npot} ES extension.
- Support for debug groups from @gl_extension{KHR,debug} (OpenGL 4.5) and
@gl_extension{EXT,debug_marker} extensions in @cpp DebugGroup @ce class.
- Added @cpp CubeMapTexture::*image() @ce that returns all six faces
together.
- Added @cpp Primitives::Cube::solidStrip() @ce.
- Added @cpp AbstractShaderProgram::attachShaders() @ce as a list-based
complement to @cpp Shader::compile() @ce and
@cpp AbstractShaderProgram::link() @ce.
- Separated @cpp Renderer::setFeature() @ce into shorter
@cpp Renderer::enable() @ce and @cpp Renderer::disable() @ce.
- Added @cpp tau() @ce, @cpp piHalf() @ce, @cpp e() @ce, @cpp nan() @ce and
@cpp inf() @ce to @ref Math::Constants.
- Added @ref Math::Matrix4::shearingXY() "Math::Matrix[34]::shearing*()".
- Added @ref Math::Matrix4::lookAt() (see [mosra/magnum#88](https://github.com/mosra/magnum/issues/88)).
- Added @ref Math::Vector::pad().
- Added @ref Math::div().
- Using range-based-for to traverse object children and features in
@ref SceneGraph and screens in @ref Platform::BasicScreenedApplication "Platform::ScreenedApplication".
- Convenience overload for @cpp *Framebuffer::read() @ce and
@cpp *Texture::image() @ce that returns the queried image by value instead
of as parameter.
- Added @cpp Buffer::uniformOffsetAlignment() @ce and @cpp Mesh::maxElementIndex() @ce
limit queries.
- Added @cpp AbstractTexture::unbind() @ce for unbinding range of texture
units.
- Added @ref SceneGraph::AbstractObject::addFeature() and
@ref SceneGraph::Object::addChild() functions (see [mosra/magnum#86](https://github.com/mosra/magnum/issues/86)).
- VSync support in @ref Platform::Sdl2Application.
- Added `Platform::*Context` libraries for users which want to use custom
windowing toolkits instead of the ones provided.
- Improved documentation about @ref Shaders namespace, added sample image
for each.
@subsection changelog-2015-05-changes Changes
- Using [flextGL](https://github.com/ginkgo/flextgl) instead of `glLoadGen`
for OpenGL extension loading
- @ref Platform::Sdl2Application now tries to create core context on all
platforms, not just OSX (see [mosra/magnum#80](https://github.com/mosra/magnum/issues/80)).
- @cpp Buffer::bind() @ce, @cpp Buffer::unbind() @ce and @cpp Buffer::Target @ce
is now used for indexed buffer binding only.
- Moved static binary operations from @ref Math classes into free functions
for more convenient usage (see [mosra/magnum#74](https://github.com/mosra/magnum/issues/74)).
- Better algorithm for comparing floating-point values.
- Ensuring that all OpenGL objects are properly created before using them.
- Using @cpp const char @ce instead of @cpp const unsigned char @ce for raw
binary data.
- Removed annoying restriction when adding reference-counted resources to
@ref ResourceManager.
- Extension querying cleanup:
- Removed @gl_extension{APPLE,flush_buffer_range} extension.
- Replaced @gl_extension{APPLE,vertex_array_object} with
@gl_extension{ARB,vertex_array_object}.
- Replaced @gl_extension{NV,half_float} with @gl_extension{ARB,half_float_vertex}.
- Replaced @gl_extension{EXT,framebuffer_sRGB} with @gl_extension{ARB,framebuffer_sRGB}.
- Documentation cleanup, fixes and improvements.
@subsection changelog-2015-05-buildsystem 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. The `WITH_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](https://github.com/mosra/magnum/issues/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](https://github.com/mosra/magnum/issues/69),
[mosra/magnum#83](https://github.com/mosra/magnum/issues/83)).
@subsection changelog-2015-05-bugfixes Bug fixes
- Fixed @cpp TextureTools::distanceField() @ce to work in GLSL < 4.20 (see
[mosra/magnum#62](https://github.com/mosra/magnum/issues/62)).
- Fixed @cpp Shaders::MeshVisualizer @ce to work in GLSL ES.
- Fixed @cpp Shaders::*Vector @ce on Intel GPUs.
- Fixed assertion on contexts without default framebuffer (see
[mosra/magnum#93](https://github.com/mosra/magnum/issues/93)).
- Fixed cases where shader would use extension that is not advertised by the
driver.
- Properly handle case where
@fn_gl_extension{VertexArrayVertexAttribDivisor,EXT,direct_state_access} is
not available in the driver (see [mosra/magnum#77](https://github.com/mosra/magnum/issues/77)).
- Removed superfluous level argument from @cpp Framebuffer::attachTexture*() @ce
overloads for texture types that don't support mipmapping.
- Proper no-op fallback for @cpp *Framebuffer::invalidate() @ce
on platforms where the extensions is not supported (see
[mosra/magnum#63](https://github.com/mosra/magnum/issues/63)).
- Fixed garbage characters in shader compilation output (see
[mosra/magnum#87](https://github.com/mosra/magnum/issues/87)).
- Fixed memory corruption on MSVC 2013 (see [mosra/magnum#70](https://github.com/mosra/magnum/issues/70)).
- Fixed potential memory corruption errors with static build (see
[mosra/magnum#79](https://github.com/mosra/magnum/issues/79)).
- Fixed aspect-ratio-corrected projection with inverted Y in
@ref SceneGraph::Camera3D "SceneGraph::Camera*D".
- Fixed wheel direction in @ref Platform::Sdl2Application (see
[mosra/magnum#68](https://github.com/mosra/magnum/issues/68)).
- Fixed bogus version check in @ref Platform::WindowlessCglApplication (see
[mosra/magnum#92](https://github.com/mosra/magnum/issues/92))
- Fixed matrix to quaternion conversion algorithm.
- Two different headers in @ref Primitives had the same include guard by
accident (see [mosra/magnum#72](https://github.com/mosra/magnum/issues/53))
- Various compilation fixes on various platforms (see
[mosra/magnum#71](https://github.com/mosra/magnum/pull/71))
@subsection changelog-2015-05-deprecated Deprecated APIs
- The `Magnum/Query.h` header is deprecated, use one of
`Magnum/PrimitiveQuery.h`, `Magnum/SampleQuery.h` or
`Magnum/TimeQuery.h` instead.
- Using @cpp Buffer::Target @ce as constructor or @cpp Buffer::setTargetHint() @ce
parameter is deprecated, use @cpp Buffer::TargetHint @ce instead.
- The @cpp SceneGraph::TransformationType @ce enum is depracted, use separate
`<transform>()` and `<transform>Local()` variants instead.
- @cpp SceneGraph::AbstractObject::hasFeatures() @ce, @cpp firstFeature() @ce,
@cpp lastFeature() @ce, @cpp SceneGraph::Object::hasChildren() @ce,
@cpp firstChild() @ce and @cpp lastChild() @ce are deprecated, use methods on
linked list returned by @ref SceneGraph::AbstractObject::features() and
@ref SceneGraph::Object::children() instead.
- @cpp Platform::ScreenedApplication::frontScreen() @ce and
@cpp Platform::ScreenedApplication::backScreen() @ce are deprecated, use
methods on linked list returned by
@ref Platform::BasicScreenedApplication::screens() "Platform::ScreenedApplication::screens()"
instead.
- @cpp *Framebuffer::read() @ce functions taking two vectors are deprecated,
use overload taking @ref Range2Di instead.
- The @cpp Mesh::maxVertexAttributes() @ce function is deprecated, use
@cpp AbstractShaderProgram::maxVertexAttributes() @ce instead.
- @cpp Math::Vector::dot() @ce, @cpp Math::Complex::dot() @ce,
@cpp Math::Quaternion::dot() @ce, @cpp Math::Vector::angle() @ce,
@cpp Math::Complex::angle() @ce, @cpp Math::Quaternion::angle() @ce,
@cpp Math::Quaternion::lerp() @ce, @cpp Math::Quaternion::slerp() @ce,
@cpp Math::Vector2::cross() @ce and @cpp Math::Vector3::cross() @ce are
deprecated, use @ref Math::dot(), @ref Math::angle(),
@ref Math::lerp(), @ref Math::slerp() and @ref Math::cross() instead (see
[mosra/magnum#74](https://github.com/mosra/magnum/issues/74))
- The @cpp *Framebuffer::bind(FramebufferTarget) @ce function is deprecated,
use parameter-less @cpp *Framebuffer::bind() @ce instead.
- The @cpp FramebufferTarget::ReadDraw @ce enum value is deprecated, use
separate @cpp FramebufferTarget::Read @ce and @cpp FramebufferTarget::Draw @ce
values instead.
- @cpp CubeMapTexture::imageSize() @ce with explicit face parameter is
deprecated, use overload that returns one value for all faces instead.
- The `Magnum/DebugMessage.h` header is deprecated, use
`Magnum/DebugOutput.h` instead (see
[mosra/magnum#89](https://github.com/mosra/magnum/pull/89))
- The @cpp DebugMessage::Severity @ce enum is deprecated, use
@cpp DebugOutput::Severity @ce instead.
- The @cpp DebugMessage::Callback @ce typedef, @cpp DebugMessage::setCallback() @ce
and @cpp DebugMessage::setDefaultCallback() @ce function is deprecated, use
@cpp DebugOutput::Callback @ce, @cpp DebugOutput::setCallback() @ce and
@cpp DebugOutput::setDefaultCallback() @ce instead.
- The @cpp DebugMessage::maxLoggedMessages() @ce and
@cpp DebugMessage::maxMessageLength() @ce functions are deprecated, use
@cpp DebugOutput::maxLoggedMessages() @ce and
@cpp DebugOutput::maxMessageLength() @ce instead.
- The @cpp DebugMessage::setEnabled() @ce function and related values from
@cpp DebugMessage::Source @ce enum are deprecated, use
@cpp DebugOutput::setEnabled() @ce along with @cpp DebugOutput::Source @ce,
@cpp DebugOutput::Type @ce and @cpp DebugOutput::Severity @ce instead.
- Parameter-less @cpp *Query @ce constructor and parametrized
@cpp *Query::begin() @ce function are deprecated, use constructor with
parameter and parameter-less @cpp *Query::begin() @ce instead.
@subsection changelog-2015-05-compatibility Potential compatibility breakages, removed APIs
- All functionality @ref changelog-2014-01-deprecated "deprecated in 2014.01"
has been removed, namely:
- Removed deprecated ability to use relative includes (e.g.
@cpp #include <Mesh.h> @ce), use absolute paths (@cpp #include <Magnum/Mesh.h> @ce)
instead.
- Removed deprecated @cpp Mesh::Primitive @ce enum, use @cpp MeshPrimitive @ce
instead.
- Removed deprecated @cpp Sampler::maxAnisotropy() @ce function, use
@cpp Sampler::maxMaxAnisotropy() @ce instead.
- Removed deprecated @cpp Math::Geometry::Rectangle @ce class, use
@ref Math::Range instead.
- Removed deprecated @cpp SceneGraph::Animable::group() @ce function, use
@ref SceneGraph::Animable::animables() instead.
- Removed deprecated `Shaders/magnumShadersResourceImport.hpp` file, use
`Shaders/resourceImport.hpp` instead.
- Removed deprecated @cpp Text::TextRenderer @ce alias, use
@ref Text::Renderer instead.
- Removed long-deprecated @cpp BufferImage::setData() @ce overload, use
the other one instead.
@subsection changelog-2015-05-performance Performance improvements
- Faster vector multiplication in @ref Math::Quaternion.
- Saved one swizzle in @ref Math::cross().
- Allocation-free overloads of functions that took @cpp std::string @ce just to
pass its contents to OpenGL.
@section changelog-2014-06 2014.06
Released 2014-06-30, tagged as
[v2014.06](https://github.com/mosra/magnum/releases/tag/v2014.06). See the
8 years ago
[release announcement](https://blog.magnum.graphics/announcements/june-2014-updates/)
for a high-level overview.
@subsection changelog-2014-06-dependencies 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](https://github.com/mosra/magnum/issues/18))
@subsection changelog-2014-06-new New features
- Experimental Android support, see @ref building-cross-android "building documentation"
for more information
- Initial implementation of @ref Platform::AndroidApplication class
- @ref Platform::WindowlessWglApplication and @ref Platform::WindowlessCglApplication,
which enable @ref magnum-gl-info "magnum-info", @ref magnum-distancefieldconverter
and @ref magnum-fontconverter utilities on OS X and Windows. See
[mosra/magnum#40](https://github.com/mosra/magnum/issues/40) and
[mosra/magnum#59](https://github.com/mosra/magnum/pull/59).
- @ref Trade::ObjImporter "ObjImporter" plugin, mesh import only (no
materials yet)
- Completed support of @gl_extension{EXT,texture_integer},
@gl_extension{ARB,stencil_texturing}, @gl_extension{ARB,texture_rectangle},
@gl_extension{ARB,texture_buffer_object}, @gl_extension{ARB,texture_swizzle},
@gl_extension{EXT,texture_sRGB_decode} extensions (and related ES extensions) and
other missing parameters in @cpp *Texture @ce classes
- Basic support for @gl_extension{ARB,texture_multisample} and
@gl_extension{ARB,texture_storage_multisample} in new @cpp MultisampleTexture @ce
class
- Instanced rendering, base vertex and base instance specification in
@cpp Mesh @ce and @cpp MeshView @ce classes; @cpp Mesh::addVertexBufferInstanced() @ce
function for adding buffers with per-instance data (see
[mosra/magnum#47](https://github.com/mosra/magnum/issues/47))
- Mesh multi-draw using @cpp MeshView::draw() @ce
- Initial @gl_extension{ARB,multi_bind} support with @cpp AbstractTexture::bind() @ce
- Support for @gl_extension{ARB,vertex_type_10f_11f_11f_rev} in
@cpp AbstractShaderProgram::Attribute::DataType @ce
- New variants of @cpp Shader::compile() @ce and @cpp AbstractShaderProgram::link() @ce,
5 years ago
allowing the driver to perform parallel compilation in multiple threads.
- Added @cpp *Texture::maxSize() @ce queries
- @ref MeshTools::compile() for automagic creation of 2D and 3D meshes from
imported data
- @ref MeshTools::interleaveInto() for interleaving data into existing
buffer
- `Shapes::Shape::collision()` function as complement to
`Shapes::Shape::collides()`
- `Platform::GlutApplication::KeyEvent` finally has more complete key support
- @ref Math::Range::data() function, useful when querying range values from
GL
- Support for specifying context flags using
@cpp Platform::*Application::Configuration::setFlags() @ce, they are now
also shown in @ref magnum-gl-info "magnum-info"
- More robust support for driver detection and driver bug workarounds. Driver
can be detected using @cpp Context::detectedDriver() @ce, problematic
extension disabled, which is then shown in @ref magnum-gl-info "magnum-info"
and can be also queried using @cpp Context::isExtensionDisabled() @ce
- @cpp Context::extensionStrings() @ce for getting list of all extension
strings exposed by the driver
- @cpp Context::resetState() @ce for resetting internal state tracker,
allowing to use Magnum along with third-party OpenGL code (see
[mosra/magnum#48](https://github.com/mosra/magnum/issues/48))
- @ref MAGNUM_TARGET_WEBGL CMake and preprocessor variable
@subsection changelog-2014-06-changes 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](https://github.com/mosra/magnum/issues/20),
[mosra/magnum#45](https://github.com/mosra/magnum/issues/18))
- @ref 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](https://github.com/mosra/magnum/issues/39).
- The need for compiler compatibility mode is now automatically detected by
CMake to avoid strange compilation errors later
- Split out @cpp Texture @ce functionality into dedicated @cpp TextureArray @ce,
@cpp MultisampleTexture @ce and @cpp RectangleTexture @ce classes to make
their usage less error-prone
- @cpp Buffer::invalidateData() @ce, @cpp Buffer::invalidateSubData() @ce and
@cpp Renderer::resetNotificationStrategy() @ce functions are enabled on
OpenGL ES as a no-op
- Added @ref std::vector overload of @cpp MeshTools::combineIndexArrays() @ce
for greater runtime-usage flexibility
- @ref Platform::Sdl2Application now defaults to non-resizable window, you
can change the behavior using @ref 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
@subsection changelog-2014-06-buildsystem Build system
- Avoiding unnecessary linking of the OpenGL library (see
[mosra/magnum#60](https://github.com/mosra/magnum/pull/60))
@subsection changelog-2014-06-bugfixes Bug fixes
- Fixed usage with OpenGL ES 3.1 contexts (it complained about invalid
version)
- Fixed compilation of @cpp Shaders::MeshVisualizer @ce under WebGL and with
ANGLE, see [mosra/magnum#56](https://github.com/mosra/magnum/issues/56)
- Fixed various build issues on Mac OS X, see
[mosra/magnum#51](https://github.com/mosra/magnum/issues/51) and
[mosra/magnum#54](https://github.com/mosra/magnum/issues/54)
@subsection changelog-2014-06-deprecated Deprecated APIs
- @cpp Mesh::setVertexCount() @ce and @cpp Mesh::setIndexCount() @ce had
nonintuitive behavior in some corner cases and are deprecated, use general
@cpp Mesh::setCount() @ce function instead
- @cpp MeshView::setVertexRange() @ce and four-/two-argument
@cpp MeshView::setIndexRange() @ce are deprecated for similar reason as
above, use @cpp MeshView::setCount() @ce, @cpp MeshView::setBaseVertex() @ce
and three-/one-argument @cpp MeshView::setIndexRange() @ce instead
- @cpp Texture::Target @ce enum is deprecated as the API was too error-prone,
use dedicated @cpp TextureArray @ce, @cpp MultisampleTexture @ce and
@cpp RectangleTexture @ce classes instead
- @cpp Framebuffer::attachTexture*D() @ce is deprecated, use more generic
@cpp Framebuffer::attachTexture() @ce and
@cpp Framebuffer::attachTextureLayer() @ce instead
- @cpp FramebufferBlit::*Buffer @ce enum values are deprecated, use shorter
@cpp FramebufferBlit::Color @ce and similar instead
- @ref Audio::Source::play(), @ref SceneGraph::AbstractObject::setClean(),
@ref SceneGraph::AbstractObject::transformationMatrices() and similar
taking @ref std::initializer_list of pointers are deprecated, use versions
taking list of references instead
- @ref MeshTools::compressIndices() and @ref MeshTools::interleave()
which filled @cpp Mesh @ce and @cpp Buffer @ce 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
- @cpp MeshTools::combineIndexedArrays() @ce taking @ref std::tuple is
deprecated, use version taking @ref std::pair instead
- @cpp MeshTools::removeDuplicates() @ce taking also list of indices is
deprecated, use the function in conjunction with @ref MeshTools::duplicate().
See function documentation for more information.
- Parameter-less @cpp Mesh::draw() @ce and @cpp MeshView::draw() @ce are
deprecated, use versions with explicit shader parameter instead
- Deprecated implicit conversion of @ref Resource "Resource<T, U>" to
@cpp U& @ce, as it is not safe. Use explicit dereference operator instead.
- Texture binding using @cpp *Texture::bind() @ce is deprecated, use setup
functions of particular shaders instead (e.g.
@cpp Shaders::Phong::setDiffuseTexture() @ce)
- @cpp Context::Flag::Robustness @ce is deprecated, use
@cpp Context::Flag::RobustAccess @ce which reflects OpenGL naming better
instead
- @cpp Texture::maxLayers() @ce has misleading naming and is deprecated, use
@cpp Shader::maxCombinedTextureImageUnits() @ce instead
@subsection changelog-2014-06-compatibility Potential compatibility breakages, removed APIs
- All functionality @ref changelog-2013-10-deprecated "deprecated in 2013.10"
has been removed, namely:
- Removed deprecated raw-pointer versions of @cpp Buffer::setData() @ce
and @cpp Buffer::setSubData() @ce, use overloads taking
@cpp Containers::ArrayReference @ce instead
- Removed deprecated `Magnum/ImageFormat.h` header and
@cpp ImageFormat @ce/@cpp ImageType @ce enums, use `Magnum/ColorFormat.h`
header and @cpp ColorFormat @ce/@cpp ColorType @ce enums instead
- Removed deprecated @cpp Matrix2 @ce and @cpp Matrix2d @ce typedefs, use
7 years ago
@ref Matrix2x2 and @ref Matrix2x2d instead
- Removed deprecated `Magnum/Swizzle.h` header and @cpp Magnum::swizzle() @ce
function, use @ref Magnum/Math/Swizzle.h and @cpp Math::swizzle() @ce
instead
- Removed deprecated @cpp *::maxSupported*() @ce limit queries, use the
less verbose @cpp *::max*() @ce versions instead
- Removed deprecated @cpp Platform::*Application::InputEvent::Modifier::*Button @ce
enum values, use @ref Platform::Sdl2Application::MouseMoveEvent::buttons() "Platform::*Application::*Event::buttons()"
function and @ref Platform::Sdl2Application::MouseMoveEvent::Button "Platform::*Application::*Event::Button"
enum instead
- @cpp Platform::Sdl2Application::Configuration::Flag @ce enum and related
functions were replaced with WindowFlag, as the name would now conflict
with context flags
@subsection changelog-2014-06-internal Internal changes
- Removed last remaining bits of global state, everything is now stored
per-context.
@section changelog-2014-01 2014.01
Released 2014-01-21, tagged as
[v2014.01](https://github.com/mosra/magnum/releases/tag/v2014.01). See the
8 years ago
[release announcement](https://blog.magnum.graphics/announcements/january-2014-updates/)
for a high-level overview.
@subsection changelog-2014-01-dependencies Dependency changes
No dependency changes in this release.
@subsection changelog-2014-01-new 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 @ref Text::MagnumFont "MagnumFont",
@ref Text::MagnumFontConverter "MagnumFontConverter",
@ref Trade::TgaImporter "TgaImporter", @ref Trade::TgaImageConverter "TgaImageConverter"
and @ref Audio::WavImporter "WavAudioImporter" plugins.
- Documented @ref opengl-support "state of OpenGL support",
@ref opengl-mapping "mapping between OpenGL and Magnum API",
@ref plugins "general plugin usage" and added
@ref troubleshooting "troubleshooting page" for most common building and
rendering issues
- Support for horizontal and vertical text alignment and multi-line text in
@ref Text::Renderer (line wrapping is still left up to the user)
- New @ref magnum-fontconverter 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), see
`magnum-fontconverter --help` for more information.
- Support for OpenGL object labels, debug message insertion and retrieval
(@gl_extension{KHR,debug}, @gl_extension{EXT,debug_label} and @gl_extension{EXT,debug_marker}
extensions) (see [mosra/magnum#42](https://github.com/mosra/magnum/issues/42))
- @ref Platform::BasicScreenedApplication "Platform::ScreenedApplication"
class allowing the users to easily use multiple independent screens in the
application.
- New 1D, 2D and 3D @ref Math::Range class
- Added @cpp red() @ce, @cpp green() @ce, @cpp blue() @ce, @cpp cyan() @ce,
@cpp magenta() @ce and @cpp yellow() @ce convenience functions to @ref Color3
and @ref Color4 classes
- Convenience @ref Color3ub and @ref Color4ub typedefs
- New @cpp version() @ce utility functions for converting @cpp Version @ce
enum value to major/minor version number and back
- Added @cpp release() @ce function to @ref Image and @ref Trade::ImageData
for releasing ownership of the data, similar to @ref std::unique_ptr::release()
(see [mosra/magnum#29](https://github.com/mosra/magnum/issues/29))
- @cpp *Image::dataSize() @ce function for computing size of buffer required
to store image of given size
- Disallowing conversion of rvalue @ref Image and @ref Trade::ImageData
to ImageReference as it would result in access to deleted memory (GCC
4.8.1/Clang only)
- No-op fallback for @cpp *Texture::setMaxAnisotropy() @ce in case
@gl_extension{EXT,texture_filter_anisotropic extension} is not supported
- Added @cpp round() @ce, @cpp floor() @ce and @cpp ceil() @ce scalar/vector
functions to @ref Math namespace
- @ref Math::minmax() and @ref Math::Vector2::minmax() functions
- Modulo operations for integral @ref Math::Vector classes
- Ability to request context version in all windowed
@ref Platform::Sdl2Application "Platform::*Application" classes
- Mouse wheel support in @cpp Platform::NaClApplication::MouseEvent @ce
- No-op `Platform::GlutApplication::keyReleaseEvent()` and
@cpp Platform::NaClApplication::Configuration::setTitle() @ce functions to
preserve source compatibility with other application classes.
- @ref SceneGraph::Drawable::drawables() function as a non-ambiguous
alternative to @cpp group() @ce
- Ability to specify background color color in @cpp Shaders::Vector @ce,
allowing it to use without blending enabled (fully transparent black was
used previously)
- New @cpp Shaders::Generic @ce class with common definitions, so you can
configure mesh for the generic shader and render it with any other
compatible shader
- Convenience @cpp hasNormals() @ce, @cpp hasTextureCoords2D() @ce functions
in @cpp Trade::MeshData2D @ce and @cpp Trade::MeshData3D @ce
- 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
@cpp Extensions @ce)
- All classes in documentation are now shown with corresponding @cpp #include @ce
path
@subsection changelog-2014-01-changes Changes
- Preferring absolute includes instead of relative (see [mosra/magnum#36](https://github.com/mosra/magnum/issues/36))
- The `magnum-distancefield` utility is now named @ref magnum-distancefieldconverter
for consistency with other command-line utilities
- @cpp ImageReference @ce 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 @cpp Buffer::data() @ce and made
@ref Image::data() "*Image::data()" templated to have them consistent.
Note that this is source-compatible change.
- @cpp Query::result<bool>() @ce returns @cpp true @ce if value is nonzero
(was returning @cpp true @ce only for value of 1 previously)
- All functions in @ref MeshTools namespace are now returning either
@ref Corrade::Containers::Array or @ref std::unique_ptr instead of naked
pointers to avoid accidental out-of-bounds access and memory leaks
- All functions in @ref Text namespace are now returning @ref std::unique_ptr
instead of naked pointers to avoid accidental memory leaks
- Implementation of @ref Platform::Sdl2Application::viewportEvent() "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 @cpp Shaders::Flat @ce now multiplies texture with the specified
color instead of ignoring it. See also [mosra/magnum#34](https://github.com/mosra/magnum/issues/34)
- All deprecated functions and types are now emitting compiler warnings to
encourage updating the code
- Various documentation and example updates and improvements
@subsection changelog-2014-01-bugfixes Bug fixes
- Fixed @cpp CubeMapTextureArray::image() @ce function (more precisely it
wasn't working at all). See also [mosra/magnum#31](https://github.com/mosra/magnum/issues/31).
- Fixed wrong assertion in @cpp Texture::setWrapping() @ce for rectangle
textures
- Fixed wrong assertion in @cpp AbstractImage::pixelSize() @ce when computing
size of separate depth and stencil formats
- @cpp Mesh::addVertexBuffer() @ce now properly computes offsets for matrix
attributes
- Taking index buffer offset into account in @cpp MeshView @ce class
- Fixed various issues with textured @cpp Shaders::Flat @ce shader (actually
the textured version was not working at all)
- Various OS X-related fixes in @ref Shaders library. See also
[mosra/magnum#27](https://github.com/mosra/magnum/issues/27).
- Fixed building issues when both SDL1 and SDL2 is installed on OS X. See
also [mosra/magnum#25](https://github.com/mosra/magnum/issues/25),
[mosra/magnum#38](https://github.com/mosra/magnum/pull/38).
- Fixed building issues with CMake-generated XCode project on OS X. See also
[mosra/magnum#37](https://github.com/mosra/magnum/issues/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](https://github.com/mosra/magnum/issues/26),
[mosra/magnum#35](https://github.com/mosra/magnum/issues/35) and
[mosra/magnum#43](https://github.com/mosra/magnum/pull/43).
- Fixed compilation issues with Clang and libc++
- Fixed various compilation issues under MSVC (and worked around an insane
amount of compiler bugs)
@subsection changelog-2014-01-deprecated Deprecated APIs
- @cpp Buffer::Usage @ce enum is deprecated to reduce header dependencies,
use global @cpp BufferUsage @ce enum instead
- @cpp Mesh::Primitive @ce enum is deprecated to reduce header dependencies,
use global @cpp MeshPrimitive @ce enum instead
- @cpp Sampler::maxAnisotropy() @ce is deprecated to avoid naming conflict with
@cpp *Texture::setMaxAnisotropy() @ce, use
@cpp Sampler::maxMaxAnisotropy() @ce instead
- @cpp Magnum::Geometry::Rectangle @ce class (and @cpp Rectangle* @ce typedefs)
is deprecated, use more generic and feature-rich @ref Math::Range
instead.
- @cpp Platform::Sdl2Application::Configuration::setFlags() @ce function and
related enum is deprecated to avoid naming conflict in the future, use @ref Platform::Sdl2Application::Configuration::setWindowFlags() instead
- @cpp SceneGraph::Animable::group() @ce is deprecated, use non-ambiguous
@ref SceneGraph::Animable::animables() instead
- `Magnum/Shaders/magnumShadersResourceImport.hpp` header is deprecated in
favor of less verbose `Magnum/Shaders/resourceImport.hpp`
- @cpp Text::TextRenderer @ce class (and @cpp Text::TextRenderer2D @ce,
@cpp Text::TextRenderer3D @ce typedefs) is deprecated, use less redundant
name @ref Text::Renderer instead
@subsection changelog-2014-01-compatibility Potential compatibility breakages, removed APIs
- Removed @cpp SceneGraph::*Transformation::move() @ce from 2D transformation
classes. It was originally meant for modifying draw order, but as the draw
order is managed by @ref SceneGraph::DrawableGroup class and not by
parent object, this function is essentially useless.
@subsection changelog-2014-01-documentation Documentation
- Various documentation updates and fixes (see
[mosra/magnum#28](https://github.com/mosra/magnum/issues/28))
@subsection changelog-2014-01-internal 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 to `src/Magnum`,
`external/` directory was moved to `src/MagnumExternal` (required to
make inter-project includes absolute, as mentioned above)
@section changelog-2013-10 2013.10
Released 2013-10-30, tagged as
[v2013.10](https://github.com/mosra/magnum/releases/tag/v2013.10). See the
8 years ago
[release announcement](https://blog.magnum.graphics/announcements/october-2013-updates/)
for a high-level overview.
@subsection changelog-2013-10-dependencies 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](https://github.com/mosra/magnum/issues/11),
[mosra/magnum#16](https://github.com/mosra/magnum/issues/16),
[mosra/magnum#21](https://github.com/mosra/magnum/issues/21),
[mosra/magnum#22](https://github.com/mosra/magnum/issues/22),
[mosra/magnum#23](https://github.com/mosra/magnum/pull/23),
[mosra/magnum-bootstrap#2](https://github.com/mosra/magnum-bootstrap/issues/2).
@subsection changelog-2013-10-new New features
- Initial Emscripten (HTML5/WebGL) port. See @ref Platform::Sdl2Application
for detailed porting information. The @ref example-index "examples page"
has now links to online Emscripten demos, see also
[base-emscripten](https://github.com/mosra/magnum-bootstrap/tree/base-emscripten)
branch in Magnum Bootstrap.
- Mac OS X port (thanks to Miguel Martin)
- @ref Math::Vector::isZero() and @ref Math::Vector2::aspectRatio()
convenience functions
- Bitwise AND, OR, XOR, bit inversion and bit shift in integral
@ref Math::Vector classes
- @ref Math::Matrix4x3 "Math::MatrixMxN<T>" and
@ref Math::Matrix3x3 "Math::MatrixNxN<T>" template aliases for non-square
and non-transforming square matrices in @ref Math namespace,
@ref Matrix3x2 "MatrixNxN" and @ref Matrix2x2d "MatrixNxNd" typedefs for
@cpp float @ce and @cpp double @ce 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 @ref magnum-gl-info "magnum-info" utility.
- @cpp Context::isExtensionSupported() @ce is now able to query extension
availability on particular GLSL version
- Using @ref std::unique_ptr and C++1y @ref std::optional for resources
returned from @ref Trade::AbstractImporter for better usability and to
avoid accidental memory leaks
- New translation-only transformation in @ref 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 @cpp Shaders::Flat @ce
- Mouse button queries in @ref Platform::Sdl2Application::MouseMoveEvent "Platform::*Application::MouseMoveEvent"
@subsection changelog-2013-10-changes Changes
- @cpp Buffer::setData() @ce and @cpp Buffer::setSubData() @ce are now
accepting @cpp Containers::ArrayReference @ce for more convenient usage
- @ref Platform::Sdl2Application::viewportEvent() "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 @ref Math::RectangularMatrix "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
@subsection changelog-2013-10-bugfixes Bug fixes
- Fixed compilation with Clang and libc++ (see
[mosra/magnum#12](https://github.com/mosra/magnum/issues/12))
- Fixes compilation of the Audio library on macOS (see
[mosra/magnum#19](https://github.com/mosra/magnum/issues/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](https://github.com/mosra/magnum/issues/17))
- Extension support queries depend on selected GLSL version (see
[mosra/magnum-examples#3](https://github.com/mosra/magnum-examples/issues/3))
- Properly exporting `SceneGraph::AbstractCamera` symbols (see
[mosra/magnum-bootstrap#3](https://github.com/mosra/magnum-bootstrap/issues/3))
@subsection changelog-2013-10-deprecated Deprecated APIs
- @cpp Matrix2 @ce and @cpp Matrix2d @ce is deprecated, use @ref Matrix2x2
and @ref Matrix2x2d instead
- @cpp swizzle() @ce is deprecated, all of its functionality has been moved
into @cpp Math::swizzle() @ce
- @cpp Buffer::setData() @ce and @cpp Buffer::setSubData() @ce overloads
taking pair of data pointer and size are deprecated, use
@cpp Containers::ArrayReference @ce-based @cpp Buffer::setData() @ce and
@cpp Buffer::setSubData() @ce
- `ImageFormat.h` header, @cpp ImageFormat @ce and @cpp ImageType @ce enums
are deprecated, use `ColorFormat.h` header, `ColorFormat` and `ColorType`
enums which reflect OpenGL naming better instead
- @cpp Platform::*Application::InputEvent::Modifier::*Button @ce enum values
are deprecated, use
@ref Platform::Sdl2Application::MouseMoveEvent::buttons() "Platform::*Application::*Event::buttons()"
and @ref Platform::Sdl2Application::MouseMoveEvent::Button "Platform::*Application::*Event::Button"
enum instead
- @cpp AbstractShaderProgram::maxSupportedVertexAttributeCount() @ce,
@cpp AbstractTexture::maxSupportedLayerCount() @ce and
@cpp Sampler::maxSupportedAnisotropy() @ce are deprecated in favor of less
verbose @cpp AbstractShaderProgram::maxVertexAttributes() @ce,
@cpp AbstractTexture::maxLayers() @ce and @cpp Sampler::maxAnisotropy() @ce
@subsection changelog-2013-10-documentation Documentation
- Fixed @ref SceneGraph bootstrap branch name (see
[mosra/magnum-bootstrap#1](https://github.com/mosra/magnum-bootstrap/issues/1))
@subsection changelog-2013-10-compatibility Potential compatibility breakages, removed APIs
No deprecated API was removed in this release.
@section changelog-2013-08 2013.08
Released 2013-08-30, tagged as
[v2013.08](https://github.com/mosra/magnum/releases/tag/v2013.08). See the
8 years ago
[project announcement](https://blog.magnum.graphics/announcements/introducing-magnum/)
for a high-level overview.
*/
}