@@ -213,7 +213,7 @@ typedef struct
213213{
214214 uint64_t mMagic ; // 8B magic to validate it is valid grid data.
215215 uint64_t mChecksum ; // 8B. Checksum of grid buffer.
216- uint32_t mMajor ;// 4B. major version number.
216+ uint32_t mVersion ;// 4B. compacted major.minor.path version number.
217217 uint32_t mFlags ; // 4B. flags for grid.
218218 uint64_t mGridSize ; // 8B. byte count of entire grid buffer.
219219 char mGridName [256 ]; // 256B
@@ -294,16 +294,18 @@ cnanovdb_readaccessor_insert(cnanovdb_readaccessor *RESTRICT acc, int childlevel
294294 acc -> mKey .mVec [2 ] = ijk -> mVec [2 ];
295295}
296296
297- #define CREATE_LEAF_NODE_int (LEVEL , LOG2DIM , CHILDTOTAL , TOTAL , MASK , VALUETYPE , SUFFIX ) \
297+ #define CREATE_LEAF_NODE_int (LEVEL , LOG2DIM , CHILDTOTAL , TOTAL , MASK , VALUETYPE , STATSTYPE , SUFFIX ) \
298298typedef struct \
299299{ \
300300 cnanovdb_coord mBBox_min; \
301301 uint8_t mBBoxDif[3]; \
302302 uint8_t mFlags; \
303303 cnanovdb_mask##LOG2DIM mValueMask; \
304- VALUETYPE mValueMin; \
305- VALUETYPE mValueMax; \
306- uint32_t _reserved[ CNANOVDB_ALIGNMENT_PADDING(sizeof(cnanovdb_mask##LOG2DIM)+2*sizeof(VALUETYPE)+sizeof(cnanovdb_coord)+sizeof(uint8_t[3])+sizeof(uint8_t), CNANOVDB_DATA_ALIGNMENT)/4]; \
304+ VALUETYPE mMinimum; \
305+ VALUETYPE mMaximum; \
306+ STATSTYPE mAverage; \
307+ STATSTYPE mStdDevi; \
308+ uint32_t _reserved[ CNANOVDB_ALIGNMENT_PADDING(sizeof(cnanovdb_mask##LOG2DIM)+2*sizeof(VALUETYPE)+2*sizeof(STATSTYPE)+sizeof(cnanovdb_coord)+sizeof(uint8_t[3])+sizeof(uint8_t), CNANOVDB_DATA_ALIGNMENT)/4]; \
307309 VALUETYPE mVoxels[1u << (3*LOG2DIM)]; \
308310} cnanovdb_node##LEVEL##SUFFIX; \
309311\
@@ -325,6 +327,7 @@ cnanovdb_node##LEVEL##SUFFIX##_getValue(const CNANOVDB_GLOBAL cnanovdb_node##LEV
325327VALUETYPE \
326328cnanovdb_node##LEVEL##SUFFIX##_getValueAndCache(const CNANOVDB_GLOBAL cnanovdb_node##LEVEL##SUFFIX *RESTRICT node, const cnanovdb_coord *RESTRICT ijk, cnanovdb_readaccessor *RESTRICT /* DO NOT REMOVE: Required for C99 compliance */ acc ) \
327329{ \
330+ (void )(acc ); \
328331 uint32_t n = cnanovdb_node ##LEVEL ##SUFFIX##_CoordToOffset(ijk); \
329332 return node->mVoxels[n]; \
330333} \
@@ -338,18 +341,19 @@ cnanovdb_tree_getNode##LEVEL##SUFFIX(const CNANOVDB_GLOBAL cnanovdb_treedata *RE
338341\
339342/**/
340343
341- #define CREATE_LEAF_NODE (LEVEL , LOG2DIM , TOTAL , VALUETYPE , SUFFIX ) \
342- CREATE_LEAF_NODE_int(LEVEL, LOG2DIM, (TOTAL-LOG2DIM), TOTAL, ((1u << TOTAL) - 1u), VALUETYPE, SUFFIX)
344+ #define CREATE_LEAF_NODE (LEVEL , LOG2DIM , TOTAL , VALUETYPE , STATSTYPE , SUFFIX ) \
345+ CREATE_LEAF_NODE_int(LEVEL, LOG2DIM, (TOTAL-LOG2DIM), TOTAL, ((1u << TOTAL) - 1u), VALUETYPE, STATSTYPE, SUFFIX)
343346
344- #define CREATE_INTERNAL_NODE_int (CHILDLEVEL , LEVEL , LOG2DIM , CHILDTOTAL , TOTAL , MASK , VALUETYPE , SUFFIX ) \
347+ #define CREATE_INTERNAL_NODE_int (CHILDLEVEL , LEVEL , LOG2DIM , CHILDTOTAL , TOTAL , MASK , VALUETYPE , STATSTYPE , SUFFIX ) \
345348typedef struct \
346349{ \
347350 cnanovdb_coord mBBox_min, mBBox_max; \
348351 int32_t mOffset; \
349352 uint32_t mFlags; \
350353 cnanovdb_mask##LOG2DIM mValueMask, mChildMask; \
351- VALUETYPE mValueMin, mValueMax; \
352- uint8_t _reserved[CNANOVDB_ALIGNMENT_PADDING(sizeof(cnanovdb_mask##LOG2DIM)+sizeof(VALUETYPE)*2+sizeof(cnanovdb_coord)*2+sizeof(int32_t)+sizeof(uint32_t), CNANOVDB_DATA_ALIGNMENT)]; \
354+ VALUETYPE mMinimum, mMaximum; \
355+ STATSTYPE mAverage, mStdDevi; \
356+ uint8_t _reserved[CNANOVDB_ALIGNMENT_PADDING(sizeof(cnanovdb_mask##LOG2DIM)+sizeof(VALUETYPE)*2+sizeof(STATSTYPE)*2+sizeof(cnanovdb_coord)*2+sizeof(int32_t)+sizeof(uint32_t), CNANOVDB_DATA_ALIGNMENT)]; \
353357 cnanovdb_tileentry##SUFFIX mTable[1u << (3*LOG2DIM)]; \
354358} cnanovdb_node##LEVEL##SUFFIX; \
355359\
@@ -402,8 +406,8 @@ cnanovdb_tree_getNode##LEVEL##SUFFIX(const CNANOVDB_GLOBAL cnanovdb_treedata *RE
402406\
403407/**/
404408
405- #define CREATE_INTERNAL_NODE (CHILDLEVEL , LEVEL , LOG2DIM , TOTAL , VALUETYPE , SUFFIX ) \
406- CREATE_INTERNAL_NODE_int(CHILDLEVEL, LEVEL, LOG2DIM, (TOTAL-LOG2DIM), TOTAL, ((1u << TOTAL) - 1u), VALUETYPE, SUFFIX)
409+ #define CREATE_INTERNAL_NODE (CHILDLEVEL , LEVEL , LOG2DIM , TOTAL , VALUETYPE , STATSTYPE , SUFFIX ) \
410+ CREATE_INTERNAL_NODE_int(CHILDLEVEL, LEVEL, LOG2DIM, (TOTAL-LOG2DIM), TOTAL, ((1u << TOTAL) - 1u), VALUETYPE, STATSTYPE, SUFFIX)
407411
408412
409413#ifdef USE_SINGLE_ROOT_KEY
@@ -450,7 +454,7 @@ CREATE_INTERNAL_NODE_int(CHILDLEVEL, LEVEL, LOG2DIM, (TOTAL-LOG2DIM), TOTAL, ((1
450454#endif
451455
452456
453- #define CREATE_ROOTDATA (VALUETYPE , SUFFIX ) \
457+ #define CREATE_ROOTDATA (VALUETYPE , STATSTYPE , SUFFIX ) \
454458typedef struct \
455459{ \
456460 DEFINE_KEY(key); \
@@ -465,8 +469,10 @@ typedef struct \
465469 cnanovdb_coord mBBox_min, mBBox_max; \
466470 uint64_t mActiveVoxelCount; \
467471 uint32_t mTileCount; \
468- VALUETYPE mBackground, mValueMin, mValueMax; \
469- uint32_t _reserved[CNANOVDB_ALIGNMENT_PADDING(sizeof(cnanovdb_coord)*2+sizeof(uint64_t)+sizeof(uint32_t)+sizeof(VALUETYPE)*3, CNANOVDB_DATA_ALIGNMENT)/4]; \
472+ VALUETYPE mBackground; \
473+ VALUETYPE mMinimum, mMaximum; \
474+ STATSTYPE mAverage, mStdDevi; \
475+ uint32_t _reserved[CNANOVDB_ALIGNMENT_PADDING(sizeof(cnanovdb_coord)*2+sizeof(uint64_t)+sizeof(uint32_t)+sizeof(VALUETYPE)*3+sizeof(STATSTYPE)*2, CNANOVDB_DATA_ALIGNMENT)/4]; \
470476} cnanovdb_rootdata##SUFFIX; \
471477 \
472478const CNANOVDB_GLOBAL cnanovdb_rootdata##SUFFIX * \
@@ -579,17 +585,17 @@ cnanovdb_readaccessor_getValue##SUFFIX(cnanovdb_readaccessor *RESTRICT acc, cons
579585/**/
580586
581587
582- #define CREATE_GRIDTYPE (VALUETYPE , SUFFIX ) \
588+ #define CREATE_GRIDTYPE (VALUETYPE , STATSTYPE , SUFFIX ) \
583589CREATE_TILEENTRY(VALUETYPE, SUFFIX) \
584- CREATE_LEAF_NODE(0, 3, 3, VALUETYPE, SUFFIX) \
585- CREATE_INTERNAL_NODE(0, 1, 4, 7, VALUETYPE, SUFFIX) \
586- CREATE_INTERNAL_NODE(1, 2, 5, 12, VALUETYPE, SUFFIX) \
587- CREATE_ROOTDATA(VALUETYPE, SUFFIX) \
590+ CREATE_LEAF_NODE(0, 3, 3, VALUETYPE, STATSTYPE, SUFFIX) \
591+ CREATE_INTERNAL_NODE(0, 1, 4, 7, VALUETYPE, STATSTYPE, SUFFIX) \
592+ CREATE_INTERNAL_NODE(1, 2, 5, 12, VALUETYPE, STATSTYPE, SUFFIX) \
593+ CREATE_ROOTDATA(VALUETYPE, STATSTYPE, SUFFIX) \
588594CREATE_ACCESSOR(VALUETYPE, SUFFIX) \
589595/**/
590596
591- CREATE_GRIDTYPE (float , F )
592- CREATE_GRIDTYPE (cnanovdb_Vec3F , F3 )
597+ CREATE_GRIDTYPE (float , float , F )
598+ CREATE_GRIDTYPE (cnanovdb_Vec3F , float , F3 )
593599
594600int
595601cnanovdb_griddata_valid (const CNANOVDB_GLOBAL cnanovdb_griddata * RESTRICT grid )
0 commit comments