diff --git a/doc/changelog-old.dox b/doc/changelog-old.dox index 733475bda..d23976148 100644 --- a/doc/changelog-old.dox +++ b/doc/changelog-old.dox @@ -35,6 +35,1174 @@ See also: - @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 @ref pixelSize(), + @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 @ref GL::MeshView::setIndexRange() + 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 @ref GL::pixelSize() or + @ref Magnum::pixelSize() 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 @ref GL::pixelSize() 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 + @ref GL::Mesh::indexTypeSize() 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 + @ref Shaders::AbstractVector::bindVectorTexture() "Shaders::*Vector::bindVectorTexture()", + @ref Shaders::Flat::bindTexture(), @ref Shaders::Phong::bindAmbientTexture(), + @ref Shaders::Phong::bindDiffuseTexture(), @ref Shaders::Phong::bindSpecularTexture() + and @ref Shaders::Phong::bindTextures() 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 `()` and `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 @ref Math::lerp(const Vector&, const Vector&, const BoolVector&) +- 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 @ref Math::BoolVector (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 @ref Platform::WindowlessWindowsEglApplication 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 @ref Trade::AbstractImageConverter::exportToCompressedImage() plugin + interface and @ref Trade::AbstractImageConverter::exportToData(), + @ref Trade::AbstractImageConverter::exportToFile() 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 + @ref Trade::AbstractImageConverter::exportToFile()) +- 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 + +- @ref Shaders::Flat now sets default color to white only in textured version +- @ref Shaders::Phong gained the ability to have both color and texture +- @ref Shaders::Phong 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 <= 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 @ref Math::BoolVector::set() (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) "AbstractShaderProgram::setUniform(Int, Containers::ArrayView)" + 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 + @ref GL::MeshView::setIndexRange() "MeshView::setIndexRange()" 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 diff --git a/doc/changelog.dox b/doc/changelog.dox index b638df17c..797718823 100644 --- a/doc/changelog.dox +++ b/doc/changelog.dox @@ -2393,1174 +2393,6 @@ Released 2018-10-23, tagged as @ref Platform::Sdl2Application::GLConfiguration::addFlags() "Platform::*Application::GLConfiguration::addFlags()" (And similarly on windowless apps) to preserve the enabled-by-default flags. -@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 @ref pixelSize(), - @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 @ref GL::MeshView::setIndexRange() - 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 @ref GL::pixelSize() or - @ref Magnum::pixelSize() 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 @ref GL::pixelSize() 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 - @ref GL::Mesh::indexTypeSize() 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 - @ref Shaders::AbstractVector::bindVectorTexture() "Shaders::*Vector::bindVectorTexture()", - @ref Shaders::Flat::bindTexture(), @ref Shaders::Phong::bindAmbientTexture(), - @ref Shaders::Phong::bindDiffuseTexture(), @ref Shaders::Phong::bindSpecularTexture() - and @ref Shaders::Phong::bindTextures() 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 `()` and `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 @ref Math::lerp(const Vector&, const Vector&, const BoolVector&) -- 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 @ref Math::BoolVector (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 @ref Platform::WindowlessWindowsEglApplication 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 @ref Trade::AbstractImageConverter::exportToCompressedImage() plugin - interface and @ref Trade::AbstractImageConverter::exportToData(), - @ref Trade::AbstractImageConverter::exportToFile() 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 - @ref Trade::AbstractImageConverter::exportToFile()) -- 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 - -- @ref Shaders::Flat now sets default color to white only in textured version -- @ref Shaders::Phong gained the ability to have both color and texture -- @ref Shaders::Phong 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 <= 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 @ref Math::BoolVector::set() (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) "AbstractShaderProgram::setUniform(Int, Containers::ArrayView)" - 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 - @ref GL::MeshView::setIndexRange() "MeshView::setIndexRange()" 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)) - Changelogs for previous versions are available in @ref changelog-old. */