Integration
Changes since 2020.06
Dependency changes
- Minimal supported CMake version is now 3.5, changed from 3.4, since CMake 3.27+ warns if a compatibility with CMake below 3.5 is requested. Older versions are not supported anymore and all workarounds for them were removed. This is a conservative change, as there are no known supported distributions which would have anything older than 3.5.
- Minimal supported ImGui version is now 1.88 from June 2022 (see mosra/
magnum-integration#111). The version support policy is now also explicitly adocumented.
New features
- Conversion between dynamic Eigen types and Containers::
StridedArrayView using EigenIntegration:: arrayCast() (see mosra/ magnum-integration#74)
Changes and improvements
- BulletIntegration now supports Bullet compiled for double precision as well
- Made it possible to override and call BulletIntegration::
MotionState:: getWorldTransform() / BulletIntegration:: MotionState:: setWorldTransform() from user code - Implemented conversion for Math::
Range in EigenIntegration - It's now possible to supply additional ImGui user configuration by defining the
MAGNUM_IMGUIINTEGRATION_USER_CONFIG
macro. See the ImGuiIntegration namespace documentation for an example, see also mosra/magnum-integration#85. - Support for Platform::
*Application:: Cursor:: No in ImGuiIntegration:: Context (see mosra/ magnum-integration#92) - ImGuiIntegration::
Context now supports the VtxOffset
introduced in 1.71, allowing to draw complex UIs that need more than 65k vertices (see mosra/magnum-integration#82 and mosra/ magnum-integration#90) - ImGuiIntegration::
Context now supports the new ImGui IO API introduced in 1.87, falling back to the previous behavior for older versions (see mosra/ magnum-integration#87, mosra/ magnum-integration#91 and mosra/ magnum-integration#93) - Added support for draw list user callbacks to ImGuiIntegration (see mosra/
magnum-integration#83, mosra/ magnum-integration#84 and mosra/ magnum-integration#98) - Fixed ImGuiIntegration to work with ImGui 1.89 and
IMGUI_DISABLE_OBSOLETE_FUNCTIONS
set (see mosra/magnum-integration#100) - Updated ImGuiIntegration::
imageButton() to work with ImGui 1.89+ (see mosra/ magnum-integration#109 and mosra/ magnum-integration#110) - The ImGuiIntegration::
Context:: handlePointerPressEvent(), handlePointerReleaseEvent(), handlePointerMoveEvent() and handleScrollEvent() that operate with the new application pointer events now propagate also the event source to ImGui 1.89.5+, describing whether it's a mouse, touch input or a pen
Build system
- The oldest supported Clang version is now 6.0 (available on Ubuntu 18.04), or equivalently Apple Clang 10.0 (Xcode 10). Oldest supported GCC version is still 4.8.
- Updated
FindImGui.cmake
to optionally include the newimgui_tables.cpp
source present in latest versions (see mosra/magnum-integration#78, mosra/ magnum-integration#81) - Updated
FindImGui.cmake
to link toimm32
on MinGW, which is needed since ImGui 1.82. - Travis banned everyone from using their CI and so all Linux, macOS, Emscripten, Android and iOS builds were migrated from Travis to Circle CI, together with adding also an explicit ARM64 build and an ability to test GLES and Vulkan functionality on Android. See also mosra/
magnum#350 and mosra/ magnum#523. FindBullet.cmake
now attemps to discover presence of theBT_USE_DOUBLE_PRECISION
preprocessor macro on both system-wide and subproject workflow and adds it to the imported target to prevent linker errors- The Homebrew package now uses
std_cmake_args
instead of hardcoded build type and install prefix, which resolves certain build issues (see mosra/homebrew-magnum#6) - It's now possible to use
<PackageName>_ROOT
to point to install locations of dependencies such as Corrade on CMake 3.12+, in addition to putting them all together insideCMAKE_PREFIX_PATH
. See also mosra/magnum#614. - On CMake 3.16 and newer,
FindMagnumIntegration.cmake
can provide additional details if some component is not found - Updated Debian build instructions to pass
--no-sign
todpkg-buildpackage
, avoiding a confusing error message that might lead people to think the packaging failed (see mosra/magnum-plugins#105) - Fixed wrong
.gitattributes
option for LF line endings in MSYS PKGBUILDs (see mosra/magnum-integration#97) - It's now possible to build dynamic libraries on Android and Emscripten with the usual options. Static libraries are still a default but it isn't enforced anymore. See mosra/
magnum#617. - Fixed most remaining warnings on MSVC, in particular those related to "conversion from T to void * of greater size" (see mosra/
magnum#544). - Fixed
FindMagnumIntegration.cmake
to correctly find the Magnum Integration include directory when it's installed to a different directory than Magnum itself (see mosra/magnum-integration#105) - A dynamic build of ImGuiIntegration now correctly links against ImGui that's built as static, fixing a common issue on Vcpkg (see mosra/
magnum-integration#67 and mosra/ magnum-integration#104). - Magnum Integration libraries now automatically install and use Find modules for their dependencies in a way that doesn't clash with modules of the same name potentially installed by other software, meaning the user doesn't need to copy and carry them along anymore (see mosra/
magnum#436) - Created a RPM package with a helper script for building (see mosra/
magnum-integration#113)
Bug fixes
- ImGuiIntegration::
Context now properly uses the IdxOffset
introduced in 1.71. As of 1.86 it no longer has an implicit value, causing visual glitches. See also mosra/magnum-integration#86 and mosra/ magnum-integration#88.
Deprecated APIs
- All CMake build options are now prefixed with
MAGNUM_
. For backwards compatibility, unless MAGNUM_BUILD_ DEPRECATED is disabled and unless a prefixed option is already set during the initial run, the unprefixed options are still recognized with a warning. See also mosra/ corrade#139. ImGuiIntegration::Context::handleMousePressEvent()
,handleMouseReleaseEvent()
,handleMouseMoveEvent()
andhandleMouseScrollEvent()
that operated with the now-deprecated application mouse events are deprecated in favor of ImGuiIntegration::Context:: handlePointerPressEvent(), handlePointerReleaseEvent(), handlePointerMoveEvent() and handleScrollEvent() that accept the new pointer and scroll events instead.
Potential compatibility breakages, removed APIs
- Removed
BulletIntegration::DebugDraw::DebugMode
,DebugModes
,mode()
andsetDebugMode()
deprecated in 2018.10, use BulletIntegration::DebugDraw:: Mode, Modes, mode() and setMode() instead - ImGuiIntegration now stores OpenGL texture ID inside
ImTextureID
instead of a pointer to a live GL::Texture2D instance. This is done in order to prevent crashes in case of accidental misuse, and to make the internals simpler as well. You're encouraged to use the new ImGuiIntegration:: textureId() helper instead of a manual cast in your code. See also mosra/ magnum#476, mosra/ magnum-integration#108 and mosra/ magnum-integration#112.
Documentation
- Various improvements, fixes and clarifications (see mosra/
magnum-integration#75, mosra/ magnum-integration#95) - Documented how to enable ImGui in Debian packages (see mosra/
magnum-integration#73)
2020.06
Released 2020-06-27, tagged as v2020.06.
New features
- New ImGuiIntegration::
Context:: updateApplicationCursor() allowing ImGui to update application cursor using the new *Application:: setCursor() APIs (see mosra/ magnum-integration#56, mosra/ magnum-integration#71 and mosra/ magnum-integration#72)
Changes and improvements
- Simplified DartIntegration internals using EigenIntegration, ignoring NaN values sometimes coming from DART (see mosra/
magnum-integration#58) - ImGuiIntegration::
Context:: drawFrame() now resets scissor rectangle back to the full framebuffer to avoid nasty surprises when scissor test is not disabled again right after (see mosra/ magnum-examples#68) - ImGuiIntegration::
Context:: handleKeyPressEvent() now treats Platform:: *Application:: KeyEvent:: Key:: NumEnter the same way as Key:: Enter - Exposing font atlas texture via ImGuiIntegration::
Context:: atlasTexture() (see mosra/ magnum-integration#60, mosra/ magnum-integration#61, mosra/ magnum-integration#62 and mosra/ magnum-integration#63) - Avoid using obsolete ImGui APIs in tests (see mosra/
magnum-integration#65) - Library version is now exposed through
MAGNUMINTEGRATION_VERSION_YEAR
,MAGNUMINTEGRATION_VERSION_MONTH
,MAGNUMINTEGRATION_VERSION_COMMIT
,MAGNUMINTEGRATION_VERSION_HASH
andMAGNUMINTEGRATION_VERSION_STRING
preprocessor defines in a newMagnum/versionIntegration.h
header. This header is not included by any other header to avoid trigerring a full rebuild when Git commit changes. If Git is not found, only the first two defines are present. - ImGuiIntegration now uses Magnum's own
Shaders::Flat2D
instead of a custom shader, which finally makes it work on GLES2 and WebGL 1
Build system
- Various minor fixes (see mosra/
magnum-integration#68) - The library again compiles and tests cleanly with CORRADE_
NO_ ASSERT enabled, and this setup is verified on the CI to avoid further regressions - Updated GlmIntegration tests to build against 0.9.9.8 (see mosra/
magnum-integration#70)
Bug fixes
- Due to a SDL2 bug on Windows that halts all event processing when dragging a window across the screen, ImGui v1.68 and newer would receive zero delta time and assert. ImGuiIntegration::
Context now detects that and passes a non-zero delta time in that case. See also mosra/ magnum-integration#57.
Documentation
- Various fixes and clarifications (see mosra/
magnum-integration#66)
2019.10
Released 2019-10-24, tagged as v2019.10.
Dependency changes
- Minimal supported CMake version is now 3.4. Older versions are not supported anymore and all workarounds for them were removed. Download a prebuilt release of a newer version if you need to use Corrade on older systems (such as Ubuntu 14.04 or Debian 8). This is a conservative change that shouldn't affect any additional distribution compared to the CMake 3.1 requirement in 2019.01.
New features
- MSVC 2019 compatibility, following other Magnum projects
- When using Magnum as a CMake subproject, it now puts all binaries into a common directory to simplify
PATH
handling and dynamic plugin loading. For more information see Using Magnum Integration as a CMake subproject, mosra/magnum#357 and mosra/ magnum-plugins#63. - New EigenIntegration library, providing conversion of math types from and to Eigen APIs (see mosra/
magnum-integration#40) - New ImGuiIntegration::
imageButton() widget for drawing an image button out of GL:: Texture2D (see mosra/ magnum-integration#38)
Changes and improvements
- ImGuiIntegration::
Context:: handleKey*Event() now handles the Space key as well (see mosra/ magnum-integration#44) - ImGuiIntegration::
Context:: handleMousePressEvent() and ImGuiIntegration:: Context:: handleMouseReleaseEvent() are fixed to avoid ignoring mouse clicks if both press and release happens in the same frame - Assorted DartIntegration updates (see mosra/
magnum-integration#47): - DartIntegration::
convertShapeNode() can now handle cones as well - Converted shapes now look less like a plastic, soft bodies having smooth normals and no specular highlights
- DartIntegration::
World:: step() takes an optional parameter to reset commands
- DartIntegration::
- DartIntegration::
World can now work with an external plugin manager instance - ImGuiIntegration::
Context:: relayout() now rebuilds the glyph cache also when fonts change, not just on pixel density change (see mosra/ magnum-integration#51) - Added Super key (Windows/⌘) handling to ImGuiIntegration::
Context:: handleKey*Event()
Build system
- The
package/msys
directory now containsPKGBUILD
s for MSYS2. See MSYS2 packages for more information. See also mosra/magnum-integration#39 and mosra/ magnum#317. - If both a CMake-based ImGui installation is found and
IMGUI_DIR
is set when building,FindImGui.cmake
prefers the location given byIMGUI_DIR
- ES 2.0 and ES 3.0 subset of tests requiring GL context is now run on Travis CI using SwiftShader for better code coverage (see mosra/
magnum#207) - Updated Homebrew package to build also the DartIntegration, since the
dartsim
dependency is usable now (see mosra/magnum-integration#46) - Emscripten builds now have the
-fPIC
option disabled by default as it causes linker errors related to__memory_base
on 1.38.36 (see also emscripten-core/emscripten#8761) - Explicitly mention that ImGuiIntegration is not available in Homebrew packages due to a missing dependency (see mosra/
magnum-integration#49) - Updated
FindImGui.cmake
to explicitly link to theApplicationServices
framework on macOS, since that's needed for ImGui 1.71 clipboard handling (see mosra/magnum-integration#48) - BulletIntegration can now use Bullet from Emscripten Ports instead of looking for a prebuilt version elsewhere when the
MAGNUM_USE_EMSCRIPTEN_PORTS_BULLET
CMake option is enabled. See Using dependencies from Emscripten Ports and mosra/magnum-integration#53.
Bug fixes
- The ImGuiIntegration::
image() widget was flipping the texture vertically (see mosra/ magnum-integration#38) - DartIntegration::
convertShapeNode() was orienting cylinders and capsules improperly (see mosra/ magnum-integration#47) - Headers in the ImGuiIntegration library had messed up include guards (see mosra/
magnum-integration#50)
Potential compatibility breakages, removed APIs
- Removed
BulletIntegration::convertShape()
as it was depending on the now-removedShapes
library, deprecated since 2018.10
Documentation
- ImGuiIntegration::
Context now mentions possible pitfalls when supplying in-memory fonts to ImGui (see mosra/ magnum-integration#42) - Better documenting the need for extra CMake modules when using ImGuiIntegration (see mosra/
magnum-examples#64)
2019.01
Released 2019-02-04, tagged as v2019.01.
Dependency changes
- Minimal supported GCC version is now 4.8.1, GCC 4.7 is not supported anymore. Minimal Clang version is now 3.3, since that's the first version with a complete C++11 support. See also mosra/
magnum#274. - Minimal supported CMake version is now 3.1. Older versions are not supported anymore and all workarounds for them were removed. Download a prebuilt release of a newer version if you need to use Corrade on older systems (such as Ubuntu 14.04 or Debian 8). See also mosra/
magnum#274.
New features
- New ImGuiIntegration library to render Dear ImGui user interfaces (see mosra/
magnum-integration#33 and mosra/ magnum#36)
Bug fixes
- Conversion of 3x3 matrices in the BulletIntegration was transposing them by mistake. This was only discoverable if the transformation of objects attached to BulletIntegration::
MotionState included rotation. See also mosra/ magnum-integration#34.
Deprecated APIs
- The
Magnum/OvrIntegration/Conversion.h
header name was not consistent with other libraries and thus is deprecated, use Magnum/OvrIntegration/ Integration.h instead
Potential compatibility breakages, removed APIs
- Removed
MAGNUM_*INTEGRATION_LIBRARIES
andMAGNUM_*INTEGRATION_INCLUDE_DIRS
CMake variables, which were deprecated in favor ofMagnumIntegration::*
imported targets in February 2016.
Documentation
- The BulletIntegration::
MotionState docs gave a false impression that the transformation update is two-way, while it is only from bullet to SceneGraph. The docs are now clarified and suggest possible solutions. See also mosra/ magnum-integration#35.
2018.10
Released 2018-10-23, tagged as v2018.10.
New features
- New GlmIntegration library that provides conversion and debug output for GLM math types.
Changes and improvements
- Updated the OvrIntegration library to work with OVR SDK 1.17 and newer and adapted it to work with latest changes in the GL library (see mosra/
magnum-integration#26 and mosra/ magnum-integration#32) - It's now possible to construct BulletIntegration::
DebugDraw without an active GL context using the NoCreate tag
Build system
- There's now a PPA for Ubuntu packages. See Packages for Debian, Ubuntu and derivatives for more information. See also mosra/
magnum-integration#31.
Bug fixes
- Sometimes Bullet reports object transformation full of NaNs. Unsure what the real cause is but NaNs trigger an axis normalization assert in Math::
Matrix4:: rotation(), so the BulletIntegration:: MotionState class is ignoring this case with a warning.
Deprecated APIs
BulletIntegration::DebugDraw::DebugMode
,DebugModes
,mode()
andsetDebugMode()
are deprecated, use BulletIntegration::DebugDraw:: Mode, Modes, mode() and setMode() instead. The Mode and Modes enums were deprecated by mistake in 2018.02, now they are reverted back to non-deprecated state. BulletIntegration::DebugDraw::Mode::FastWirefram
has a typo and is deprecated, use BulletIntegration::DebugDraw:: Mode:: FastWireframe instead
Changelogs for previous versions are available in Archived integration changelogs.