| Line | Branch | Exec | Source |
|---|---|---|---|
| 1 | // Copyright Contributors to the OpenVDB Project | ||
| 2 | // SPDX-License-Identifier: MPL-2.0 | ||
| 3 | |||
| 4 | /// @file openvdb/version.h | ||
| 5 | /// @brief Library and file format version numbers | ||
| 6 | /// | ||
| 7 | /// @details | ||
| 8 | /// When the library is built with the latest ABI, its namespace has the form | ||
| 9 | /// <B>openvdb::vX_Y</B>, where @e X and @e Y are the major and minor version | ||
| 10 | /// numbers. | ||
| 11 | /// | ||
| 12 | /// The library can be built using an older ABI by changing the value of the | ||
| 13 | /// @b OPENVDB_ABI_VERSION_NUMBER. (e.g., via <TT>-DOPENVDB_ABI_VERSION_NUMBER=<I>N</I></TT>). | ||
| 14 | /// In that case, the namespace has the form <B>openvdb::vX_YabiN</B>, | ||
| 15 | /// where N is the ABI version number. | ||
| 16 | /// | ||
| 17 | /// The ABI version must be set consistently when building code that depends on | ||
| 18 | /// OpenVDB. | ||
| 19 | /// | ||
| 20 | /// The ABI version number defaults to the library major version number, which | ||
| 21 | /// gets incremented whenever changes are made to the ABI of the Grid class or | ||
| 22 | /// related classes (Tree, Transform, Metadata, etc.). Setting the ABI version | ||
| 23 | /// number to an earlier library version number disables grid ABI changes made | ||
| 24 | /// since that library version. | ||
| 25 | /// | ||
| 26 | /// The library minor version number gets incremented whenever a change is made | ||
| 27 | /// to any aspect of the public API (not just the grid API) that necessitates | ||
| 28 | /// changes to client code. Changes to APIs in private or internal namespaces | ||
| 29 | /// do not trigger a minor version number increment; such APIs should not be | ||
| 30 | /// used in client code. | ||
| 31 | /// | ||
| 32 | /// A patch version number increment indicates a change—usually a new | ||
| 33 | /// feature or a bug fix—that does not necessitate changes to client code | ||
| 34 | /// but rather only recompilation of that code (because the library namespace | ||
| 35 | /// incorporates the version number). | ||
| 36 | /// | ||
| 37 | /// The file format version number gets incremented when it becomes possible to | ||
| 38 | /// write files that cannot safely be read with older versions of the library. | ||
| 39 | /// Not all files written in a newer format are incompatible with older | ||
| 40 | /// libraries, however. And in general, files containing grids of unknown type | ||
| 41 | /// can be read safely, although the unknown grids will not be accessible. | ||
| 42 | |||
| 43 | #ifndef OPENVDB_VERSION_HAS_BEEN_INCLUDED | ||
| 44 | #define OPENVDB_VERSION_HAS_BEEN_INCLUDED | ||
| 45 | |||
| 46 | #include "openvdb/Platform.h" | ||
| 47 | |||
| 48 | #include <cstddef> // size_t | ||
| 49 | #include <cstdint> // uint32_t | ||
| 50 | |||
| 51 | /////////////////////////////////////////////////////////////////////////////// | ||
| 52 | /////////////////////////////////////////////////////////////////////////////// | ||
| 53 | |||
| 54 | // Auto generated build configurations from CMake | ||
| 55 | |||
| 56 | ///@{ | ||
| 57 | /// @brief Library major, minor and patch version numbers | ||
| 58 | /// @hideinitializer | ||
| 59 | #define OPENVDB_LIBRARY_MAJOR_VERSION_NUMBER 9 | ||
| 60 | /// @hideinitializer | ||
| 61 | #define OPENVDB_LIBRARY_MINOR_VERSION_NUMBER 1 | ||
| 62 | /// @hideinitializer | ||
| 63 | #define OPENVDB_LIBRARY_PATCH_VERSION_NUMBER 1 | ||
| 64 | ///@} | ||
| 65 | |||
| 66 | /// @note This ifndef exists for compatibility with older versions of OpenVDB. | ||
| 67 | /// This value should never be different from the value configured when | ||
| 68 | /// OpenVDB was built, but this previously needed to be defined by downstream | ||
| 69 | /// software. Redefining it here would cause build failures, so this allows | ||
| 70 | /// users to transition and remove the define in their build systems. | ||
| 71 | #ifndef OPENVDB_ABI_VERSION_NUMBER | ||
| 72 | /// @brief The ABI version that OpenVDB was built with | ||
| 73 | /// @hideinitializer | ||
| 74 | #define OPENVDB_ABI_VERSION_NUMBER 9 | ||
| 75 | #endif | ||
| 76 | |||
| 77 | /// @brief Library version number string of the form "<major>.<minor>.<patch>" | ||
| 78 | /// @details This is a macro rather than a static constant because we typically | ||
| 79 | /// want the compile-time version number, not the runtime version number | ||
| 80 | /// (although the two are usually the same). | ||
| 81 | /// @hideinitializer | ||
| 82 | #define OPENVDB_LIBRARY_VERSION_STRING "9.1.1" | ||
| 83 | |||
| 84 | /// @brief Library version number string of the form "<major>.<minor>.<patch>abi<abi>" | ||
| 85 | /// @details This is a macro rather than a static constant because we typically | ||
| 86 | /// want the compile-time version number, not the runtime version number | ||
| 87 | /// (although the two are usually the same). | ||
| 88 | /// @hideinitializer | ||
| 89 | #define OPENVDB_LIBRARY_ABI_VERSION_STRING "9.1.1abi9" | ||
| 90 | |||
| 91 | /// @brief Library version number as a packed integer ("%02x%02x%04x", major, minor, patch) | ||
| 92 | /// @hideinitializer | ||
| 93 | #define OPENVDB_LIBRARY_VERSION_NUMBER 151060481 | ||
| 94 | |||
| 95 | /// @brief The version namespace name for this library version | ||
| 96 | /// @hideinitializer | ||
| 97 | /// | ||
| 98 | /// When the ABI version number matches the library major version number, | ||
| 99 | /// symbols are named as in the following examples: | ||
| 100 | /// - @b openvdb::vX_Y::Vec3i | ||
| 101 | /// - @b openvdb::vX_Y::io::File | ||
| 102 | /// - @b openvdb::vX_Y::tree::Tree | ||
| 103 | /// | ||
| 104 | /// where X and Y are the major and minor version numbers. | ||
| 105 | /// | ||
| 106 | /// When the ABI version number does not match the library major version number, | ||
| 107 | /// symbol names include the ABI version: | ||
| 108 | /// - @b openvdb::vX_YabiN::Vec3i | ||
| 109 | /// - @b openvdb::vX_YabiN::io::File | ||
| 110 | /// - @b openvdb::vX_YabiN::tree::Tree | ||
| 111 | /// | ||
| 112 | /// where X, Y and N are the major, minor and ABI version numbers, respectively. | ||
| 113 | #if OPENVDB_ABI_VERSION_NUMBER == OPENVDB_LIBRARY_MAJOR_VERSION_NUMBER | ||
| 114 | #define OPENVDB_VERSION_NAME v9_1 | ||
| 115 | #else | ||
| 116 | #define OPENVDB_VERSION_NAME v9_1abi9 | ||
| 117 | #endif | ||
| 118 | |||
| 119 | /* Denotes whether VDB was built with IMath Half support */ | ||
| 120 | #ifndef OPENVDB_USE_IMATH_HALF | ||
| 121 | /* #undef OPENVDB_USE_IMATH_HALF */ | ||
| 122 | /* Denotes whether VDB was built against Imath 3+ */ | ||
| 123 | /* #undef OPENVDB_IMATH_VERSION */ | ||
| 124 | #endif | ||
| 125 | |||
| 126 | /* Denotes whether VDB was built with Blosc support */ | ||
| 127 | #ifndef OPENVDB_USE_BLOSC | ||
| 128 | #define OPENVDB_USE_BLOSC | ||
| 129 | #endif | ||
| 130 | |||
| 131 | /* Denotes whether VDB was built with ZLIB support */ | ||
| 132 | #ifndef OPENVDB_USE_ZLIB | ||
| 133 | #define OPENVDB_USE_ZLIB | ||
| 134 | #endif | ||
| 135 | |||
| 136 | /* Denotes whether VDB was built with explicit template instantiation */ | ||
| 137 | #ifndef OPENVDB_USE_EXPLICIT_INSTANTIATION | ||
| 138 | #define OPENVDB_USE_EXPLICIT_INSTANTIATION | ||
| 139 | #endif | ||
| 140 | |||
| 141 | /* Defines the macros for explicit template declarations. */ | ||
| 142 | #define OPENVDB_INSTANTIATE extern template OPENVDB_TEMPLATE_IMPORT | ||
| 143 | #define OPENVDB_INSTANTIATE_CLASS extern template class OPENVDB_TEMPLATE_IMPORT | ||
| 144 | #define OPENVDB_INSTANTIATE_STRUCT extern template struct OPENVDB_TEMPLATE_IMPORT | ||
| 145 | |||
| 146 | /* Defines the macros for explicit template instantiations. */ | ||
| 147 | #define OPENVDB_REAL_TREE_INSTANTIATE(Function) \ | ||
| 148 | OPENVDB_INSTANTIATE Function(FloatTree); \ | ||
| 149 | OPENVDB_INSTANTIATE Function(DoubleTree); | ||
| 150 | #define OPENVDB_NUMERIC_TREE_INSTANTIATE(Function) \ | ||
| 151 | OPENVDB_INSTANTIATE Function(Int32Tree); \ | ||
| 152 | OPENVDB_INSTANTIATE Function(Int64Tree); \ | ||
| 153 | OPENVDB_INSTANTIATE Function(FloatTree); \ | ||
| 154 | OPENVDB_INSTANTIATE Function(DoubleTree); | ||
| 155 | #define OPENVDB_VEC3_TREE_INSTANTIATE(Function) \ | ||
| 156 | OPENVDB_INSTANTIATE Function(Vec3STree); \ | ||
| 157 | OPENVDB_INSTANTIATE Function(Vec3DTree); \ | ||
| 158 | OPENVDB_INSTANTIATE Function(Vec3ITree); | ||
| 159 | #define OPENVDB_VOLUME_TREE_INSTANTIATE(Function) \ | ||
| 160 | OPENVDB_INSTANTIATE Function(BoolTree); \ | ||
| 161 | OPENVDB_INSTANTIATE Function(Int32Tree); \ | ||
| 162 | OPENVDB_INSTANTIATE Function(Int64Tree); \ | ||
| 163 | OPENVDB_INSTANTIATE Function(FloatTree); \ | ||
| 164 | OPENVDB_INSTANTIATE Function(DoubleTree); \ | ||
| 165 | OPENVDB_INSTANTIATE Function(Vec3STree); \ | ||
| 166 | OPENVDB_INSTANTIATE Function(Vec3DTree); \ | ||
| 167 | OPENVDB_INSTANTIATE Function(Vec3ITree); | ||
| 168 | #define OPENVDB_ALL_TREE_INSTANTIATE(Function) \ | ||
| 169 | OPENVDB_INSTANTIATE Function(MaskTree); \ | ||
| 170 | OPENVDB_INSTANTIATE Function(points::PointDataTree); \ | ||
| 171 | OPENVDB_INSTANTIATE Function(BoolTree); \ | ||
| 172 | OPENVDB_INSTANTIATE Function(Int32Tree); \ | ||
| 173 | OPENVDB_INSTANTIATE Function(Int64Tree); \ | ||
| 174 | OPENVDB_INSTANTIATE Function(FloatTree); \ | ||
| 175 | OPENVDB_INSTANTIATE Function(DoubleTree); \ | ||
| 176 | OPENVDB_INSTANTIATE Function(Vec3STree); \ | ||
| 177 | OPENVDB_INSTANTIATE Function(Vec3DTree); \ | ||
| 178 | OPENVDB_INSTANTIATE Function(Vec3ITree); | ||
| 179 | |||
| 180 | /////////////////////////////////////////////////////////////////////////////// | ||
| 181 | /////////////////////////////////////////////////////////////////////////////// | ||
| 182 | |||
| 183 | |||
| 184 | #if OPENVDB_ABI_VERSION_NUMBER > OPENVDB_LIBRARY_MAJOR_VERSION_NUMBER | ||
| 185 | // If using a future OPENVDB_ABI_VERSION_NUMBER, issue a message directive. | ||
| 186 | // This can be suppressed by defining OPENVDB_USE_FUTURE_ABI_<VERSION>=ON. | ||
| 187 | // Note that, whilst the VDB CMake does not allow this option to be hit, | ||
| 188 | // it exists to propagate this message to downstream targets | ||
| 189 | #if OPENVDB_ABI_VERSION_NUMBER == 10 | ||
| 190 | #ifndef OPENVDB_USE_FUTURE_ABI_10 | ||
| 191 | PRAGMA(message("NOTE: ABI = 10 is still in active development and has not been finalized, " | ||
| 192 | "define OPENVDB_USE_FUTURE_ABI_10 to suppress this message")) | ||
| 193 | #endif | ||
| 194 | #else | ||
| 195 | #error expected OPENVDB_ABI_VERSION_NUMBER <= OPENVDB_LIBRARY_MAJOR_VERSION_NUMBER | ||
| 196 | #endif | ||
| 197 | #endif | ||
| 198 | |||
| 199 | // If using an OPENVDB_ABI_VERSION_NUMBER that has been deprecated, issue a message | ||
| 200 | // directive. This can be suppressed by defining OPENVDB_USE_DEPRECATED_ABI_<VERSION>. | ||
| 201 | // Note that, whilst the VDB CMake does not allow this option to be hit, | ||
| 202 | // it exists to propagate this message to downstream targets | ||
| 203 | #ifndef OPENVDB_USE_DEPRECATED_ABI_7 | ||
| 204 | #if OPENVDB_ABI_VERSION_NUMBER == 7 | ||
| 205 | PRAGMA(message("NOTE: ABI = 7 is deprecated, define OPENVDB_USE_DEPRECATED_ABI_7 " | ||
| 206 | "to suppress this message")) | ||
| 207 | #endif | ||
| 208 | #endif | ||
| 209 | #ifndef OPENVDB_USE_DEPRECATED_ABI_8 | ||
| 210 | #if OPENVDB_ABI_VERSION_NUMBER == 8 | ||
| 211 | PRAGMA(message("NOTE: ABI = 8 is deprecated, define OPENVDB_USE_DEPRECATED_ABI_8 " | ||
| 212 | "to suppress this message")) | ||
| 213 | #endif | ||
| 214 | #endif | ||
| 215 | |||
| 216 | /// By default, the @b OPENVDB_REQUIRE_VERSION_NAME macro is undefined, and | ||
| 217 | /// symbols from the version namespace are promoted to the top-level namespace | ||
| 218 | /// so that, for example, @b openvdb::v5_0::io::File can be referred to | ||
| 219 | /// simply as @b openvdb::io::File. | ||
| 220 | /// | ||
| 221 | /// When @b OPENVDB_REQUIRE_VERSION_NAME is defined, symbols must be | ||
| 222 | /// fully namespace-qualified. | ||
| 223 | /// @hideinitializer | ||
| 224 | #ifdef OPENVDB_REQUIRE_VERSION_NAME | ||
| 225 | #define OPENVDB_USE_VERSION_NAMESPACE | ||
| 226 | #else | ||
| 227 | // The empty namespace clause below ensures that OPENVDB_VERSION_NAME | ||
| 228 | // is recognized as a namespace name. | ||
| 229 | #define OPENVDB_USE_VERSION_NAMESPACE \ | ||
| 230 | namespace OPENVDB_VERSION_NAME {} \ | ||
| 231 | using namespace OPENVDB_VERSION_NAME; | ||
| 232 | #endif | ||
| 233 | |||
| 234 | |||
| 235 | namespace openvdb { | ||
| 236 | OPENVDB_USE_VERSION_NAMESPACE | ||
| 237 | namespace OPENVDB_VERSION_NAME { | ||
| 238 | |||
| 239 | /// @brief The magic number is stored in the first four bytes of every VDB file. | ||
| 240 | /// @details This can be used to quickly test whether we have a valid file or not. | ||
| 241 | const int32_t OPENVDB_MAGIC = 0x56444220; | ||
| 242 | |||
| 243 | /// Library major, minor and patch version numbers | ||
| 244 | /// @hideinitializer | ||
| 245 | const uint32_t | ||
| 246 | OPENVDB_LIBRARY_MAJOR_VERSION = OPENVDB_LIBRARY_MAJOR_VERSION_NUMBER, | ||
| 247 | OPENVDB_LIBRARY_MINOR_VERSION = OPENVDB_LIBRARY_MINOR_VERSION_NUMBER, | ||
| 248 | OPENVDB_LIBRARY_PATCH_VERSION = OPENVDB_LIBRARY_PATCH_VERSION_NUMBER; | ||
| 249 | /// Library version number as a packed integer ("%02x%02x%04x", major, minor, patch) | ||
| 250 | /// @hideinitializer | ||
| 251 | const uint32_t OPENVDB_LIBRARY_VERSION = OPENVDB_LIBRARY_VERSION_NUMBER; | ||
| 252 | /// ABI version number | ||
| 253 | /// @hideinitializer | ||
| 254 | const uint32_t OPENVDB_ABI_VERSION = OPENVDB_ABI_VERSION_NUMBER; | ||
| 255 | |||
| 256 | /// @brief The current version number of the VDB file format | ||
| 257 | /// @details This can be used to enable various backwards compatibility switches | ||
| 258 | /// or to reject files that cannot be read. | ||
| 259 | const uint32_t OPENVDB_FILE_VERSION = 224; | ||
| 260 | |||
| 261 | /// Notable file format version numbers | ||
| 262 | enum { | ||
| 263 | OPENVDB_FILE_VERSION_ROOTNODE_MAP = 213, | ||
| 264 | OPENVDB_FILE_VERSION_INTERNALNODE_COMPRESSION = 214, | ||
| 265 | OPENVDB_FILE_VERSION_SIMPLIFIED_GRID_TYPENAME = 215, | ||
| 266 | OPENVDB_FILE_VERSION_GRID_INSTANCING = 216, | ||
| 267 | OPENVDB_FILE_VERSION_BOOL_LEAF_OPTIMIZATION = 217, | ||
| 268 | OPENVDB_FILE_VERSION_BOOST_UUID = 218, | ||
| 269 | OPENVDB_FILE_VERSION_NO_GRIDMAP = 219, | ||
| 270 | OPENVDB_FILE_VERSION_NEW_TRANSFORM = 219, | ||
| 271 | OPENVDB_FILE_VERSION_SELECTIVE_COMPRESSION = 220, | ||
| 272 | OPENVDB_FILE_VERSION_FLOAT_FRUSTUM_BBOX = 221, | ||
| 273 | OPENVDB_FILE_VERSION_NODE_MASK_COMPRESSION = 222, | ||
| 274 | OPENVDB_FILE_VERSION_BLOSC_COMPRESSION = 223, | ||
| 275 | OPENVDB_FILE_VERSION_POINT_INDEX_GRID = 223, | ||
| 276 | OPENVDB_FILE_VERSION_MULTIPASS_IO = 224 | ||
| 277 | }; | ||
| 278 | |||
| 279 | |||
| 280 | /// Return a library version number string of the form "<major>.<minor>.<patch>". | ||
| 281 | inline constexpr const char* getLibraryVersionString() { return OPENVDB_LIBRARY_VERSION_STRING; } | ||
| 282 | /// Return a library version number string of the form "<major>.<minor>.<patch>abi<abi>". | ||
| 283 | inline constexpr const char* getLibraryAbiVersionString() { | ||
| 284 | return OPENVDB_LIBRARY_ABI_VERSION_STRING; | ||
| 285 | } | ||
| 286 | |||
| 287 | |||
| 288 | struct VersionId { | ||
| 289 | uint32_t first, second; | ||
| 290 |
1/2✓ Branch 0 taken 127 times.
✗ Branch 1 not taken.
|
127 | VersionId(): first(0), second(0) {} |
| 291 |
4/8✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
|
5 | VersionId(uint32_t major, uint32_t minor): first(major), second(minor) {} |
| 292 | }; | ||
| 293 | |||
| 294 | } // namespace OPENVDB_VERSION_NAME | ||
| 295 | } // namespace openvdb | ||
| 296 | |||
| 297 | #endif // OPENVDB_VERSION_HAS_BEEN_INCLUDED | ||
| 298 |