Skip to content

OpenVDB AX 1.0.0

Latest
Compare
Choose a tag to compare
@Idclip Idclip released this 18 Jan 13:43
fc0a73d
This release coincides with the release of OpenVDB 8.0.0, where the core
OpenVDB AX library has been incorporated into the OpenVDB ASWF repository.
Future development will be focused in the OpenVDB ASWF repo. The standalone
OpenVDB AX repository is in maintenance mode.

See the official OpenVDB ASWF repository:
    https://github.com/AcademySoftwareFoundation/openvdb

New Features:
- Introduced new error logging framework for AX syntax errors/warnings,
  (along with an improved set of warnings) allowing capture and reporting
  of syntax errors in AX code beyond the first error, as well as graceful
  breaking of the compilation process if it cannot continue. This allows
  for more useful error messages and other quality of life improvements
  such as printing of the offending lines of code.
- Synced AX library version to VDB version. The library version now matches
  the version of VDB it is built against. This is in preparation for porting
  into the OpenVDB repository.
- Changed some default integer types. 'short' types are now 'int16', 'long'
  types are 'int64'. An additional int type 'int32' has also been added which
  'int' is currently aliased to.
- Added sign() to return -1, 0 or 1 depending on the sign of a scalar input
- Updated logical && and || operators to use short-circuiting. That is, for
  && if the first operand is false, the second is not evaluated (as at least
  one operand is false), similarly || does not evaluate the second operand if
  the first is true.
- Changed the modulo operator % to perform a floored modulus operation
  instead of a truncated modulo. This results in better behaviour for negative
  dividends. Introduced truncatemod(), floormod() and euclideanmod() functions
  to provide all behaviours.

Improvements:
- Update various API methods and objects to use an AX Logger including
  Compiler and ComputeGenerators
- Moved initialization methods to ax.cc
- Reworked all existing exception types with the majority being converted to
  logger errors. Remaining exception are consolidated library faults.
- Updated command line binary to use Logger and report more than one error
  message and print error locations.
- Added --werror and --max-errors options to the command line binary
- short (int16) integer literals created with the 's' suffix have been
  deprecated and local variables of said types have been removed. All
  integer are now a minimum of 32bit.
- lerp(a,b,x) is now guaranteed to always be monotonic, return exactly b
  when x == 1.0 and return a (or b) when a==b, regardless of the value of x
- rand() now uses a 64bit mersenne twister. This is typically faster than
  the old rand() on most architectures however produces different results.
  The older version can be called with rand32().
- Improved the parsing of integer and floating point literals which produce
  better warnings for overflows, underflows and truncations
- ax::run now errors if both points and volume grids were provided instead
  of processing both separately
- Improved the behaviour of unary minus precedence (i.e. (-a) * b vs -(a * b))
- Added some missing int64_t function signatures
- Added C++ API developer documentation for using the OpenVDB AX library.

Compiler:
- Added new compile methods using Logger/deprecated old compile methods
  taking vectors of strings. Methods that don't take a logger collect all
  possible errors before throwing (on error).
- Added debug checks to ensure functions are registered correctly

Code Generation:
- Added support for arbitrary sized void pointer
- Renamed LeafLocalData to PointLeafLocalData and moved to codegen
- Removed some unnecessary shared pointer usage on function returns

AST:
- Moved parse methods from AST.h to new Parse.h
- Added new parse method returning const AST for use with line/col tracking
  in codegen by Logger
- Removed the ability to construct an AST Value node from a string
- Removed ast/Literals.h

Houdini:
- Move OpenVDB AX SOP into VDB/ASWF folder
- Updated to use new Logger, can now report more than one error message at a
  time.

CMake / Build / Testing:
- Increased the minimum CMake version requirement to 3.12
- Increased the minimum LLVM version requirement to 6.0.0
- Fixed various warnings when building with GCC 9.3.1
- Switch to use GNU Install Dirs
- Fixed github actions not running on branches with slashes
- Removed deprecated openvdb_ax_houdini CMake var
- Updated to use relative includes
- Added Logger to collect and report errors and warnings
- Switched to CMake doxygen support and removed doxygen-config
- Switched to vfxall clang docker containers for github actions and added a
  vfx 2021 platform test
- Removed LLVM 6 macos test as it's been removed from brew
- Changed the way in which the AX grammar is included through CMake depending
  on if it is being rebuilt
- Flipped the compile time matrix support check. Changed the MATRIX_SUPPORT
  CMake variable to OPENVDB_HAS_MATRIX_SUPPORT. If not defined, implies
  OpenVDB does not have matrix grid support