// Copyright Contributors to the OpenVDB Project // SPDX-License-Identifier: Apache-2.0 /// @file openvdb/version.h /// @brief Library and file format version numbers /// /// @details /// When the library is built with the latest ABI, its namespace has the form /// openvdb::vX_Y, where @e X and @e Y are the major and minor version /// numbers. /// /// The library can be built using an older ABI by changing the value of the /// @b OPENVDB_ABI_VERSION_NUMBER. (e.g., via -DOPENVDB_ABI_VERSION_NUMBER=N). /// In that case, the namespace has the form openvdb::vX_YabiN, /// where N is the ABI version number. /// /// The ABI version must be set consistently when building code that depends on /// OpenVDB. /// /// The ABI version number defaults to the library major version number, which /// gets incremented whenever changes are made to the ABI of the Grid class or /// related classes (Tree, Transform, Metadata, etc.). Setting the ABI version /// number to an earlier library version number disables grid ABI changes made /// since that library version. /// /// The library minor version number gets incremented whenever a change is made /// to any aspect of the public API (not just the grid API) that necessitates /// changes to client code. Changes to APIs in private or internal namespaces /// do not trigger a minor version number increment; such APIs should not be /// used in client code. /// /// A patch version number increment indicates a change—usually a new /// feature or a bug fix—that does not necessitate changes to client code /// but rather only recompilation of that code (because the library namespace /// incorporates the version number). /// /// The file format version number gets incremented when it becomes possible to /// write files that cannot safely be read with older versions of the library. /// Not all files written in a newer format are incompatible with older /// libraries, however. And in general, files containing grids of unknown type /// can be read safely, although the unknown grids will not be accessible. #ifndef OPENVDB_VERSION_HAS_BEEN_INCLUDED #define OPENVDB_VERSION_HAS_BEEN_INCLUDED #include "openvdb/Platform.h" #include // size_t #include // uint32_t /////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////// // Auto generated build configurations from CMake ///@{ /// @brief Library major, minor and patch version numbers /// @hideinitializer #define OPENVDB_LIBRARY_MAJOR_VERSION_NUMBER 12 /// @hideinitializer #define OPENVDB_LIBRARY_MINOR_VERSION_NUMBER 0 /// @hideinitializer #define OPENVDB_LIBRARY_PATCH_VERSION_NUMBER 0 ///@} /// @note This ifndef exists for compatibility with older versions of OpenVDB. /// This value should never be different from the value configured when /// OpenVDB was built, but this previously needed to be defined by downstream /// software. Redefining it here would cause build failures, so this allows /// users to transition and remove the define in their build systems. #ifndef OPENVDB_ABI_VERSION_NUMBER /// @brief The ABI version that OpenVDB was built with /// @hideinitializer #define OPENVDB_ABI_VERSION_NUMBER 12 #endif /// @brief Library version number string of the form ".." /// @details This is a macro rather than a static constant because we typically /// want the compile-time version number, not the runtime version number /// (although the two are usually the same). /// @hideinitializer #define OPENVDB_LIBRARY_VERSION_STRING "12.0.0" /// @brief Library version number string of the form "..abi" /// @details This is a macro rather than a static constant because we typically /// want the compile-time version number, not the runtime version number /// (although the two are usually the same). /// @hideinitializer #define OPENVDB_LIBRARY_ABI_VERSION_STRING "12.0.0abi12" /// @brief Library version number as a packed integer ("%02x%02x%04x", major, minor, patch) /// @hideinitializer #define OPENVDB_LIBRARY_VERSION_NUMBER 201326592 /// @brief Where this version was compiled from if it comes from a /// git repo. #define OPENVDB_PACKAGE_URL "" #define OPENVDB_PACKAGE_REVISION "" /// @brief The version namespace name for this library version /// @hideinitializer /// /// When the ABI version number matches the library major version number, /// symbols are named as in the following examples: /// - @b openvdb::vX_Y::Vec3i /// - @b openvdb::vX_Y::io::File /// - @b openvdb::vX_Y::tree::Tree /// /// where X and Y are the major and minor version numbers. /// /// When the ABI version number does not match the library major version number, /// symbol names include the ABI version: /// - @b openvdb::vX_YabiN::Vec3i /// - @b openvdb::vX_YabiN::io::File /// - @b openvdb::vX_YabiN::tree::Tree /// /// where X, Y and N are the major, minor and ABI version numbers, respectively. #if OPENVDB_ABI_VERSION_NUMBER == OPENVDB_LIBRARY_MAJOR_VERSION_NUMBER #define OPENVDB_VERSION_NAME v12_0 #else #define OPENVDB_VERSION_NAME v12_0abi12 #endif /* Denotes whether VDB was built with IMath Half support */ #ifndef OPENVDB_USE_IMATH_HALF /* #undef OPENVDB_USE_IMATH_HALF */ /* Denotes whether VDB was built against Imath 3+ */ /* #undef OPENVDB_IMATH_VERSION */ #endif /* Denotes whether VDB was built with Blosc support */ #ifndef OPENVDB_USE_BLOSC #define OPENVDB_USE_BLOSC #endif /* Denotes whether VDB was built with ZLIB support */ #ifndef OPENVDB_USE_ZLIB #define OPENVDB_USE_ZLIB #endif /* Denotes whether VDB was built with Delayed Loading support */ #ifndef OPENVDB_USE_DELAYED_LOADING #define OPENVDB_USE_DELAYED_LOADING #endif /* Denotes whether VDB was built asserts enabled in VDB code */ #ifndef OPENVDB_ENABLE_ASSERTS /* #undef OPENVDB_ENABLE_ASSERTS */ #endif /* Denotes whether VDB was built with explicit template instantiation */ #ifndef OPENVDB_USE_EXPLICIT_INSTANTIATION /* #undef OPENVDB_USE_EXPLICIT_INSTANTIATION */ #endif /* Defines the macros for explicit template declarations. */ #define OPENVDB_INSTANTIATE extern template OPENVDB_TEMPLATE_IMPORT #define OPENVDB_INSTANTIATE_CLASS extern template class OPENVDB_TEMPLATE_IMPORT #define OPENVDB_INSTANTIATE_STRUCT extern template struct OPENVDB_TEMPLATE_IMPORT /* Defines the macros for explicit template instantiations. */ #define OPENVDB_REAL_TREE_INSTANTIATE(Function) #define OPENVDB_NUMERIC_TREE_INSTANTIATE(Function) #define OPENVDB_VEC3_TREE_INSTANTIATE(Function) #define OPENVDB_VOLUME_TREE_INSTANTIATE(Function) #define OPENVDB_ALL_TREE_INSTANTIATE(Function) /////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////// #if OPENVDB_ABI_VERSION_NUMBER > OPENVDB_LIBRARY_MAJOR_VERSION_NUMBER // If using a future OPENVDB_ABI_VERSION_NUMBER, issue a message directive. // This can be suppressed by defining OPENVDB_USE_FUTURE_ABI_=ON. // Note that, whilst the VDB CMake does not allow this option to be hit, // it exists to propagate this message to downstream targets #if OPENVDB_ABI_VERSION_NUMBER == 13 #ifndef OPENVDB_USE_FUTURE_ABI_13 PRAGMA(message("NOTE: ABI = 13 is still in active development and has not been finalized, " "define OPENVDB_USE_FUTURE_ABI_13 to suppress this message")) #endif #else #error expected OPENVDB_ABI_VERSION_NUMBER <= OPENVDB_LIBRARY_MAJOR_VERSION_NUMBER #endif #endif // If using an OPENVDB_ABI_VERSION_NUMBER that has been deprecated, issue a message // directive. This can be suppressed by defining OPENVDB_USE_DEPRECATED_ABI_. // Note that, whilst the VDB CMake does not allow this option to be hit, // it exists to propagate this message to downstream targets #ifndef OPENVDB_USE_DEPRECATED_ABI_10 #if OPENVDB_ABI_VERSION_NUMBER == 10 PRAGMA(message("NOTE: ABI = 10 is deprecated, define OPENVDB_USE_DEPRECATED_ABI_10 " "to suppress this message")) #endif #endif #ifndef OPENVDB_USE_DEPRECATED_ABI_11 #if OPENVDB_ABI_VERSION_NUMBER == 11 PRAGMA(message("NOTE: ABI = 11 is deprecated, define OPENVDB_USE_DEPRECATED_ABI_11 " "to suppress this message")) #endif #endif /// By default, the @b OPENVDB_REQUIRE_VERSION_NAME macro is undefined, and /// symbols from the version namespace are promoted to the top-level namespace /// so that, for example, @b openvdb::v5_0::io::File can be referred to /// simply as @b openvdb::io::File. /// /// When @b OPENVDB_REQUIRE_VERSION_NAME is defined, symbols must be /// fully namespace-qualified. /// @hideinitializer #ifdef OPENVDB_REQUIRE_VERSION_NAME #define OPENVDB_USE_VERSION_NAMESPACE #else // The empty namespace clause below ensures that OPENVDB_VERSION_NAME // is recognized as a namespace name. #define OPENVDB_USE_VERSION_NAMESPACE \ namespace OPENVDB_VERSION_NAME {} \ using namespace OPENVDB_VERSION_NAME; #endif namespace openvdb { OPENVDB_USE_VERSION_NAMESPACE namespace OPENVDB_VERSION_NAME { /// @brief The magic number is stored in the first four bytes of every VDB file. /// @details This can be used to quickly test whether we have a valid file or not. const int32_t OPENVDB_MAGIC = 0x56444220; /// Library major, minor and patch version numbers /// @hideinitializer const uint32_t OPENVDB_LIBRARY_MAJOR_VERSION = OPENVDB_LIBRARY_MAJOR_VERSION_NUMBER, OPENVDB_LIBRARY_MINOR_VERSION = OPENVDB_LIBRARY_MINOR_VERSION_NUMBER, OPENVDB_LIBRARY_PATCH_VERSION = OPENVDB_LIBRARY_PATCH_VERSION_NUMBER; /// Library version number as a packed integer ("%02x%02x%04x", major, minor, patch) /// @hideinitializer const uint32_t OPENVDB_LIBRARY_VERSION = OPENVDB_LIBRARY_VERSION_NUMBER; /// ABI version number /// @hideinitializer const uint32_t OPENVDB_ABI_VERSION = OPENVDB_ABI_VERSION_NUMBER; /// @brief The current version number of the VDB file format /// @details This can be used to enable various backwards compatibility switches /// or to reject files that cannot be read. const uint32_t OPENVDB_FILE_VERSION = 224; /// Notable file format version numbers enum { OPENVDB_FILE_VERSION_ROOTNODE_MAP = 213, OPENVDB_FILE_VERSION_INTERNALNODE_COMPRESSION = 214, OPENVDB_FILE_VERSION_SIMPLIFIED_GRID_TYPENAME = 215, OPENVDB_FILE_VERSION_GRID_INSTANCING = 216, OPENVDB_FILE_VERSION_BOOL_LEAF_OPTIMIZATION = 217, OPENVDB_FILE_VERSION_BOOST_UUID = 218, OPENVDB_FILE_VERSION_NO_GRIDMAP = 219, OPENVDB_FILE_VERSION_NEW_TRANSFORM = 219, OPENVDB_FILE_VERSION_SELECTIVE_COMPRESSION = 220, OPENVDB_FILE_VERSION_FLOAT_FRUSTUM_BBOX = 221, OPENVDB_FILE_VERSION_NODE_MASK_COMPRESSION = 222, OPENVDB_FILE_VERSION_BLOSC_COMPRESSION = 223, OPENVDB_FILE_VERSION_POINT_INDEX_GRID = 223, OPENVDB_FILE_VERSION_MULTIPASS_IO = 224 }; /// Return a library version number string of the form "..". inline constexpr const char* getLibraryVersionString() { return OPENVDB_LIBRARY_VERSION_STRING; } /// Return a library version number string of the form "..abi". inline constexpr const char* getLibraryAbiVersionString() { return OPENVDB_LIBRARY_ABI_VERSION_STRING; } inline constexpr const char* getPackageUrl() { return OPENVDB_PACKAGE_URL; } inline constexpr const char* getPackageRevision() { return OPENVDB_PACKAGE_REVISION; } struct VersionId { uint32_t first, second; VersionId(): first(0), second(0) {} VersionId(uint32_t major, uint32_t minor): first(major), second(minor) {} }; } // namespace OPENVDB_VERSION_NAME } // namespace openvdb #endif // OPENVDB_VERSION_HAS_BEEN_INCLUDED