Releases: adobe/lagrange
Releases · adobe/lagrange
Lagrange Release v6.0.0
Highlights
- Generic mesh API that works in 2D, 3D, triangles/quad/hybrid mesh using the same mesh type.
- Simple API based on
std::span<>
(assumes continuous memory buffers) - Generic copy-on-write attributes (per vertex, facet, edge, etc.)
- Separate
views.h
provides Eigen "views" over mesh buffers. - Mesh header only pulls STL headers (, <string_view>, and -- last one can be avoided easily).
- Efficient memory storage: regular meshes only need 2 buffers (vertex pos, facet indices), while hybrid meshes uses an additional offset buffer.
- Use PIMPL idiom to hide internal mesh attribute manager.
- Mesh attribute can wrap external buffers (including const buffers). Policies determine write/growth behavior.
- Efficient buffer growth via std::vector<>.
- Use explicit template instantiation to enforce strict separation of declaration/definition (faster compile times)
- Use X macros to facilitate explicit template instantiation of predetermined types
- Export attributes into shared_ptr for lifetime management.
- Full Doxygen documentation.
- Zero compiler warnings with much stricter warning flags than before.
- C++17 is now the minimum required standard.
Features
Attributes
- Generic attribute class, templated only by scalar type.
- Versatile, low-level but safe interface based on
std::span<>
. - Use explicit template instantiation to separate .cpp and .h
- Support wrapping external buffers (const and non-const). A policy controls write behavior to const buffers.
- Support wrapping external buffers with larger capacity. A policy controls growth behavior of external buffers.
- Support various attribute usage tags. VertexIndex, FacetIndex, etc. will remap indices accordingly when resizing/reordering.
- Indexed attributes as a pair of (indices, value) attributes
- Set default value used for attribute growth (e.g. invalid index, -1, etc.).
- Unit tests with 100% coverage
Mesh
- Copy-on-write allows the new mesh class to have efficient "pass-by-value" semantic (a mesh can be copied/moved efficiently).
- Generic mesh API supporting arbitrary dimension & arbitrary polygonal facets.
- Dynamic mesh supporting insertion & deletion of vertices/facets.
- Add vertices/facets extend existing attribute buffers.
- Efficient batch element removal (using either a list/mask of elements to remote).
- Efficient in-place reordering/reindexing after element removal.
- Methods to clear vertices/facets
- Mesh attributes
- Access attributes via names (
<string_view>
) or attribute ids (avoid a hash map lookup). - Easy read/write references to mesh vertices and facets indices.
- Prevent creation of reserved attribute names (starting with "$").
- Export attribute buffer into a shared_ptr.
- Access attributes via names (
- Mesh edges
- Initialize mesh edges using user-given ordering.
- Additional connectivity attribute for navigation.
- Preserve attributes when resizing/reindexing mesh elements
- Mesh IO for .obj files
- Basic mesh IO for positions + indices
- Extended mesh IO with uv and normals
Views
- Convenient "Eigen" map views over mesh attributes: compatible with libigl functions (V, F).
- Convenient views for mesh vertices/facets + generic views for custom attributes.
Visitors
- Provide
foreach_attribute
methods to visit all mesh attributes. - Sequential and parallel iteration.
- BitField for iterating over attributes of a certain type.
- Filter indexed and non-indexed attributes via
if constexpr
or template args. foreach_xxx_around
visitors usefunction_ref<>
rather than templated functions.
Lagrange Release v5.9.0
Infrastructure
- CMake updates
- Only include
LagrangeOptions.cmake
when building a top-level library. - Reorganized modules in IDE folders.
- Only include
- Updated warning ignore setting.
- Added test coverage support.
- Dropped docker support.
Core
- Cleaned up
safe_cast
function. - Renamed
INVALID
toinvalid
. - Update to ensure core module is C++14 compatible.
- Cleaned up logger and doc.
- Added indexed attribute tracking in
split_long_edges
. - Moved array serialization code from serialization module to core.
UI
- Misc bug fixes and dependency updates.
- Updated UI documentation and tutorial.
Lagrange Release v5.8.0
Infrastructure
- Renamed CMake module options:
LAGRANGE_X
->LAGRANGE_MODULE_X
- e.g.
LAGRANGE_UI
->LAGRANGE_MODULE_UI
- Reminder: Rather than using CMake options to enable additional Lagrange module, users should now prefer to call the helper functions
lagrange_include_module(io ui ...)
to import additional Lagrange module in client projects.
- Assert & breakpoints
- Enabled debugger breakpoints when Lagrange is built as toplevel project
- Added utility functions to enable/disable this behavior at runtime
- Add wrapper LA_REQUIRE_THROWS to test exception behavior without triggering a debugger breakpoint
Dependencies
- CLI11 updated to v2.1.2
- OneTBB updated to 2021.6.0-rc1
- [UI] ImGui updated to v1.87
Bugfixes
- Fixed OneTBB static linking issues on Linux
UI module
- IBL performance improvements
- Lowering default ibl resolution to speed up loading time
- Removing all default ibls except one (studio011) to reduce binary size
- Added save_ibl function and a save button in ibl widget
- Texture::save_to supports mip levels now
Lagrange Release v5.7.0
Infrastructure
- CMake: use stricter warning flags on macOS/Linux (enabled for toplevel builds, disabled for subproject builds)
- Updated CMake integration. Rather than using CMake options to enable additional Lagrange module, users should now prefer to call the helper functions
lagrange_include_module(io ui ...)
to import additional Lagrange module in client projects. - Updated assert macros
LA_ASSERT()
-->la_runtime_assert(x[, msg])
LA_ASSERT_DEBUG
-->la_debug_assert(x[, msg])
- Behaves as a function (
la_runtime_assert(x) && x
) - Optional break into debugger on assert failure (CMake option:
LAGRANGE_ASSERT_DEBUG_BREAK
)
Dependencies
- [Core] Updated Eigen to 3.4.0
- [IO] Updated tinyobjloader version
- [UI] Native File Dialog replaced by Portable File Dialogs
Bugfixes
- [Core] Fix non-finite weights in compute_vertex_normal
- [IO] Preserve attributes when combining obj meshes
Lagrange Release v5.6.0
Dependencies
- Updated TBB to 2021.4
Infrastructure
- Cleanup
Lagrange Release v5.5.0
Features/bugfixes
- Thicken mesh: add segments along stitch
- Colorspace fixes in the UI module
Dependencies
- Updated ImGui to 1.85
Infrastructure
- Migrate binary unit test data to msgpack
- Hide slow tests in Debug mode
- Fix CMake options for subproject use
- Add CMake option to use ccache (ON by default if ccache is found)
Lagrange Release v5.4.0
Core/Infrastructure
- Add CMake preset support.
- Update CMake and python scripts to use presets.
- Compilation speed reduction via better precompiled headers and smaller common headers.
UI
- Add support to allow user to add shader file.
- Multiple bug fixes in gizmo bounds, shadowmaps, widget code for Material and aspect ratio.
- Performance optimization.
- Adding extra outputs to glsl shadow/shading utility functions.
- Shadow map filter radius is parametrized now.
- Allow depth map export.
- Added ability for threads to enqueue work for main thread.
- Added an ability to pass shader #define when creating a Material.
Lagrange Release v5.3.0
Breaking Changes
- Removed deprecated edge API. Methods using the new edge API no longer have the
_new
suffix added to their name. offset_and_close_mesh
has been renamedthicken_and_close_mesh
Infrastructure
- Support for Apple M1 and Universal Binaries
- Fix warnings on macOS
- Minor CMake improvements
- Allow/block-list of Lagrange modules
- Show FS backend options in CMake-GUI
- Generalize the offset function to work off vertex normals
Lagrange Release v5.2.0
Infrastructure
- Added support for OneTBB, updated Embree/OpenVDB. New CMake flag
LAGRANGE_WITH_ONETBB=On
- Various CMake bugfixes and improvements
- Improved Emscripted support
- Performance tests are now OFF by default
- Fix for open-source repo
Core
- Added support for mapping vertex, facet, and corner attribute in
unify_index_buffer
- Removed
size_t
from serializable types - Refactored warning-suppression macros
- Added support to clear edge data:
mesh->clear_edge_data_new();
IO
- Added support for saving UV as SVG
UI Module
- Documentation
- Metabuild can now build UI
- Customizable .ini location and better default
- Events for hover and selection
- User can now edit default systems
Lagrange Release v5.1.0
Core/Infrastructure
- Add CMake option to disable floating point exception.
UI Module
- Correct handling of empty input.
- Bug fix related auto and Eigen.
- Moved main loop callback to allow imgui calls.
- Remove unused variable.