14 #ifndef NANOVDB_PNANOVDB_H_HAS_BEEN_INCLUDED 15 #define NANOVDB_PNANOVDB_H_HAS_BEEN_INCLUDED 27 #if defined(PNANOVDB_C) 28 #ifndef PNANOVDB_ADDRESS_32 29 #define PNANOVDB_ADDRESS_64 31 #elif defined(PNANOVDB_HLSL) 32 #ifndef PNANOVDB_ADDRESS_64 33 #define PNANOVDB_ADDRESS_32 35 #elif defined(PNANOVDB_GLSL) 36 #ifndef PNANOVDB_ADDRESS_64 37 #define PNANOVDB_ADDRESS_32 45 #if defined(PNANOVDB_C) 48 #ifndef PNANOVDB_CMATH 49 #define PNANOVDB_CMATH 52 #elif defined(PNANOVDB_HLSL) 54 #elif defined(PNANOVDB_GLSL) 59 #ifndef __CUDACC_RTC__ 66 #if defined(PNANOVDB_BUF_CUSTOM) 68 #elif defined(PNANOVDB_C) 69 #define PNANOVDB_BUF_C 70 #elif defined(PNANOVDB_HLSL) 71 #define PNANOVDB_BUF_HLSL 72 #elif defined(PNANOVDB_GLSL) 73 #define PNANOVDB_BUF_GLSL 76 #if defined(PNANOVDB_BUF_C) 77 #ifndef __CUDACC_RTC__ 80 #if defined(__CUDACC__) 81 #define PNANOVDB_BUF_FORCE_INLINE static __host__ __device__ __forceinline__ 83 #define PNANOVDB_BUF_FORCE_INLINE static inline __forceinline 85 #define PNANOVDB_BUF_FORCE_INLINE static inline __attribute__((always_inline)) 87 typedef struct pnanovdb_buf_t
90 #ifdef PNANOVDB_BUF_BOUNDS_CHECK 91 uint64_t size_in_words;
94 PNANOVDB_BUF_FORCE_INLINE pnanovdb_buf_t pnanovdb_make_buf(uint32_t* data, uint64_t size_in_words)
98 #ifdef PNANOVDB_BUF_BOUNDS_CHECK 99 ret.size_in_words = size_in_words;
103 #if defined(PNANOVDB_ADDRESS_32) 104 PNANOVDB_BUF_FORCE_INLINE uint32_t pnanovdb_buf_read_uint32(pnanovdb_buf_t buf, uint32_t byte_offset)
106 uint32_t wordaddress = (byte_offset >> 2u);
107 #ifdef PNANOVDB_BUF_BOUNDS_CHECK 108 return wordaddress < buf.size_in_words ? buf.data[wordaddress] : 0u;
110 return buf.data[wordaddress];
113 PNANOVDB_BUF_FORCE_INLINE uint64_t pnanovdb_buf_read_uint64(pnanovdb_buf_t buf, uint32_t byte_offset)
115 uint64_t* data64 = (uint64_t*)buf.data;
116 uint32_t wordaddress64 = (byte_offset >> 3u);
117 #ifdef PNANOVDB_BUF_BOUNDS_CHECK 118 uint64_t size_in_words64 = buf.size_in_words >> 1u;
119 return wordaddress64 < size_in_words64 ? data64[wordaddress64] : 0llu;
121 return data64[wordaddress64];
124 PNANOVDB_BUF_FORCE_INLINE
void pnanovdb_buf_write_uint32(pnanovdb_buf_t buf, uint32_t byte_offset, uint32_t value)
126 uint32_t wordaddress = (byte_offset >> 2u);
127 #ifdef PNANOVDB_BUF_BOUNDS_CHECK 128 if (wordaddress < buf.size_in_words)
130 buf.data[wordaddress] = value;
133 buf.data[wordaddress] = value;
136 PNANOVDB_BUF_FORCE_INLINE
void pnanovdb_buf_write_uint64(pnanovdb_buf_t buf, uint32_t byte_offset, uint64_t value)
138 uint64_t* data64 = (uint64_t*)buf.data;
139 uint32_t wordaddress64 = (byte_offset >> 3u);
140 #ifdef PNANOVDB_BUF_BOUNDS_CHECK 141 uint64_t size_in_words64 = buf.size_in_words >> 1u;
142 if (wordaddress64 < size_in_words64)
144 data64[wordaddress64] = value;
147 data64[wordaddress64] = value;
150 #elif defined(PNANOVDB_ADDRESS_64) 151 PNANOVDB_BUF_FORCE_INLINE uint32_t pnanovdb_buf_read_uint32(pnanovdb_buf_t buf, uint64_t byte_offset)
153 uint64_t wordaddress = (byte_offset >> 2u);
154 #ifdef PNANOVDB_BUF_BOUNDS_CHECK 155 return wordaddress < buf.size_in_words ? buf.data[wordaddress] : 0u;
157 return buf.data[wordaddress];
160 PNANOVDB_BUF_FORCE_INLINE uint64_t pnanovdb_buf_read_uint64(pnanovdb_buf_t buf, uint64_t byte_offset)
162 uint64_t* data64 = (uint64_t*)buf.data;
163 uint64_t wordaddress64 = (byte_offset >> 3u);
164 #ifdef PNANOVDB_BUF_BOUNDS_CHECK 165 uint64_t size_in_words64 = buf.size_in_words >> 1u;
166 return wordaddress64 < size_in_words64 ? data64[wordaddress64] : 0llu;
168 return data64[wordaddress64];
171 PNANOVDB_BUF_FORCE_INLINE
void pnanovdb_buf_write_uint32(pnanovdb_buf_t buf, uint64_t byte_offset, uint32_t value)
173 uint64_t wordaddress = (byte_offset >> 2u);
174 #ifdef PNANOVDB_BUF_BOUNDS_CHECK 175 if (wordaddress < buf.size_in_words)
177 buf.data[wordaddress] = value;
180 buf.data[wordaddress] = value;
183 PNANOVDB_BUF_FORCE_INLINE
void pnanovdb_buf_write_uint64(pnanovdb_buf_t buf, uint64_t byte_offset, uint64_t value)
185 uint64_t* data64 = (uint64_t*)buf.data;
186 uint64_t wordaddress64 = (byte_offset >> 3u);
187 #ifdef PNANOVDB_BUF_BOUNDS_CHECK 188 uint64_t size_in_words64 = buf.size_in_words >> 1u;
189 if (wordaddress64 < size_in_words64)
191 data64[wordaddress64] = value;
194 data64[wordaddress64] = value;
198 typedef uint32_t pnanovdb_grid_type_t;
199 #define PNANOVDB_GRID_TYPE_GET(grid_typeIn, nameIn) pnanovdb_grid_type_constants[grid_typeIn].nameIn 200 #elif defined(PNANOVDB_BUF_HLSL) 201 #if defined(PNANOVDB_BUF_HLSL_RW) 202 #if defined(PNANOVDB_BUF_HLSL_64) 203 #define pnanovdb_buf_t RWStructuredBuffer<uint2> 205 #define pnanovdb_buf_t RWStructuredBuffer<uint> 208 #if defined(PNANOVDB_BUF_HLSL_64) 209 #define pnanovdb_buf_t StructuredBuffer<uint2> 211 #define pnanovdb_buf_t StructuredBuffer<uint> 214 #if defined(PNANOVDB_ADDRESS_32) 215 uint pnanovdb_buf_read_uint32(pnanovdb_buf_t buf, uint byte_offset)
217 #if defined(PNANOVDB_BUF_HLSL_64) 218 uint2 val = buf[(byte_offset >> 3u)];
219 return ((byte_offset & 4u) == 0u) ? val.x : val.y;
221 return buf[(byte_offset >> 2u)];
224 uint2 pnanovdb_buf_read_uint64(pnanovdb_buf_t buf, uint byte_offset)
227 #if defined(PNANOVDB_BUF_HLSL_64) 228 ret = buf[(byte_offset >> 3u)];
230 ret.x = pnanovdb_buf_read_uint32(buf, byte_offset + 0u);
231 ret.y = pnanovdb_buf_read_uint32(buf, byte_offset + 4u);
235 void pnanovdb_buf_write_uint32(pnanovdb_buf_t buf, uint byte_offset, uint value)
238 #if defined(PNANOVDB_BUF_HLSL_RW) 239 #if defined(PNANOVDB_BUF_HLSL_64) 240 if ((byte_offset & 4u) == 0u) {buf[(byte_offset >> 3u)].x = value;}
241 else {buf[(byte_offset >> 3u)].y = value;}
243 buf[(byte_offset >> 2u)] = value;
247 void pnanovdb_buf_write_uint64(pnanovdb_buf_t buf, uint byte_offset, uint2 value)
250 #if defined(PNANOVDB_BUF_HLSL_RW) 251 #if defined(PNANOVDB_BUF_HLSL_64) 252 buf[(byte_offset >> 3u)] = value;
254 pnanovdb_buf_write_uint32(buf, byte_offset + 0u, value.x);
255 pnanovdb_buf_write_uint32(buf, byte_offset + 4u, value.y);
259 #elif defined(PNANOVDB_ADDRESS_64) 260 uint pnanovdb_buf_read_uint32(pnanovdb_buf_t buf, uint64_t byte_offset)
262 #if defined(PNANOVDB_BUF_HLSL_64) 263 uint2 val = buf[uint(byte_offset >> 3u)];
264 return ((uint(byte_offset) & 4u) == 0u) ? val.x : val.y;
266 return buf[uint(byte_offset >> 2u)];
269 uint64_t pnanovdb_buf_read_uint64(pnanovdb_buf_t buf, uint64_t byte_offset)
272 #if defined(PNANOVDB_BUF_HLSL_64) 273 uint2 raw = buf[uint(byte_offset >> 3u)];
274 ret = uint64_t(raw.x) | (uint64_t(raw.y) << 32u);
276 ret = pnanovdb_buf_read_uint32(buf, byte_offset + 0u);
277 ret = ret | (uint64_t(pnanovdb_buf_read_uint32(buf, byte_offset + 4u)) << 32u);
281 void pnanovdb_buf_write_uint32(pnanovdb_buf_t buf, uint64_t byte_offset, uint value)
284 #if defined(PNANOVDB_BUF_HLSL_RW) 285 #if defined(PNANOVDB_BUF_HLSL_64) 286 if ((byte_offset & 4u) == 0u) {buf[uint(byte_offset >> 3u)].x = value;}
287 else {buf[uint(byte_offset >> 3u)].y = value;}
289 buf[uint(byte_offset >> 2u)] = value;
293 void pnanovdb_buf_write_uint64(pnanovdb_buf_t buf, uint64_t byte_offset, uint64_t value)
296 #if defined(PNANOVDB_BUF_HLSL_RW) 297 #if defined(PNANOVDB_BUF_HLSL_64) 298 uint2 raw = uint2(uint(value), uint(value >> 32u));
299 buf[uint(byte_offset >> 3u)] = raw;
301 pnanovdb_buf_write_uint32(buf, byte_offset + 0u, uint(value));
302 pnanovdb_buf_write_uint32(buf, byte_offset + 4u, uint(value >> 32u));
307 #define pnanovdb_grid_type_t uint 308 #define PNANOVDB_GRID_TYPE_GET(grid_typeIn, nameIn) pnanovdb_grid_type_constants[grid_typeIn].nameIn 309 #elif defined(PNANOVDB_BUF_GLSL) 310 struct pnanovdb_buf_t
314 uint pnanovdb_buf_read_uint32(pnanovdb_buf_t buf, uint byte_offset)
316 return pnanovdb_buf_data[(byte_offset >> 2u)];
318 uvec2 pnanovdb_buf_read_uint64(pnanovdb_buf_t buf, uint byte_offset)
321 ret.x = pnanovdb_buf_read_uint32(buf, byte_offset + 0u);
322 ret.y = pnanovdb_buf_read_uint32(buf, byte_offset + 4u);
325 void pnanovdb_buf_write_uint32(pnanovdb_buf_t buf, uint byte_offset, uint value)
329 void pnanovdb_buf_write_uint64(pnanovdb_buf_t buf, uint byte_offset, uvec2 value)
333 #define pnanovdb_grid_type_t uint 334 #define PNANOVDB_GRID_TYPE_GET(grid_typeIn, nameIn) pnanovdb_grid_type_constants[grid_typeIn].nameIn 340 #if defined(PNANOVDB_C) 341 #if defined(__CUDACC__) 342 #define PNANOVDB_FORCE_INLINE static __host__ __device__ __forceinline__ 343 #elif defined(_WIN32) 344 #define PNANOVDB_FORCE_INLINE static inline __forceinline 346 #define PNANOVDB_FORCE_INLINE static inline __attribute__((always_inline)) 348 #elif defined(PNANOVDB_HLSL) 349 #define PNANOVDB_FORCE_INLINE 350 #elif defined(PNANOVDB_GLSL) 351 #define PNANOVDB_FORCE_INLINE 355 #if defined(PNANOVDB_C) 356 #define PNANOVDB_STRUCT_TYPEDEF(X) typedef struct X X; 357 #if defined(__CUDA_ARCH__) 358 #define PNANOVDB_STATIC_CONST constexpr __constant__ 360 #define PNANOVDB_STATIC_CONST static const 362 #define PNANOVDB_INOUT(X) X* 363 #define PNANOVDB_IN(X) const X* 364 #define PNANOVDB_DEREF(X) (*X) 365 #define PNANOVDB_REF(X) &X 366 #elif defined(PNANOVDB_HLSL) 367 #define PNANOVDB_STRUCT_TYPEDEF(X) 368 #define PNANOVDB_STATIC_CONST static const 369 #define PNANOVDB_INOUT(X) inout X 370 #define PNANOVDB_IN(X) X 371 #define PNANOVDB_DEREF(X) X 372 #define PNANOVDB_REF(X) X 373 #elif defined(PNANOVDB_GLSL) 374 #define PNANOVDB_STRUCT_TYPEDEF(X) 375 #define PNANOVDB_STATIC_CONST const 376 #define PNANOVDB_INOUT(X) inout X 377 #define PNANOVDB_IN(X) X 378 #define PNANOVDB_DEREF(X) X 379 #define PNANOVDB_REF(X) X 383 #if defined(PNANOVDB_C) 384 #define PNANOVDB_NATIVE_64 385 #ifndef __CUDACC_RTC__ 388 #if !defined(PNANOVDB_MEMCPY_CUSTOM) 389 #ifndef __CUDACC_RTC__ 392 #define pnanovdb_memcpy memcpy 394 typedef uint32_t pnanovdb_uint32_t;
395 typedef int32_t pnanovdb_int32_t;
396 typedef int32_t pnanovdb_bool_t;
397 #define PNANOVDB_FALSE 0 398 #define PNANOVDB_TRUE 1 399 typedef uint64_t pnanovdb_uint64_t;
400 typedef int64_t pnanovdb_int64_t;
401 typedef struct pnanovdb_coord_t
403 pnanovdb_int32_t x, y, z;
405 typedef struct pnanovdb_vec3_t
409 typedef struct pnanovdb_uvec4_t
411 pnanovdb_uint32_t x, y, z, w;
413 typedef struct pnanovdb_ivec4_t
415 pnanovdb_int32_t x, y, z, w;
417 typedef struct pnanovdb_vec4_t
421 PNANOVDB_FORCE_INLINE pnanovdb_int32_t pnanovdb_uint32_as_int32(pnanovdb_uint32_t v) {
return (pnanovdb_int32_t)v; }
422 PNANOVDB_FORCE_INLINE pnanovdb_int64_t pnanovdb_uint64_as_int64(pnanovdb_uint64_t v) {
return (pnanovdb_int64_t)v; }
423 PNANOVDB_FORCE_INLINE pnanovdb_uint64_t pnanovdb_int64_as_uint64(pnanovdb_int64_t v) {
return (pnanovdb_uint64_t)v; }
424 PNANOVDB_FORCE_INLINE pnanovdb_uint32_t pnanovdb_int32_as_uint32(pnanovdb_int32_t v) {
return (pnanovdb_uint32_t)v; }
425 PNANOVDB_FORCE_INLINE
float pnanovdb_uint32_as_float(pnanovdb_uint32_t v) {
float vf; pnanovdb_memcpy(&vf, &v,
sizeof(vf));
return vf; }
426 PNANOVDB_FORCE_INLINE pnanovdb_uint32_t pnanovdb_float_as_uint32(
float v) { pnanovdb_uint32_t vu; pnanovdb_memcpy(&vu, &v,
sizeof(vu));
return vu; }
427 PNANOVDB_FORCE_INLINE
double pnanovdb_uint64_as_double(pnanovdb_uint64_t v) {
double vf; pnanovdb_memcpy(&vf, &v,
sizeof(vf));
return vf; }
428 PNANOVDB_FORCE_INLINE pnanovdb_uint64_t pnanovdb_double_as_uint64(
double v) { pnanovdb_uint64_t vu; pnanovdb_memcpy(&vu, &v,
sizeof(vu));
return vu; }
429 PNANOVDB_FORCE_INLINE pnanovdb_uint32_t pnanovdb_uint64_low(pnanovdb_uint64_t v) {
return (pnanovdb_uint32_t)v; }
430 PNANOVDB_FORCE_INLINE pnanovdb_uint32_t pnanovdb_uint64_high(pnanovdb_uint64_t v) {
return (pnanovdb_uint32_t)(v >> 32u); }
431 PNANOVDB_FORCE_INLINE pnanovdb_uint64_t pnanovdb_uint32_as_uint64(pnanovdb_uint32_t x, pnanovdb_uint32_t y) {
return ((pnanovdb_uint64_t)x) | (((pnanovdb_uint64_t)y) << 32u); }
432 PNANOVDB_FORCE_INLINE pnanovdb_uint64_t pnanovdb_uint32_as_uint64_low(pnanovdb_uint32_t x) {
return ((pnanovdb_uint64_t)x); }
433 PNANOVDB_FORCE_INLINE pnanovdb_int32_t pnanovdb_uint64_is_equal(pnanovdb_uint64_t a, pnanovdb_uint64_t b) {
return a == b; }
434 PNANOVDB_FORCE_INLINE pnanovdb_int32_t pnanovdb_int64_is_zero(pnanovdb_int64_t a) {
return a == 0; }
435 #ifdef PNANOVDB_CMATH 436 PNANOVDB_FORCE_INLINE
float pnanovdb_floor(
float v) {
return floorf(v); }
438 PNANOVDB_FORCE_INLINE pnanovdb_int32_t pnanovdb_float_to_int32(
float v) {
return (pnanovdb_int32_t)v; }
439 PNANOVDB_FORCE_INLINE
float pnanovdb_int32_to_float(pnanovdb_int32_t v) {
return (
float)v; }
440 PNANOVDB_FORCE_INLINE
float pnanovdb_uint32_to_float(pnanovdb_uint32_t v) {
return (
float)v; }
441 PNANOVDB_FORCE_INLINE
float pnanovdb_min(
float a,
float b) {
return a < b ? a : b; }
442 PNANOVDB_FORCE_INLINE
float pnanovdb_max(
float a,
float b) {
return a > b ? a : b; }
443 #elif defined(PNANOVDB_HLSL) 444 typedef uint pnanovdb_uint32_t;
445 typedef int pnanovdb_int32_t;
446 typedef bool pnanovdb_bool_t;
447 #define PNANOVDB_FALSE false 448 #define PNANOVDB_TRUE true 449 typedef int3 pnanovdb_coord_t;
450 typedef float3 pnanovdb_vec3_t;
451 typedef uint4 pnanovdb_uvec4_t;
452 typedef int4 pnanovdb_ivec4_t;
453 typedef float4 pnanovdb_vec4_t;
454 pnanovdb_int32_t pnanovdb_uint32_as_int32(pnanovdb_uint32_t v) {
return int(v); }
455 pnanovdb_uint32_t pnanovdb_int32_as_uint32(pnanovdb_int32_t v) {
return uint(v); }
456 float pnanovdb_uint32_as_float(pnanovdb_uint32_t v) {
return asfloat(v); }
457 pnanovdb_uint32_t pnanovdb_float_as_uint32(
float v) {
return asuint(v); }
458 float pnanovdb_floor(
float v) {
return floor(v); }
459 pnanovdb_int32_t pnanovdb_float_to_int32(
float v) {
return int(v); }
460 float pnanovdb_int32_to_float(pnanovdb_int32_t v) {
return float(v); }
461 float pnanovdb_uint32_to_float(pnanovdb_uint32_t v) {
return float(v); }
462 float pnanovdb_min(
float a,
float b) {
return min(a, b); }
463 float pnanovdb_max(
float a,
float b) {
return max(a, b); }
464 #if defined(PNANOVDB_ADDRESS_32) 465 typedef uint2 pnanovdb_uint64_t;
466 typedef int2 pnanovdb_int64_t;
467 pnanovdb_int64_t pnanovdb_uint64_as_int64(pnanovdb_uint64_t v) {
return int2(v); }
468 pnanovdb_uint64_t pnanovdb_int64_as_uint64(pnanovdb_int64_t v) {
return uint2(v); }
469 double pnanovdb_uint64_as_double(pnanovdb_uint64_t v) {
return asdouble(v.x, v.y); }
470 pnanovdb_uint64_t pnanovdb_double_as_uint64(
double v) { uint2 ret; asuint(v, ret.x, ret.y);
return ret; }
471 pnanovdb_uint32_t pnanovdb_uint64_low(pnanovdb_uint64_t v) {
return v.x; }
472 pnanovdb_uint32_t pnanovdb_uint64_high(pnanovdb_uint64_t v) {
return v.y; }
473 pnanovdb_uint64_t pnanovdb_uint32_as_uint64(pnanovdb_uint32_t x, pnanovdb_uint32_t y) {
return uint2(x, y); }
474 pnanovdb_uint64_t pnanovdb_uint32_as_uint64_low(pnanovdb_uint32_t x) {
return uint2(x, 0); }
475 bool pnanovdb_uint64_is_equal(pnanovdb_uint64_t a, pnanovdb_uint64_t b) {
return (a.x == b.x) && (a.y == b.y); }
476 bool pnanovdb_int64_is_zero(pnanovdb_int64_t a) {
return a.x == 0 && a.y == 0; }
478 typedef uint64_t pnanovdb_uint64_t;
479 typedef int64_t pnanovdb_int64_t;
480 pnanovdb_int64_t pnanovdb_uint64_as_int64(pnanovdb_uint64_t v) {
return int64_t(v); }
481 pnanovdb_uint64_t pnanovdb_int64_as_uint64(pnanovdb_int64_t v) {
return uint64_t(v); }
482 double pnanovdb_uint64_as_double(pnanovdb_uint64_t v) {
return asdouble(uint(v), uint(v >> 32u)); }
483 pnanovdb_uint64_t pnanovdb_double_as_uint64(
double v) { uint2 ret; asuint(v, ret.x, ret.y);
return uint64_t(ret.x) + (uint64_t(ret.y) << 32u); }
484 pnanovdb_uint32_t pnanovdb_uint64_low(pnanovdb_uint64_t v) {
return uint(v); }
485 pnanovdb_uint32_t pnanovdb_uint64_high(pnanovdb_uint64_t v) {
return uint(v >> 32u); }
486 pnanovdb_uint64_t pnanovdb_uint32_as_uint64(pnanovdb_uint32_t x, pnanovdb_uint32_t y) {
return uint64_t(x) + (uint64_t(y) << 32u); }
487 pnanovdb_uint64_t pnanovdb_uint32_as_uint64_low(pnanovdb_uint32_t x) {
return uint64_t(x); }
488 bool pnanovdb_uint64_is_equal(pnanovdb_uint64_t a, pnanovdb_uint64_t b) {
return a == b; }
489 bool pnanovdb_int64_is_zero(pnanovdb_int64_t a) {
return a == 0; }
491 #elif defined(PNANOVDB_GLSL) 492 #define pnanovdb_uint32_t uint 493 #define pnanovdb_int32_t int 494 #define pnanovdb_bool_t bool 495 #define PNANOVDB_FALSE false 496 #define PNANOVDB_TRUE true 497 #define pnanovdb_uint64_t uvec2 498 #define pnanovdb_int64_t ivec2 499 #define pnanovdb_coord_t ivec3 500 #define pnanovdb_vec3_t vec3 501 #define pnanovdb_uvec4_t uvec4 502 #define pnanovdb_ivec4_t ivec4 503 #define pnanovdb_vec4_t vec4 504 pnanovdb_int32_t pnanovdb_uint32_as_int32(pnanovdb_uint32_t v) {
return int(v); }
505 pnanovdb_int64_t pnanovdb_uint64_as_int64(pnanovdb_uint64_t v) {
return ivec2(v); }
506 pnanovdb_uint64_t pnanovdb_int64_as_uint64(pnanovdb_int64_t v) {
return uvec2(v); }
507 pnanovdb_uint32_t pnanovdb_int32_as_uint32(pnanovdb_int32_t v) {
return uint(v); }
508 float pnanovdb_uint32_as_float(pnanovdb_uint32_t v) {
return uintBitsToFloat(v); }
509 pnanovdb_uint32_t pnanovdb_float_as_uint32(
float v) {
return floatBitsToUint(v); }
510 double pnanovdb_uint64_as_double(pnanovdb_uint64_t v) {
return packDouble2x32(uvec2(v.x, v.y)); }
511 pnanovdb_uint64_t pnanovdb_double_as_uint64(
double v) {
return unpackDouble2x32(v); }
512 pnanovdb_uint32_t pnanovdb_uint64_low(pnanovdb_uint64_t v) {
return v.x; }
513 pnanovdb_uint32_t pnanovdb_uint64_high(pnanovdb_uint64_t v) {
return v.y; }
514 pnanovdb_uint64_t pnanovdb_uint32_as_uint64(pnanovdb_uint32_t x, pnanovdb_uint32_t y) {
return uvec2(x, y); }
515 pnanovdb_uint64_t pnanovdb_uint32_as_uint64_low(pnanovdb_uint32_t x) {
return uvec2(x, 0); }
516 bool pnanovdb_uint64_is_equal(pnanovdb_uint64_t a, pnanovdb_uint64_t b) {
return (a.x == b.x) && (a.y == b.y); }
517 bool pnanovdb_int64_is_zero(pnanovdb_int64_t a) {
return a.x == 0 && a.y == 0; }
518 float pnanovdb_floor(
float v) {
return floor(v); }
519 pnanovdb_int32_t pnanovdb_float_to_int32(
float v) {
return int(v); }
520 float pnanovdb_int32_to_float(pnanovdb_int32_t v) {
return float(v); }
521 float pnanovdb_uint32_to_float(pnanovdb_uint32_t v) {
return float(v); }
522 float pnanovdb_min(
float a,
float b) {
return min(a, b); }
523 float pnanovdb_max(
float a,
float b) {
return max(a, b); }
528 #if defined(PNANOVDB_C) 529 PNANOVDB_FORCE_INLINE pnanovdb_vec3_t pnanovdb_vec3_uniform(
float a)
537 PNANOVDB_FORCE_INLINE pnanovdb_vec3_t pnanovdb_vec3_add(
const pnanovdb_vec3_t a,
const pnanovdb_vec3_t b)
545 PNANOVDB_FORCE_INLINE pnanovdb_vec3_t pnanovdb_vec3_sub(
const pnanovdb_vec3_t a,
const pnanovdb_vec3_t b)
553 PNANOVDB_FORCE_INLINE pnanovdb_vec3_t pnanovdb_vec3_mul(
const pnanovdb_vec3_t a,
const pnanovdb_vec3_t b)
561 PNANOVDB_FORCE_INLINE pnanovdb_vec3_t pnanovdb_vec3_div(
const pnanovdb_vec3_t a,
const pnanovdb_vec3_t b)
569 PNANOVDB_FORCE_INLINE pnanovdb_vec3_t pnanovdb_vec3_min(
const pnanovdb_vec3_t a,
const pnanovdb_vec3_t b)
572 v.x = a.x < b.x ? a.x : b.x;
573 v.y = a.y < b.y ? a.y : b.y;
574 v.z = a.z < b.z ? a.z : b.z;
577 PNANOVDB_FORCE_INLINE pnanovdb_vec3_t pnanovdb_vec3_max(
const pnanovdb_vec3_t a,
const pnanovdb_vec3_t b)
580 v.x = a.x > b.x ? a.x : b.x;
581 v.y = a.y > b.y ? a.y : b.y;
582 v.z = a.z > b.z ? a.z : b.z;
585 PNANOVDB_FORCE_INLINE pnanovdb_vec3_t pnanovdb_coord_to_vec3(
const pnanovdb_coord_t coord)
588 v.x = pnanovdb_int32_to_float(coord.x);
589 v.y = pnanovdb_int32_to_float(coord.y);
590 v.z = pnanovdb_int32_to_float(coord.z);
593 PNANOVDB_FORCE_INLINE pnanovdb_coord_t pnanovdb_coord_uniform(
const pnanovdb_int32_t a)
601 PNANOVDB_FORCE_INLINE pnanovdb_coord_t pnanovdb_coord_add(pnanovdb_coord_t a, pnanovdb_coord_t b)
609 PNANOVDB_FORCE_INLINE pnanovdb_uvec4_t pnanovdb_uvec4_add(pnanovdb_uvec4_t a, pnanovdb_uvec4_t b)
611 pnanovdb_uvec4_t ret;
619 PNANOVDB_FORCE_INLINE pnanovdb_uvec4_t pnanovdb_uvec4_sub(pnanovdb_uvec4_t a, pnanovdb_uvec4_t b)
621 pnanovdb_uvec4_t ret;
629 PNANOVDB_FORCE_INLINE pnanovdb_vec4_t pnanovdb_vec4_add(pnanovdb_vec4_t a, pnanovdb_vec4_t b)
638 #elif defined(PNANOVDB_HLSL) 639 pnanovdb_vec3_t pnanovdb_vec3_uniform(
float a) {
return float3(a, a, a); }
640 pnanovdb_vec3_t pnanovdb_vec3_add(pnanovdb_vec3_t a, pnanovdb_vec3_t b) {
return a + b; }
641 pnanovdb_vec3_t pnanovdb_vec3_sub(pnanovdb_vec3_t a, pnanovdb_vec3_t b) {
return a - b; }
642 pnanovdb_vec3_t pnanovdb_vec3_mul(pnanovdb_vec3_t a, pnanovdb_vec3_t b) {
return a * b; }
643 pnanovdb_vec3_t pnanovdb_vec3_div(pnanovdb_vec3_t a, pnanovdb_vec3_t b) {
return a / b; }
644 pnanovdb_vec3_t pnanovdb_vec3_min(pnanovdb_vec3_t a, pnanovdb_vec3_t b) {
return min(a, b); }
645 pnanovdb_vec3_t pnanovdb_vec3_max(pnanovdb_vec3_t a, pnanovdb_vec3_t b) {
return max(a, b); }
646 pnanovdb_vec3_t pnanovdb_coord_to_vec3(pnanovdb_coord_t coord) {
return float3(coord); }
647 pnanovdb_coord_t pnanovdb_coord_uniform(pnanovdb_int32_t a) {
return int3(a, a, a); }
648 pnanovdb_coord_t pnanovdb_coord_add(pnanovdb_coord_t a, pnanovdb_coord_t b) {
return a + b; }
649 pnanovdb_uvec4_t pnanovdb_uvec4_add(pnanovdb_uvec4_t a, pnanovdb_uvec4_t b) {
return a + b; }
650 pnanovdb_uvec4_t pnanovdb_uvec4_sub(pnanovdb_uvec4_t a, pnanovdb_uvec4_t b) {
return a - b; }
651 pnanovdb_vec4_t pnanovdb_vec4_add(pnanovdb_vec4_t a, pnanovdb_vec4_t b) {
return a + b; }
652 #elif defined(PNANOVDB_GLSL) 653 pnanovdb_vec3_t pnanovdb_vec3_uniform(
float a) {
return vec3(a, a, a); }
654 pnanovdb_vec3_t pnanovdb_vec3_add(pnanovdb_vec3_t a, pnanovdb_vec3_t b) {
return a + b; }
655 pnanovdb_vec3_t pnanovdb_vec3_sub(pnanovdb_vec3_t a, pnanovdb_vec3_t b) {
return a - b; }
656 pnanovdb_vec3_t pnanovdb_vec3_mul(pnanovdb_vec3_t a, pnanovdb_vec3_t b) {
return a * b; }
657 pnanovdb_vec3_t pnanovdb_vec3_div(pnanovdb_vec3_t a, pnanovdb_vec3_t b) {
return a / b; }
658 pnanovdb_vec3_t pnanovdb_vec3_min(pnanovdb_vec3_t a, pnanovdb_vec3_t b) {
return min(a, b); }
659 pnanovdb_vec3_t pnanovdb_vec3_max(pnanovdb_vec3_t a, pnanovdb_vec3_t b) {
return max(a, b); }
660 pnanovdb_vec3_t pnanovdb_coord_to_vec3(
const pnanovdb_coord_t coord) {
return vec3(coord); }
661 pnanovdb_coord_t pnanovdb_coord_uniform(pnanovdb_int32_t a) {
return ivec3(a, a, a); }
662 pnanovdb_coord_t pnanovdb_coord_add(pnanovdb_coord_t a, pnanovdb_coord_t b) {
return a + b; }
663 pnanovdb_uvec4_t pnanovdb_uvec4_add(pnanovdb_uvec4_t a, pnanovdb_uvec4_t b) {
return a + b; }
664 pnanovdb_uvec4_t pnanovdb_uvec4_sub(pnanovdb_uvec4_t a, pnanovdb_uvec4_t b) {
return a - b; }
665 pnanovdb_vec4_t pnanovdb_vec4_add(pnanovdb_vec4_t a, pnanovdb_vec4_t b) {
return a + b; }
672 #if defined(PNANOVDB_C) 673 #if defined(_MSC_VER) && (_MSC_VER >= 1928) && defined(PNANOVDB_USE_INTRINSICS) 674 return __popcnt(value);
675 #elif (defined(__GNUC__) || defined(__clang__)) && defined(PNANOVDB_USE_INTRINSICS) 676 return __builtin_popcount(value);
678 value = value - ((value >> 1) & 0x55555555);
679 value = (value & 0x33333333) + ((value >> 2) & 0x33333333);
680 value = (value + (value >> 4)) & 0x0F0F0F0F;
681 return (value * 0x01010101) >> 24;
683 #elif defined(PNANOVDB_HLSL) 684 return countbits(value);
685 #elif defined(PNANOVDB_GLSL) 686 return bitCount(value);
695 #if defined(PNANOVDB_ADDRESS_32) 698 pnanovdb_uint32_t low = pnanovdb_uint64_low(a);
699 pnanovdb_uint32_t high = pnanovdb_uint64_high(a);
705 return pnanovdb_uint32_as_uint64(low, high);
708 PNANOVDB_FORCE_INLINE pnanovdb_int64_t
pnanovdb_uint64_diff(pnanovdb_uint64_t a, pnanovdb_uint64_t b)
710 pnanovdb_uint32_t low = pnanovdb_uint64_low(a);
711 pnanovdb_uint32_t high = pnanovdb_uint64_high(a);
712 low -= pnanovdb_uint64_low(b);
713 if (low > pnanovdb_uint64_low(a))
717 high -= pnanovdb_uint64_high(b);
718 return pnanovdb_uint64_as_int64(pnanovdb_uint32_as_uint64(low, high));
723 pnanovdb_uint32_t low = pnanovdb_uint64_low(a);
724 pnanovdb_uint32_t high = pnanovdb_uint64_high(a);
730 return pnanovdb_uint32_as_uint64(low, high);
735 pnanovdb_uint32_t low = pnanovdb_uint64_low(a);
736 pnanovdb_uint32_t high = pnanovdb_uint64_high(a);
739 ((low >> b) | ((b > 0) ? (high << (32u - b)) : 0u));
744 pnanovdb_uint32_t mask_low = bit_idx < 32u ? 1u << bit_idx : 0u;
745 pnanovdb_uint32_t mask_high = bit_idx >= 32u ? 1u << (bit_idx - 32u) : 0u;
746 return pnanovdb_uint32_as_uint64(mask_low, mask_high);
749 PNANOVDB_FORCE_INLINE pnanovdb_uint64_t
pnanovdb_uint64_and(pnanovdb_uint64_t a, pnanovdb_uint64_t b)
751 return pnanovdb_uint32_as_uint64(
752 pnanovdb_uint64_low(a) & pnanovdb_uint64_low(b),
753 pnanovdb_uint64_high(a) & pnanovdb_uint64_high(b)
759 return pnanovdb_uint64_low(a) != 0u || pnanovdb_uint64_high(a) != 0u;
770 return pnanovdb_uint64_as_int64(a - b);
780 return pnanovdb_uint64_low(a >> b);
785 return 1llu << bit_idx;
801 #if defined(PNANOVDB_ADDRESS_32) 802 struct pnanovdb_address_t
804 pnanovdb_uint32_t byte_offset;
806 PNANOVDB_STRUCT_TYPEDEF(pnanovdb_address_t)
808 PNANOVDB_FORCE_INLINE pnanovdb_address_t pnanovdb_address_offset(pnanovdb_address_t address, pnanovdb_uint32_t byte_offset)
810 pnanovdb_address_t ret = address;
811 ret.byte_offset += byte_offset;
814 PNANOVDB_FORCE_INLINE pnanovdb_address_t pnanovdb_address_offset_neg(pnanovdb_address_t address, pnanovdb_uint32_t byte_offset)
816 pnanovdb_address_t ret = address;
817 ret.byte_offset -= byte_offset;
820 PNANOVDB_FORCE_INLINE pnanovdb_address_t pnanovdb_address_offset_product(pnanovdb_address_t address, pnanovdb_uint32_t byte_offset, pnanovdb_uint32_t multiplier)
822 pnanovdb_address_t ret = address;
823 ret.byte_offset += byte_offset * multiplier;
826 PNANOVDB_FORCE_INLINE pnanovdb_address_t pnanovdb_address_offset64(pnanovdb_address_t address, pnanovdb_uint64_t byte_offset)
828 pnanovdb_address_t ret = address;
830 ret.byte_offset += pnanovdb_uint64_low(byte_offset);
833 PNANOVDB_FORCE_INLINE pnanovdb_address_t pnanovdb_address_offset64_product(pnanovdb_address_t address, pnanovdb_uint64_t byte_offset, pnanovdb_uint32_t multiplier)
835 pnanovdb_address_t ret = address;
836 ret.byte_offset += pnanovdb_uint64_low(byte_offset) * multiplier;
839 PNANOVDB_FORCE_INLINE pnanovdb_int64_t pnanovdb_address_diff(pnanovdb_address_t a, pnanovdb_address_t b)
841 return pnanovdb_uint64_diff(pnanovdb_uint32_as_uint64_low(a.byte_offset),pnanovdb_uint32_as_uint64_low(b.byte_offset));
843 PNANOVDB_FORCE_INLINE pnanovdb_uint32_t pnanovdb_address_mask(pnanovdb_address_t address, pnanovdb_uint32_t mask)
845 return address.byte_offset & mask;
847 PNANOVDB_FORCE_INLINE pnanovdb_address_t pnanovdb_address_mask_inv(pnanovdb_address_t address, pnanovdb_uint32_t mask)
849 pnanovdb_address_t ret = address;
850 ret.byte_offset &= (~mask);
853 PNANOVDB_FORCE_INLINE pnanovdb_address_t pnanovdb_address_null()
855 pnanovdb_address_t ret = { 0 };
858 PNANOVDB_FORCE_INLINE pnanovdb_bool_t pnanovdb_address_is_null(pnanovdb_address_t address)
860 return address.byte_offset == 0u;
862 PNANOVDB_FORCE_INLINE pnanovdb_bool_t pnanovdb_address_in_interval(pnanovdb_address_t address, pnanovdb_address_t min_address, pnanovdb_address_t max_address)
864 return address.byte_offset >= min_address.byte_offset && address.byte_offset < max_address.byte_offset;
866 PNANOVDB_FORCE_INLINE pnanovdb_address_t pnanovdb_address_add(pnanovdb_address_t a, pnanovdb_address_t b)
868 pnanovdb_address_t sum = a;
869 sum.byte_offset += b.byte_offset;
872 #elif defined(PNANOVDB_ADDRESS_64) 873 struct pnanovdb_address_t
875 pnanovdb_uint64_t byte_offset;
877 PNANOVDB_STRUCT_TYPEDEF(pnanovdb_address_t)
879 PNANOVDB_FORCE_INLINE pnanovdb_address_t pnanovdb_address_offset(pnanovdb_address_t address, pnanovdb_uint32_t byte_offset)
881 pnanovdb_address_t ret = address;
882 ret.byte_offset += byte_offset;
885 PNANOVDB_FORCE_INLINE pnanovdb_address_t pnanovdb_address_offset_neg(pnanovdb_address_t address, pnanovdb_uint32_t byte_offset)
887 pnanovdb_address_t ret = address;
888 ret.byte_offset -= byte_offset;
891 PNANOVDB_FORCE_INLINE pnanovdb_address_t pnanovdb_address_offset_product(pnanovdb_address_t address, pnanovdb_uint32_t byte_offset, pnanovdb_uint32_t multiplier)
893 pnanovdb_address_t ret = address;
894 ret.byte_offset += pnanovdb_uint32_as_uint64_low(byte_offset) * pnanovdb_uint32_as_uint64_low(multiplier);
897 PNANOVDB_FORCE_INLINE pnanovdb_address_t pnanovdb_address_offset64(pnanovdb_address_t address, pnanovdb_uint64_t byte_offset)
899 pnanovdb_address_t ret = address;
900 ret.byte_offset += byte_offset;
903 PNANOVDB_FORCE_INLINE pnanovdb_address_t pnanovdb_address_offset64_product(pnanovdb_address_t address, pnanovdb_uint64_t byte_offset, pnanovdb_uint32_t multiplier)
905 pnanovdb_address_t ret = address;
906 ret.byte_offset += byte_offset * pnanovdb_uint32_as_uint64_low(multiplier);
909 PNANOVDB_FORCE_INLINE pnanovdb_int64_t pnanovdb_address_diff(pnanovdb_address_t a, pnanovdb_address_t b)
913 PNANOVDB_FORCE_INLINE pnanovdb_uint32_t pnanovdb_address_mask(pnanovdb_address_t address, pnanovdb_uint32_t mask)
915 return pnanovdb_uint64_low(address.byte_offset) & mask;
917 PNANOVDB_FORCE_INLINE pnanovdb_address_t pnanovdb_address_mask_inv(pnanovdb_address_t address, pnanovdb_uint32_t mask)
919 pnanovdb_address_t ret = address;
920 ret.byte_offset &= (~pnanovdb_uint32_as_uint64_low(mask));
923 PNANOVDB_FORCE_INLINE pnanovdb_address_t pnanovdb_address_null()
925 pnanovdb_address_t ret = { 0 };
928 PNANOVDB_FORCE_INLINE pnanovdb_bool_t pnanovdb_address_is_null(pnanovdb_address_t address)
930 return address.byte_offset == 0llu;
932 PNANOVDB_FORCE_INLINE pnanovdb_bool_t pnanovdb_address_in_interval(pnanovdb_address_t address, pnanovdb_address_t min_address, pnanovdb_address_t max_address)
934 return address.byte_offset >= min_address.byte_offset && address.byte_offset < max_address.byte_offset;
936 PNANOVDB_FORCE_INLINE pnanovdb_address_t pnanovdb_address_add(pnanovdb_address_t a, pnanovdb_address_t b)
938 pnanovdb_address_t sum = a;
939 sum.byte_offset += b.byte_offset;
948 return pnanovdb_buf_read_uint32(buf, address.byte_offset);
952 return pnanovdb_buf_read_uint64(buf, address.byte_offset);
954 PNANOVDB_FORCE_INLINE pnanovdb_int32_t
pnanovdb_read_int32(pnanovdb_buf_t buf, pnanovdb_address_t address)
962 PNANOVDB_FORCE_INLINE pnanovdb_int64_t
pnanovdb_read_int64(pnanovdb_buf_t buf, pnanovdb_address_t address)
970 PNANOVDB_FORCE_INLINE pnanovdb_coord_t
pnanovdb_read_coord(pnanovdb_buf_t buf, pnanovdb_address_t address)
972 pnanovdb_coord_t ret;
973 ret.x = pnanovdb_uint32_as_int32(
pnanovdb_read_uint32(buf, pnanovdb_address_offset(address, 0u)));
974 ret.y = pnanovdb_uint32_as_int32(
pnanovdb_read_uint32(buf, pnanovdb_address_offset(address, 4u)));
975 ret.z = pnanovdb_uint32_as_int32(
pnanovdb_read_uint32(buf, pnanovdb_address_offset(address, 8u)));
978 PNANOVDB_FORCE_INLINE pnanovdb_vec3_t
pnanovdb_read_vec3(pnanovdb_buf_t buf, pnanovdb_address_t address)
990 return (raw >> (pnanovdb_address_mask(address, 2) << 3));
992 PNANOVDB_FORCE_INLINE pnanovdb_uint32_t
pnanovdb_read_uint8(pnanovdb_buf_t buf, pnanovdb_address_t address)
995 return (raw >> (pnanovdb_address_mask(address, 3) << 3)) & 255;
1000 const float scale = 1.f / 65535.f;
1001 ret.x = scale * pnanovdb_uint32_to_float(
pnanovdb_read_uint16(buf, pnanovdb_address_offset(address, 0u))) - 0.5f;
1002 ret.y = scale * pnanovdb_uint32_to_float(
pnanovdb_read_uint16(buf, pnanovdb_address_offset(address, 2u))) - 0.5f;
1003 ret.z = scale * pnanovdb_uint32_to_float(
pnanovdb_read_uint16(buf, pnanovdb_address_offset(address, 4u))) - 0.5f;
1008 pnanovdb_vec3_t ret;
1009 const float scale = 1.f / 255.f;
1010 ret.x = scale * pnanovdb_uint32_to_float(
pnanovdb_read_uint8(buf, pnanovdb_address_offset(address, 0u))) - 0.5f;
1011 ret.y = scale * pnanovdb_uint32_to_float(
pnanovdb_read_uint8(buf, pnanovdb_address_offset(address, 1u))) - 0.5f;
1012 ret.z = scale * pnanovdb_uint32_to_float(
pnanovdb_read_uint8(buf, pnanovdb_address_offset(address, 2u))) - 0.5f;
1016 PNANOVDB_FORCE_INLINE pnanovdb_bool_t
pnanovdb_read_bit(pnanovdb_buf_t buf, pnanovdb_address_t address, pnanovdb_uint32_t bit_offset)
1018 pnanovdb_address_t word_address = pnanovdb_address_mask_inv(address, 3u);
1019 pnanovdb_uint32_t bit_index = (pnanovdb_address_mask(address, 3u) << 3u) + bit_offset;
1020 pnanovdb_uint32_t value_word = pnanovdb_buf_read_uint32(buf, word_address.byte_offset);
1021 return ((value_word >> bit_index) & 1) != 0u;
1024 #if defined(PNANOVDB_C) 1025 PNANOVDB_FORCE_INLINE
short pnanovdb_read_half(pnanovdb_buf_t buf, pnanovdb_address_t address)
1028 return (
short)(raw >> (pnanovdb_address_mask(address, 2) << 3));
1030 #elif defined(PNANOVDB_HLSL) 1031 PNANOVDB_FORCE_INLINE
float pnanovdb_read_half(pnanovdb_buf_t buf, pnanovdb_address_t address)
1034 return f16tof32(raw >> (pnanovdb_address_mask(address, 2) << 3));
1036 #elif defined(PNANOVDB_GLSL) 1037 PNANOVDB_FORCE_INLINE
float pnanovdb_read_half(pnanovdb_buf_t buf, pnanovdb_address_t address)
1040 return unpackHalf2x16(raw >> (pnanovdb_address_mask(address, 2) << 3)).x;
1046 PNANOVDB_FORCE_INLINE
void pnanovdb_write_uint32(pnanovdb_buf_t buf, pnanovdb_address_t address, pnanovdb_uint32_t value)
1048 pnanovdb_buf_write_uint32(buf, address.byte_offset, value);
1050 PNANOVDB_FORCE_INLINE
void pnanovdb_write_uint64(pnanovdb_buf_t buf, pnanovdb_address_t address, pnanovdb_uint64_t value)
1052 pnanovdb_buf_write_uint64(buf, address.byte_offset, value);
1054 PNANOVDB_FORCE_INLINE
void pnanovdb_write_int32(pnanovdb_buf_t buf, pnanovdb_address_t address, pnanovdb_int32_t value)
1058 PNANOVDB_FORCE_INLINE
void pnanovdb_write_int64(pnanovdb_buf_t buf, pnanovdb_address_t address, pnanovdb_int64_t value)
1060 pnanovdb_buf_write_uint64(buf, address.byte_offset, pnanovdb_int64_as_uint64(value));
1070 PNANOVDB_FORCE_INLINE
void pnanovdb_write_coord(pnanovdb_buf_t buf, pnanovdb_address_t address, PNANOVDB_IN(pnanovdb_coord_t) value)
1072 pnanovdb_write_uint32(buf, pnanovdb_address_offset(address, 0u), pnanovdb_int32_as_uint32(PNANOVDB_DEREF(value).x));
1073 pnanovdb_write_uint32(buf, pnanovdb_address_offset(address, 4u), pnanovdb_int32_as_uint32(PNANOVDB_DEREF(value).y));
1074 pnanovdb_write_uint32(buf, pnanovdb_address_offset(address, 8u), pnanovdb_int32_as_uint32(PNANOVDB_DEREF(value).z));
1076 PNANOVDB_FORCE_INLINE
void pnanovdb_write_vec3(pnanovdb_buf_t buf, pnanovdb_address_t address, PNANOVDB_IN(pnanovdb_vec3_t) value)
1085 #define PNANOVDB_MAGIC_NUMBER 0x304244566f6e614eUL// "NanoVDB0" in hex - little endian (uint64_t) 1086 #define PNANOVDB_MAGIC_GRID 0x314244566f6e614eUL// "NanoVDB1" in hex - little endian (uint64_t) 1087 #define PNANOVDB_MAGIC_FILE 0x324244566f6e614eUL// "NanoVDB2" in hex - little endian (uint64_t) 1089 #define PNANOVDB_MAJOR_VERSION_NUMBER 32// reflects changes to the ABI 1090 #define PNANOVDB_MINOR_VERSION_NUMBER 8// reflects changes to the API but not ABI 1091 #define PNANOVDB_PATCH_VERSION_NUMBER 0// reflects bug-fixes with no ABI or API changes 1093 #define PNANOVDB_GRID_TYPE_UNKNOWN 0 1094 #define PNANOVDB_GRID_TYPE_FLOAT 1 1095 #define PNANOVDB_GRID_TYPE_DOUBLE 2 1096 #define PNANOVDB_GRID_TYPE_INT16 3 1097 #define PNANOVDB_GRID_TYPE_INT32 4 1098 #define PNANOVDB_GRID_TYPE_INT64 5 1099 #define PNANOVDB_GRID_TYPE_VEC3F 6 1100 #define PNANOVDB_GRID_TYPE_VEC3D 7 1101 #define PNANOVDB_GRID_TYPE_MASK 8 1102 #define PNANOVDB_GRID_TYPE_HALF 9 1103 #define PNANOVDB_GRID_TYPE_UINT32 10 1104 #define PNANOVDB_GRID_TYPE_BOOLEAN 11 1105 #define PNANOVDB_GRID_TYPE_RGBA8 12 1106 #define PNANOVDB_GRID_TYPE_FP4 13 1107 #define PNANOVDB_GRID_TYPE_FP8 14 1108 #define PNANOVDB_GRID_TYPE_FP16 15 1109 #define PNANOVDB_GRID_TYPE_FPN 16 1110 #define PNANOVDB_GRID_TYPE_VEC4F 17 1111 #define PNANOVDB_GRID_TYPE_VEC4D 18 1112 #define PNANOVDB_GRID_TYPE_INDEX 19 1113 #define PNANOVDB_GRID_TYPE_ONINDEX 20 1114 #define PNANOVDB_GRID_TYPE_INDEXMASK 21 1115 #define PNANOVDB_GRID_TYPE_ONINDEXMASK 22 1116 #define PNANOVDB_GRID_TYPE_POINTINDEX 23 1117 #define PNANOVDB_GRID_TYPE_VEC3U8 24 1118 #define PNANOVDB_GRID_TYPE_VEC3U16 25 1119 #define PNANOVDB_GRID_TYPE_UINT8 26 1120 #define PNANOVDB_GRID_TYPE_END 27 1122 #define PNANOVDB_GRID_TYPE_CAP 32 1124 #define PNANOVDB_GRID_CLASS_UNKNOWN 0 1125 #define PNANOVDB_GRID_CLASS_LEVEL_SET 1 // narrow band level set, e.g. SDF 1126 #define PNANOVDB_GRID_CLASS_FOG_VOLUME 2 // fog volume, e.g. density 1127 #define PNANOVDB_GRID_CLASS_STAGGERED 3 // staggered MAC grid, e.g. velocity 1128 #define PNANOVDB_GRID_CLASS_POINT_INDEX 4 // point index grid 1129 #define PNANOVDB_GRID_CLASS_POINT_DATA 5 // point data grid 1130 #define PNANOVDB_GRID_CLASS_TOPOLOGY 6 // grid with active states only (no values) 1131 #define PNANOVDB_GRID_CLASS_VOXEL_VOLUME 7 // volume of geometric cubes, e.g. minecraft 1132 #define PNANOVDB_GRID_CLASS_INDEX_GRID 8 // grid whose values are offsets, e.g. into an external array 1133 #define PNANOVDB_GRID_CLASS_TENSOR_GRID 9 // grid which can have extra metadata and features 1134 #define PNANOVDB_GRID_CLASS_END 10 1136 #define PNANOVDB_GRID_FLAGS_HAS_LONG_GRID_NAME (1 << 0) 1137 #define PNANOVDB_GRID_FLAGS_HAS_BBOX (1 << 1) 1138 #define PNANOVDB_GRID_FLAGS_HAS_MIN_MAX (1 << 2) 1139 #define PNANOVDB_GRID_FLAGS_HAS_AVERAGE (1 << 3) 1140 #define PNANOVDB_GRID_FLAGS_HAS_STD_DEVIATION (1 << 4) 1141 #define PNANOVDB_GRID_FLAGS_IS_BREADTH_FIRST (1 << 5) 1142 #define PNANOVDB_GRID_FLAGS_END (1 << 6) 1144 #define PNANOVDB_LEAF_TYPE_DEFAULT 0 1145 #define PNANOVDB_LEAF_TYPE_LITE 1 1146 #define PNANOVDB_LEAF_TYPE_FP 2 1147 #define PNANOVDB_LEAF_TYPE_INDEX 3 1148 #define PNANOVDB_LEAF_TYPE_INDEXMASK 4 1149 #define PNANOVDB_LEAF_TYPE_POINTINDEX 5 1153 PNANOVDB_STATIC_CONST pnanovdb_uint32_t
pnanovdb_grid_type_value_strides_bits[
PNANOVDB_GRID_TYPE_CAP] = { 0, 32, 64, 16, 32, 64, 96, 192, 0, 16, 32, 1, 32, 4, 8, 16, 0, 128, 256, 0, 0, 0, 0, 16, 24, 48, 8, 0 };
1155 PNANOVDB_STATIC_CONST pnanovdb_uint32_t
pnanovdb_grid_type_table_strides_bits[
PNANOVDB_GRID_TYPE_CAP] = { 64, 64, 64, 64, 64, 64, 128, 192, 64, 64, 64, 64, 64, 64, 64, 64, 64, 128, 256, 64, 64, 64, 64, 64, 64, 64, 64, 64 };
1157 PNANOVDB_STATIC_CONST pnanovdb_uint32_t
pnanovdb_grid_type_minmax_strides_bits[
PNANOVDB_GRID_TYPE_CAP] = { 0, 32, 64, 16, 32, 64, 96, 192, 8, 16, 32, 8, 32, 32, 32, 32, 32, 128, 256, 64, 64, 64, 64, 64, 24, 48, 8, 0 };
1159 PNANOVDB_STATIC_CONST pnanovdb_uint32_t
pnanovdb_grid_type_minmax_aligns_bits[
PNANOVDB_GRID_TYPE_CAP] = { 0, 32, 64, 16, 32, 64, 32, 64, 8, 16, 32, 8, 32, 32, 32, 32, 32, 32, 64, 64, 64, 64, 64, 64, 8, 16, 8, 0 };
1161 PNANOVDB_STATIC_CONST pnanovdb_uint32_t
pnanovdb_grid_type_stat_strides_bits[
PNANOVDB_GRID_TYPE_CAP] = { 0, 32, 64, 32, 32, 64, 32, 64, 8, 32, 32, 8, 32, 32, 32, 32, 32, 32, 64, 64, 64, 64, 64, 64, 32, 32, 32, 0 };
1163 PNANOVDB_STATIC_CONST pnanovdb_uint32_t
pnanovdb_grid_type_leaf_type[
PNANOVDB_GRID_TYPE_CAP] = { 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 2, 2, 2, 2, 0, 0, 3, 3, 4, 4, 5, 0, 0, 0, 0 };
1180 #define PNANOVDB_MAP_SIZE 264 1182 #define PNANOVDB_MAP_OFF_MATF 0 1183 #define PNANOVDB_MAP_OFF_INVMATF 36 1184 #define PNANOVDB_MAP_OFF_VECF 72 1185 #define PNANOVDB_MAP_OFF_TAPERF 84 1186 #define PNANOVDB_MAP_OFF_MATD 88 1187 #define PNANOVDB_MAP_OFF_INVMATD 160 1188 #define PNANOVDB_MAP_OFF_VECD 232 1189 #define PNANOVDB_MAP_OFF_TAPERD 256 1250 pnanovdb_uint32_t grid_name[256 / 4];
1252 double world_bbox[6];
1253 double voxel_size[3];
1266 #define PNANOVDB_GRID_SIZE 672 1268 #define PNANOVDB_GRID_OFF_MAGIC 0 1269 #define PNANOVDB_GRID_OFF_CHECKSUM 8 1270 #define PNANOVDB_GRID_OFF_VERSION 16 1271 #define PNANOVDB_GRID_OFF_FLAGS 20 1272 #define PNANOVDB_GRID_OFF_GRID_INDEX 24 1273 #define PNANOVDB_GRID_OFF_GRID_COUNT 28 1274 #define PNANOVDB_GRID_OFF_GRID_SIZE 32 1275 #define PNANOVDB_GRID_OFF_GRID_NAME 40 1276 #define PNANOVDB_GRID_OFF_MAP 296 1277 #define PNANOVDB_GRID_OFF_WORLD_BBOX 560 1278 #define PNANOVDB_GRID_OFF_VOXEL_SIZE 608 1279 #define PNANOVDB_GRID_OFF_GRID_CLASS 632 1280 #define PNANOVDB_GRID_OFF_GRID_TYPE 636 1281 #define PNANOVDB_GRID_OFF_BLIND_METADATA_OFFSET 640 1282 #define PNANOVDB_GRID_OFF_BLIND_METADATA_COUNT 648 1283 #define PNANOVDB_GRID_OFF_DATA0 652 1284 #define PNANOVDB_GRID_OFF_DATA1 656 1285 #define PNANOVDB_GRID_OFF_DATA2 664 1396 PNANOVDB_FORCE_INLINE pnanovdb_uint32_t
pnanovdb_make_version(pnanovdb_uint32_t major, pnanovdb_uint32_t minor, pnanovdb_uint32_t patch_num)
1398 return (major << 21u) | (minor << 10u) | patch_num;
1403 return (version >> 21u) & ((1u << 11u) - 1u);
1407 return (version >> 10u) & ((1u << 11u) - 1u);
1411 return version & ((1u << 10u) - 1u);
1414 #define PNANOVDB_GRIDBLINDMETADATA_CLASS_UNKNOWN 0 1415 #define PNANOVDB_GRIDBLINDMETADATA_CLASS_INDEX_ARRAY 1 1416 #define PNANOVDB_GRIDBLINDMETADATA_CLASS_ATTRIBUTE_ARRAY 2 1417 #define PNANOVDB_GRIDBLINDMETADATA_CLASS_GRID_NAME 3 1418 #define PNANOVDB_GRIDBLINDMETADATA_CLASS_CHANNEL_ARRAY 4 1419 #define PNANOVDB_GRIDBLINDMETADATA_CLASS_END 5 1421 #define PNANOVDB_GRIDBLINDMETADATA_SEMANTIC_UNKNOWN 0 1422 #define PNANOVDB_GRIDBLINDMETADATA_SEMANTIC_POINT_POSITION 1 1423 #define PNANOVDB_GRIDBLINDMETADATA_SEMANTIC_POINT_COLOR 2 1424 #define PNANOVDB_GRIDBLINDMETADATA_SEMANTIC_POINT_NORMAL 3 1425 #define PNANOVDB_GRIDBLINDMETADATA_SEMANTIC_POINT_RADIUS 4 1426 #define PNANOVDB_GRIDBLINDMETADATA_SEMANTIC_POINT_VELOCITY 5 1427 #define PNANOVDB_GRIDBLINDMETADATA_SEMANTIC_POINT_ID 6 1428 #define PNANOVDB_GRIDBLINDMETADATA_SEMANTIC_WORLD_COORDS 7 1429 #define PNANOVDB_GRIDBLINDMETADATA_SEMANTIC_GRID_COORDS 8 1430 #define PNANOVDB_GRIDBLINDMETADATA_SEMANTIC_VOXEL_COORDS 9 1431 #define PNANOVDB_GRIDBLINDMETADATA_SEMANTIC_END 10 1441 pnanovdb_uint32_t name[256 / 4];
1447 #define PNANOVDB_GRIDBLINDMETADATA_SIZE 288 1449 #define PNANOVDB_GRIDBLINDMETADATA_OFF_DATA_OFFSET 0 1450 #define PNANOVDB_GRIDBLINDMETADATA_OFF_VALUE_COUNT 8 1451 #define PNANOVDB_GRIDBLINDMETADATA_OFF_VALUE_SIZE 16 1452 #define PNANOVDB_GRIDBLINDMETADATA_OFF_SEMANTIC 20 1453 #define PNANOVDB_GRIDBLINDMETADATA_OFF_DATA_CLASS 24 1454 #define PNANOVDB_GRIDBLINDMETADATA_OFF_DATA_TYPE 28 1455 #define PNANOVDB_GRIDBLINDMETADATA_OFF_NAME 32 1519 #define PNANOVDB_TREE_SIZE 64 1521 #define PNANOVDB_TREE_OFF_NODE_OFFSET_LEAF 0 1522 #define PNANOVDB_TREE_OFF_NODE_OFFSET_LOWER 8 1523 #define PNANOVDB_TREE_OFF_NODE_OFFSET_UPPER 16 1524 #define PNANOVDB_TREE_OFF_NODE_OFFSET_ROOT 24 1525 #define PNANOVDB_TREE_OFF_NODE_COUNT_LEAF 32 1526 #define PNANOVDB_TREE_OFF_NODE_COUNT_LOWER 36 1527 #define PNANOVDB_TREE_OFF_NODE_COUNT_UPPER 40 1528 #define PNANOVDB_TREE_OFF_TILE_COUNT_LOWER 44 1529 #define PNANOVDB_TREE_OFF_TILE_COUNT_UPPER 48 1530 #define PNANOVDB_TREE_OFF_TILE_COUNT_ROOT 52 1531 #define PNANOVDB_TREE_OFF_VOXEL_COUNT 56 1613 #define PNANOVDB_ROOT_BASE_SIZE 28 1615 #define PNANOVDB_ROOT_OFF_BBOX_MIN 0 1616 #define PNANOVDB_ROOT_OFF_BBOX_MAX 12 1617 #define PNANOVDB_ROOT_OFF_TABLE_SIZE 24 1651 #define PNANOVDB_ROOT_TILE_BASE_SIZE 20 1653 #define PNANOVDB_ROOT_TILE_OFF_KEY 0 1654 #define PNANOVDB_ROOT_TILE_OFF_CHILD 8 1655 #define PNANOVDB_ROOT_TILE_OFF_STATE 16 1682 pnanovdb_uint32_t value_mask[1024];
1683 pnanovdb_uint32_t child_mask[1024];
1691 #define PNANOVDB_UPPER_TABLE_COUNT 32768 1692 #define PNANOVDB_UPPER_BASE_SIZE 8224 1694 #define PNANOVDB_UPPER_OFF_BBOX_MIN 0 1695 #define PNANOVDB_UPPER_OFF_BBOX_MAX 12 1696 #define PNANOVDB_UPPER_OFF_FLAGS 24 1697 #define PNANOVDB_UPPER_OFF_VALUE_MASK 32 1698 #define PNANOVDB_UPPER_OFF_CHILD_MASK 4128 1711 return ((value >> (bit_index & 31u)) & 1) != 0u;
1715 return ((value >> (bit_index & 31u)) & 1) != 0u;
1727 if (!value) { valueMask &= ~(1u << (bit_index & 31u)); }
1728 if (value) valueMask |= (1u << (bit_index & 31u));
1734 if (!value) { valueMask &= ~(1u << (bit_index & 31u)); }
1735 if (value) valueMask |= (1u << (bit_index & 31u));
1744 pnanovdb_uint32_t value_mask[128];
1745 pnanovdb_uint32_t child_mask[128];
1753 #define PNANOVDB_LOWER_TABLE_COUNT 4096 1754 #define PNANOVDB_LOWER_BASE_SIZE 1056 1756 #define PNANOVDB_LOWER_OFF_BBOX_MIN 0 1757 #define PNANOVDB_LOWER_OFF_BBOX_MAX 12 1758 #define PNANOVDB_LOWER_OFF_FLAGS 24 1759 #define PNANOVDB_LOWER_OFF_VALUE_MASK 32 1760 #define PNANOVDB_LOWER_OFF_CHILD_MASK 544 1773 return ((value >> (bit_index & 31u)) & 1) != 0u;
1777 return ((value >> (bit_index & 31u)) & 1) != 0u;
1789 if (!value) { valueMask &= ~(1u << (bit_index & 31u)); }
1790 if (value) valueMask |= (1u << (bit_index & 31u));
1796 if (!value) { valueMask &= ~(1u << (bit_index & 31u)); }
1797 if (value) valueMask |= (1u << (bit_index & 31u));
1805 pnanovdb_uint32_t value_mask[16];
1813 #define PNANOVDB_LEAF_TABLE_COUNT 512 1814 #define PNANOVDB_LEAF_BASE_SIZE 80 1816 #define PNANOVDB_LEAF_OFF_BBOX_MIN 0 1817 #define PNANOVDB_LEAF_OFF_BBOX_DIF_AND_FLAGS 12 1818 #define PNANOVDB_LEAF_OFF_VALUE_MASK 16 1820 #define PNANOVDB_LEAF_TABLE_NEG_OFF_BBOX_DIF_AND_FLAGS 84 1821 #define PNANOVDB_LEAF_TABLE_NEG_OFF_MINIMUM 16 1822 #define PNANOVDB_LEAF_TABLE_NEG_OFF_QUANTUM 12 1832 return ((value >> (bit_index & 31u)) & 1) != 0u;
1844 if (!value) { valueMask &= ~(1u << (bit_index & 31u)); }
1845 if (value) valueMask |= (1u << (bit_index & 31u));
1885 {28, 28, 28, 28, 28, 32, 0, 8, 20, 32, 8224, 8224, 8224, 8224, 8224, 270368, 1056, 1056, 1056, 1056, 1056, 33824, 80, 80, 80, 80, 96, 96},
1886 {28, 32, 36, 40, 44, 64, 32, 8, 20, 32, 8224, 8228, 8232, 8236, 8256, 270400, 1056, 1060, 1064, 1068, 1088, 33856, 80, 84, 88, 92, 96, 2144},
1887 {32, 40, 48, 56, 64, 96, 64, 8, 24, 32, 8224, 8232, 8240, 8248, 8256, 270400, 1056, 1064, 1072, 1080, 1088, 33856, 80, 88, 96, 104, 128, 4224},
1888 {28, 30, 32, 36, 40, 64, 16, 8, 20, 32, 8224, 8226, 8228, 8232, 8256, 270400, 1056, 1058, 1060, 1064, 1088, 33856, 80, 82, 84, 88, 96, 1120},
1889 {28, 32, 36, 40, 44, 64, 32, 8, 20, 32, 8224, 8228, 8232, 8236, 8256, 270400, 1056, 1060, 1064, 1068, 1088, 33856, 80, 84, 88, 92, 96, 2144},
1890 {32, 40, 48, 56, 64, 96, 64, 8, 24, 32, 8224, 8232, 8240, 8248, 8256, 270400, 1056, 1064, 1072, 1080, 1088, 33856, 80, 88, 96, 104, 128, 4224},
1891 {28, 40, 52, 64, 68, 96, 96, 16, 20, 32, 8224, 8236, 8248, 8252, 8256, 532544, 1056, 1068, 1080, 1084, 1088, 66624, 80, 92, 104, 108, 128, 6272},
1892 {32, 56, 80, 104, 112, 128, 192, 24, 24, 64, 8224, 8248, 8272, 8280, 8288, 794720, 1056, 1080, 1104, 1112, 1120, 99424, 80, 104, 128, 136, 160, 12448},
1893 {28, 29, 30, 31, 32, 64, 0, 8, 20, 32, 8224, 8225, 8226, 8227, 8256, 270400, 1056, 1057, 1058, 1059, 1088, 33856, 80, 80, 80, 80, 96, 96},
1894 {28, 30, 32, 36, 40, 64, 16, 8, 20, 32, 8224, 8226, 8228, 8232, 8256, 270400, 1056, 1058, 1060, 1064, 1088, 33856, 80, 82, 84, 88, 96, 1120},
1895 {28, 32, 36, 40, 44, 64, 32, 8, 20, 32, 8224, 8228, 8232, 8236, 8256, 270400, 1056, 1060, 1064, 1068, 1088, 33856, 80, 84, 88, 92, 96, 2144},
1896 {28, 29, 30, 31, 32, 64, 1, 8, 20, 32, 8224, 8225, 8226, 8227, 8256, 270400, 1056, 1057, 1058, 1059, 1088, 33856, 80, 80, 80, 80, 96, 160},
1897 {28, 32, 36, 40, 44, 64, 32, 8, 20, 32, 8224, 8228, 8232, 8236, 8256, 270400, 1056, 1060, 1064, 1068, 1088, 33856, 80, 84, 88, 92, 96, 2144},
1898 {28, 32, 36, 40, 44, 64, 0, 8, 20, 32, 8224, 8228, 8232, 8236, 8256, 270400, 1056, 1060, 1064, 1068, 1088, 33856, 88, 90, 92, 94, 96, 352},
1899 {28, 32, 36, 40, 44, 64, 0, 8, 20, 32, 8224, 8228, 8232, 8236, 8256, 270400, 1056, 1060, 1064, 1068, 1088, 33856, 88, 90, 92, 94, 96, 608},
1900 {28, 32, 36, 40, 44, 64, 0, 8, 20, 32, 8224, 8228, 8232, 8236, 8256, 270400, 1056, 1060, 1064, 1068, 1088, 33856, 88, 90, 92, 94, 96, 1120},
1901 {28, 32, 36, 40, 44, 64, 0, 8, 20, 32, 8224, 8228, 8232, 8236, 8256, 270400, 1056, 1060, 1064, 1068, 1088, 33856, 88, 90, 92, 94, 96, 96},
1902 {28, 44, 60, 76, 80, 96, 128, 16, 20, 64, 8224, 8240, 8256, 8260, 8288, 532576, 1056, 1072, 1088, 1092, 1120, 66656, 80, 96, 112, 116, 128, 8320},
1903 {32, 64, 96, 128, 136, 160, 256, 32, 24, 64, 8224, 8256, 8288, 8296, 8320, 1056896, 1056, 1088, 1120, 1128, 1152, 132224, 80, 112, 144, 152, 160, 16544},
1904 {32, 40, 48, 56, 64, 96, 0, 8, 24, 32, 8224, 8232, 8240, 8248, 8256, 270400, 1056, 1064, 1072, 1080, 1088, 33856, 80, 80, 80, 80, 80, 96},
1905 {32, 40, 48, 56, 64, 96, 0, 8, 24, 32, 8224, 8232, 8240, 8248, 8256, 270400, 1056, 1064, 1072, 1080, 1088, 33856, 80, 80, 80, 80, 80, 96},
1906 {32, 40, 48, 56, 64, 96, 0, 8, 24, 32, 8224, 8232, 8240, 8248, 8256, 270400, 1056, 1064, 1072, 1080, 1088, 33856, 80, 80, 80, 80, 80, 160},
1907 {32, 40, 48, 56, 64, 96, 0, 8, 24, 32, 8224, 8232, 8240, 8248, 8256, 270400, 1056, 1064, 1072, 1080, 1088, 33856, 80, 80, 80, 80, 80, 160},
1908 {32, 40, 48, 56, 64, 96, 16, 8, 24, 32, 8224, 8232, 8240, 8248, 8256, 270400, 1056, 1064, 1072, 1080, 1088, 33856, 80, 88, 96, 96, 96, 1120},
1909 {28, 31, 34, 40, 44, 64, 24, 8, 20, 32, 8224, 8227, 8232, 8236, 8256, 270400, 1056, 1059, 1064, 1068, 1088, 33856, 80, 83, 88, 92, 96, 1632},
1910 {28, 34, 40, 48, 52, 64, 48, 8, 20, 32, 8224, 8230, 8236, 8240, 8256, 270400, 1056, 1062, 1068, 1072, 1088, 33856, 80, 86, 92, 96, 128, 3200},
1911 {28, 29, 30, 32, 36, 64, 8, 8, 20, 32, 8224, 8225, 8228, 8232, 8256, 270400, 1056, 1057, 1060, 1064, 1088, 33856, 80, 81, 84, 88, 96, 608},
1912 {28, 28, 28, 28, 28, 32, 0, 8, 20, 32, 8224, 8224, 8224, 8224, 8224, 270368, 1056, 1056, 1056, 1056, 1056, 33824, 80, 80, 80, 80, 96, 96},
1921 meta.
address = pnanovdb_address_offset64(meta.
address, byte_offset);
1930 pnanovdb_address_t address = pnanovdb_address_offset64(meta.
address, pnanovdb_int64_as_uint64(byte_offset));
1945 root.
address = pnanovdb_address_offset64(root.
address, byte_offset);
1952 tile.
address = pnanovdb_address_offset(tile.
address, PNANOVDB_GRID_TYPE_GET(grid_type, root_size));
1953 tile.
address = pnanovdb_address_offset_product(tile.
address, PNANOVDB_GRID_TYPE_GET(grid_type, root_tile_size), n);
1960 tile.
address = pnanovdb_address_offset(tile.
address, PNANOVDB_GRID_TYPE_GET(grid_type, root_size));
1983 #if defined(PNANOVDB_NATIVE_64) 1984 pnanovdb_uint64_t iu = pnanovdb_int32_as_uint32(PNANOVDB_DEREF(ijk).x) >> 12u;
1985 pnanovdb_uint64_t ju = pnanovdb_int32_as_uint32(PNANOVDB_DEREF(ijk).y) >> 12u;
1986 pnanovdb_uint64_t ku = pnanovdb_int32_as_uint32(PNANOVDB_DEREF(ijk).z) >> 12u;
1987 return (ku) | (ju << 21u) | (iu << 42u);
1989 pnanovdb_uint32_t iu = pnanovdb_int32_as_uint32(PNANOVDB_DEREF(ijk).x) >> 12u;
1990 pnanovdb_uint32_t ju = pnanovdb_int32_as_uint32(PNANOVDB_DEREF(ijk).y) >> 12u;
1991 pnanovdb_uint32_t ku = pnanovdb_int32_as_uint32(PNANOVDB_DEREF(ijk).z) >> 12u;
1992 pnanovdb_uint32_t key_x = ku | (ju << 21);
1993 pnanovdb_uint32_t key_y = (iu << 10) | (ju >> 11);
1994 return pnanovdb_uint32_as_uint64(key_x, key_y);
2003 for (pnanovdb_uint32_t i = 0u; i < tile_count; i++)
2009 tile.
address = pnanovdb_address_offset(tile.
address, PNANOVDB_GRID_TYPE_GET(grid_type, root_tile_size));
2040 return (((PNANOVDB_DEREF(ijk).x & 7) >> 0) << (2 * 3)) +
2041 (((PNANOVDB_DEREF(ijk).y & 7) >> 0) << (3)) +
2042 ((PNANOVDB_DEREF(ijk).z & 7) >> 0);
2047 pnanovdb_uint32_t byte_offset = PNANOVDB_GRID_TYPE_GET(grid_type, leaf_off_min);
2048 return pnanovdb_address_offset(node.
address, byte_offset);
2053 pnanovdb_uint32_t byte_offset = PNANOVDB_GRID_TYPE_GET(grid_type, leaf_off_max);
2054 return pnanovdb_address_offset(node.
address, byte_offset);
2059 pnanovdb_uint32_t byte_offset = PNANOVDB_GRID_TYPE_GET(grid_type, leaf_off_ave);
2060 return pnanovdb_address_offset(node.
address, byte_offset);
2065 pnanovdb_uint32_t byte_offset = PNANOVDB_GRID_TYPE_GET(grid_type, leaf_off_stddev);
2066 return pnanovdb_address_offset(node.
address, byte_offset);
2071 pnanovdb_uint32_t byte_offset = PNANOVDB_GRID_TYPE_GET(grid_type, leaf_off_table) + ((PNANOVDB_GRID_TYPE_GET(grid_type, value_stride_bits) * n) >> 3u);
2072 return pnanovdb_address_offset(node.
address, byte_offset);
2083 PNANOVDB_FORCE_INLINE
float pnanovdb_leaf_fp_read_float(pnanovdb_buf_t buf, pnanovdb_address_t address, PNANOVDB_IN(pnanovdb_coord_t) ijk, pnanovdb_uint32_t value_log_bits)
2086 pnanovdb_uint32_t value_bits = 1u << value_log_bits;
2087 pnanovdb_uint32_t value_mask = (1u << value_bits) - 1u;
2088 pnanovdb_uint32_t values_per_word_bits = 5u - value_log_bits;
2089 pnanovdb_uint32_t values_per_word_mask = (1u << values_per_word_bits) - 1u;
2094 pnanovdb_uint32_t raw =
pnanovdb_read_uint32(buf, pnanovdb_address_offset(address, ((n >> values_per_word_bits) << 2u)));
2095 pnanovdb_uint32_t value_compressed = (raw >> ((n & values_per_word_mask) << value_log_bits)) & value_mask;
2096 return pnanovdb_uint32_to_float(value_compressed) * quantum + minimum;
2117 pnanovdb_uint32_t flags = bbox_dif_and_flags >> 24u;
2118 pnanovdb_uint32_t value_log_bits = flags >> 5;
2184 pnanovdb_uint32_t word_idx = n >> 5;
2185 pnanovdb_uint32_t bit_idx = n & 31;
2186 pnanovdb_uint32_t val_mask =
2188 return (val_mask & (1u << bit_idx)) != 0u;
2192 pnanovdb_uint32_t word_idx = n >> 5;
2193 pnanovdb_uint32_t bit_idx = n & 31;
2194 pnanovdb_uint32_t val_mask =
2198 val_mask = val_mask | (1u << bit_idx);
2202 val_mask = val_mask & ~(1u << bit_idx);
2232 pnanovdb_uint64_t idx = pnanovdb_uint32_as_uint64_low(0u);
2243 pnanovdb_uint64_t idx = pnanovdb_uint32_as_uint64_low(0u);
2254 pnanovdb_uint64_t idx = pnanovdb_uint32_as_uint64_low(0u);
2265 pnanovdb_uint64_t idx = pnanovdb_uint32_as_uint64_low(0u);
2278 pnanovdb_uint32_t word_idx = n >> 6u;
2279 pnanovdb_uint32_t bit_idx = n & 63u;
2282 pnanovdb_uint64_t value_index = pnanovdb_uint32_as_uint64_low(0u);
2285 pnanovdb_uint32_t sum = 0u;
2289 pnanovdb_uint64_t prefix_sum =
pnanovdb_read_uint64(buf, pnanovdb_address_offset(value_address, 8u));
2334 pnanovdb_uint32_t word_idx = n >> 5;
2335 pnanovdb_uint32_t bit_idx = n & 31;
2336 pnanovdb_uint32_t val_mask =
2338 return (val_mask & (1u << bit_idx)) != 0u;
2342 pnanovdb_uint32_t word_idx = n >> 5;
2343 pnanovdb_uint32_t bit_idx = n & 31;
2344 pnanovdb_uint32_t val_mask =
2348 val_mask = val_mask | (1u << bit_idx);
2352 val_mask = val_mask & ~(1u << bit_idx);
2387 raw32 = (raw32 & 0xFFFF0000) | (value & 0x0000FFFF);
2391 raw32 = (raw32 & 0x0000FFFF) | (value << 16u);
2397 pnanovdb_uint32_t word_idx = i >> 5;
2398 pnanovdb_uint32_t bit_idx = i & 31;
2401 val_mask = val_mask | (1u << bit_idx);
2414 return (((PNANOVDB_DEREF(ijk).x & 127) >> 3) << (2 * 4)) +
2415 (((PNANOVDB_DEREF(ijk).y & 127) >> 3) << (4)) +
2416 ((PNANOVDB_DEREF(ijk).z & 127) >> 3);
2421 pnanovdb_uint32_t byte_offset = PNANOVDB_GRID_TYPE_GET(grid_type, lower_off_min);
2422 return pnanovdb_address_offset(node.
address, byte_offset);
2427 pnanovdb_uint32_t byte_offset = PNANOVDB_GRID_TYPE_GET(grid_type, lower_off_max);
2428 return pnanovdb_address_offset(node.
address, byte_offset);
2433 pnanovdb_uint32_t byte_offset = PNANOVDB_GRID_TYPE_GET(grid_type, lower_off_ave);
2434 return pnanovdb_address_offset(node.
address, byte_offset);
2439 pnanovdb_uint32_t byte_offset = PNANOVDB_GRID_TYPE_GET(grid_type, lower_off_stddev);
2440 return pnanovdb_address_offset(node.
address, byte_offset);
2445 pnanovdb_uint32_t byte_offset = PNANOVDB_GRID_TYPE_GET(grid_type, lower_off_table) + PNANOVDB_GRID_TYPE_GET(grid_type, table_stride) * n;
2446 return pnanovdb_address_offset(node.
address, byte_offset);
2465 pnanovdb_address_t value_address;
2470 PNANOVDB_DEREF(level) = 0u;
2475 PNANOVDB_DEREF(level) = 1u;
2477 return value_address;
2482 pnanovdb_uint32_t level;
2501 return (((PNANOVDB_DEREF(ijk).x & 4095) >> 7) << (2 * 5)) +
2502 (((PNANOVDB_DEREF(ijk).y & 4095) >> 7) << (5)) +
2503 ((PNANOVDB_DEREF(ijk).z & 4095) >> 7);
2508 pnanovdb_uint32_t byte_offset = PNANOVDB_GRID_TYPE_GET(grid_type, upper_off_min);
2509 return pnanovdb_address_offset(node.
address, byte_offset);
2514 pnanovdb_uint32_t byte_offset = PNANOVDB_GRID_TYPE_GET(grid_type, upper_off_max);
2515 return pnanovdb_address_offset(node.
address, byte_offset);
2520 pnanovdb_uint32_t byte_offset = PNANOVDB_GRID_TYPE_GET(grid_type, upper_off_ave);
2521 return pnanovdb_address_offset(node.
address, byte_offset);
2526 pnanovdb_uint32_t byte_offset = PNANOVDB_GRID_TYPE_GET(grid_type, upper_off_stddev);
2527 return pnanovdb_address_offset(node.
address, byte_offset);
2532 pnanovdb_uint32_t byte_offset = PNANOVDB_GRID_TYPE_GET(grid_type, upper_off_table) + PNANOVDB_GRID_TYPE_GET(grid_type, table_stride) * n;
2533 return pnanovdb_address_offset(node.
address, byte_offset);
2552 pnanovdb_address_t value_address;
2561 PNANOVDB_DEREF(level) = 2u;
2563 return value_address;
2568 pnanovdb_uint32_t level;
2587 pnanovdb_uint32_t byte_offset = PNANOVDB_GRID_TYPE_GET(grid_type, root_off_background);
2588 return pnanovdb_address_offset(root.
address, byte_offset);
2593 pnanovdb_uint32_t byte_offset = PNANOVDB_GRID_TYPE_GET(grid_type, root_off_min);
2594 return pnanovdb_address_offset(root.
address, byte_offset);
2599 pnanovdb_uint32_t byte_offset = PNANOVDB_GRID_TYPE_GET(grid_type, root_off_max);
2600 return pnanovdb_address_offset(root.
address, byte_offset);
2605 pnanovdb_uint32_t byte_offset = PNANOVDB_GRID_TYPE_GET(grid_type, root_off_ave);
2606 return pnanovdb_address_offset(root.
address, byte_offset);
2611 pnanovdb_uint32_t byte_offset = PNANOVDB_GRID_TYPE_GET(grid_type, root_off_stddev);
2612 return pnanovdb_address_offset(root.
address, byte_offset);
2617 pnanovdb_uint32_t byte_offset = PNANOVDB_GRID_TYPE_GET(grid_type, root_tile_off_value);
2618 return pnanovdb_address_offset(root_tile.
address, byte_offset);
2624 pnanovdb_address_t ret;
2625 if (pnanovdb_address_is_null(tile.
address))
2627 ret = pnanovdb_address_offset(root.
address, PNANOVDB_GRID_TYPE_GET(grid_type, root_off_background));
2628 PNANOVDB_DEREF(level) = 4u;
2632 ret = pnanovdb_address_offset(tile.
address, PNANOVDB_GRID_TYPE_GET(grid_type, root_tile_off_value));
2633 PNANOVDB_DEREF(level) = 3u;
2645 pnanovdb_uint32_t level;
2651 pnanovdb_uint32_t level;
2653 PNANOVDB_DEREF(bit_index) = level == 0u ? pnanovdb_int32_as_uint32(PNANOVDB_DEREF(ijk).x & 7) : 0u;
2657 PNANOVDB_FORCE_INLINE
float pnanovdb_root_fp4_read_float(pnanovdb_buf_t buf, pnanovdb_address_t address, PNANOVDB_IN(pnanovdb_coord_t) ijk, pnanovdb_uint32_t level)
2671 PNANOVDB_FORCE_INLINE
float pnanovdb_root_fp8_read_float(pnanovdb_buf_t buf, pnanovdb_address_t address, PNANOVDB_IN(pnanovdb_coord_t) ijk, pnanovdb_uint32_t level)
2685 PNANOVDB_FORCE_INLINE
float pnanovdb_root_fp16_read_float(pnanovdb_buf_t buf, pnanovdb_address_t address, PNANOVDB_IN(pnanovdb_coord_t) ijk, pnanovdb_uint32_t level)
2699 PNANOVDB_FORCE_INLINE
float pnanovdb_root_fpn_read_float(pnanovdb_buf_t buf, pnanovdb_address_t address, PNANOVDB_IN(pnanovdb_coord_t) ijk, pnanovdb_uint32_t level)
2715 pnanovdb_uint64_t ret;
2729 pnanovdb_uint64_t ret;
2743 pnanovdb_address_t value_address,
2744 PNANOVDB_IN(pnanovdb_coord_t) ijk,
2745 pnanovdb_uint32_t level,
2746 PNANOVDB_INOUT(pnanovdb_uint64_t)range_begin,
2747 PNANOVDB_INOUT(pnanovdb_uint64_t)range_end
2750 pnanovdb_uint32_t local_range_begin = 0u;
2751 pnanovdb_uint32_t local_range_end = 0u;
2752 pnanovdb_uint64_t offset = pnanovdb_uint32_as_uint64_low(0u);
2767 return pnanovdb_uint32_as_uint64_low(local_range_end - local_range_begin);
2772 pnanovdb_grid_type_t value_type,
2773 pnanovdb_address_t value_address,
2774 pnanovdb_address_t blindmetadata_value_address,
2775 PNANOVDB_IN(pnanovdb_coord_t) ijk,
2776 pnanovdb_uint32_t level,
2777 PNANOVDB_INOUT(pnanovdb_address_t)address_begin,
2778 PNANOVDB_INOUT(pnanovdb_address_t)address_end
2781 pnanovdb_uint64_t range_begin;
2782 pnanovdb_uint64_t range_end;
2785 pnanovdb_uint32_t stride = 12u;
2794 PNANOVDB_DEREF(address_begin) = pnanovdb_address_offset64_product(blindmetadata_value_address, range_begin, stride);
2795 PNANOVDB_DEREF(address_end) = pnanovdb_address_offset64_product(blindmetadata_value_address, range_end, stride);
2813 PNANOVDB_DEREF(acc).key.x = 0x7FFFFFFF;
2814 PNANOVDB_DEREF(acc).key.y = 0x7FFFFFFF;
2815 PNANOVDB_DEREF(acc).key.z = 0x7FFFFFFF;
2816 PNANOVDB_DEREF(acc).leaf.address = pnanovdb_address_null();
2817 PNANOVDB_DEREF(acc).lower.address = pnanovdb_address_null();
2818 PNANOVDB_DEREF(acc).upper.address = pnanovdb_address_null();
2819 PNANOVDB_DEREF(acc).root = root;
2824 if (pnanovdb_address_is_null(PNANOVDB_DEREF(acc).leaf.
address)) {
return PNANOVDB_FALSE; }
2825 if ((dirty & ~((1u << 3) - 1u)) != 0)
2827 PNANOVDB_DEREF(acc).leaf.address = pnanovdb_address_null();
2828 return PNANOVDB_FALSE;
2830 return PNANOVDB_TRUE;
2834 if (pnanovdb_address_is_null(PNANOVDB_DEREF(acc).lower.
address)) {
return PNANOVDB_FALSE; }
2835 if ((dirty & ~((1u << 7) - 1u)) != 0)
2837 PNANOVDB_DEREF(acc).lower.address = pnanovdb_address_null();
2838 return PNANOVDB_FALSE;
2840 return PNANOVDB_TRUE;
2844 if (pnanovdb_address_is_null(PNANOVDB_DEREF(acc).upper.
address)) {
return PNANOVDB_FALSE; }
2845 if ((dirty & ~((1u << 12) - 1u)) != 0)
2847 PNANOVDB_DEREF(acc).upper.address = pnanovdb_address_null();
2848 return PNANOVDB_FALSE;
2850 return PNANOVDB_TRUE;
2854 return (PNANOVDB_DEREF(ijk).x ^ PNANOVDB_DEREF(acc).key.x) | (PNANOVDB_DEREF(ijk).y ^ PNANOVDB_DEREF(acc).key.y) | (PNANOVDB_DEREF(ijk).z ^ PNANOVDB_DEREF(acc).key.z);
2866 pnanovdb_address_t value_address;
2870 PNANOVDB_DEREF(acc).leaf = child;
2871 PNANOVDB_DEREF(acc).key = PNANOVDB_DEREF(ijk);
2873 PNANOVDB_DEREF(level) = 0u;
2878 PNANOVDB_DEREF(level) = 1u;
2880 return value_address;
2885 pnanovdb_uint32_t level;
2892 pnanovdb_address_t value_address;
2896 PNANOVDB_DEREF(acc).lower = child;
2897 PNANOVDB_DEREF(acc).key = PNANOVDB_DEREF(ijk);
2903 PNANOVDB_DEREF(level) = 2u;
2905 return value_address;
2910 pnanovdb_uint32_t level;
2917 pnanovdb_address_t ret;
2918 if (pnanovdb_address_is_null(tile.
address))
2920 ret = pnanovdb_address_offset(root.
address, PNANOVDB_GRID_TYPE_GET(grid_type, root_off_background));
2921 PNANOVDB_DEREF(level) = 4u;
2925 ret = pnanovdb_address_offset(tile.
address, PNANOVDB_GRID_TYPE_GET(grid_type, root_tile_off_value));
2926 PNANOVDB_DEREF(level) = 3u;
2931 PNANOVDB_DEREF(acc).upper = child;
2932 PNANOVDB_DEREF(acc).key = PNANOVDB_DEREF(ijk);
2940 pnanovdb_uint32_t level;
2948 pnanovdb_address_t value_address;
2952 PNANOVDB_DEREF(level) = 0u;
2966 return value_address;
2971 pnanovdb_uint32_t level;
2977 pnanovdb_uint32_t level;
2979 PNANOVDB_DEREF(bit_index) = level == 0u ? pnanovdb_int32_as_uint32(PNANOVDB_DEREF(ijk).x & 7) : 0u;
2993 pnanovdb_uint32_t ret;
2997 PNANOVDB_DEREF(acc).leaf = child;
2998 PNANOVDB_DEREF(acc).key = PNANOVDB_DEREF(ijk);
3011 pnanovdb_uint32_t ret;
3015 PNANOVDB_DEREF(acc).lower = child;
3016 PNANOVDB_DEREF(acc).key = PNANOVDB_DEREF(ijk);
3021 ret = (1u << (4u + 3u));
3029 pnanovdb_uint32_t ret;
3030 if (pnanovdb_address_is_null(tile.
address))
3032 ret = 1u << (5u + 4u + 3u);
3036 ret = 1u << (5u + 4u + 3u);
3041 PNANOVDB_DEREF(acc).upper = child;
3042 PNANOVDB_DEREF(acc).key = PNANOVDB_DEREF(ijk);
3052 pnanovdb_uint32_t dim;
3083 pnanovdb_bool_t is_active;
3087 PNANOVDB_DEREF(acc).leaf = child;
3088 PNANOVDB_DEREF(acc).key = PNANOVDB_DEREF(ijk);
3101 pnanovdb_bool_t is_active;
3105 PNANOVDB_DEREF(acc).lower = child;
3106 PNANOVDB_DEREF(acc).key = PNANOVDB_DEREF(ijk);
3119 pnanovdb_bool_t is_active;
3120 if (pnanovdb_address_is_null(tile.
address))
3122 is_active = PNANOVDB_FALSE;
3127 is_active = state != 0u;
3132 PNANOVDB_DEREF(acc).upper = child;
3133 PNANOVDB_DEREF(acc).key = PNANOVDB_DEREF(ijk);
3143 pnanovdb_bool_t is_active;
3167 pnanovdb_vec3_t dst;
3168 float sx = PNANOVDB_DEREF(src).x;
3169 float sy = PNANOVDB_DEREF(src).y;
3170 float sz = PNANOVDB_DEREF(src).z;
3179 pnanovdb_vec3_t dst;
3191 pnanovdb_vec3_t dst;
3192 float sx = PNANOVDB_DEREF(src).x;
3193 float sy = PNANOVDB_DEREF(src).y;
3194 float sz = PNANOVDB_DEREF(src).z;
3203 pnanovdb_vec3_t dst;
3204 float sx = PNANOVDB_DEREF(src).x;
3205 float sy = PNANOVDB_DEREF(src).y;
3206 float sz = PNANOVDB_DEREF(src).z;
3322 0.14425f, 0.643275f, 0.830409f, 0.331384f, 0.105263f, 0.604289f, 0.167641f, 0.666667f,
3323 0.892788f, 0.393762f, 0.0818713f, 0.580897f, 0.853801f, 0.354776f, 0.916179f, 0.417154f,
3324 0.612086f, 0.11306f, 0.79922f, 0.300195f, 0.510721f, 0.0116959f, 0.947368f, 0.448343f,
3325 0.362573f, 0.861598f, 0.0506823f, 0.549708f, 0.261209f, 0.760234f, 0.19883f, 0.697856f,
3326 0.140351f, 0.639376f, 0.576998f, 0.0779727f, 0.522417f, 0.0233918f, 0.460039f, 0.959064f,
3327 0.888889f, 0.389864f, 0.327485f, 0.826511f, 0.272904f, 0.77193f, 0.709552f, 0.210526f,
3328 0.483431f, 0.982456f, 0.296296f, 0.795322f, 0.116959f, 0.615984f, 0.0545809f, 0.553606f,
3329 0.732943f, 0.233918f, 0.545809f, 0.0467836f, 0.865497f, 0.366472f, 0.803119f, 0.304094f,
3330 0.518519f, 0.0194932f, 0.45614f, 0.955166f, 0.729045f, 0.230019f, 0.54191f, 0.042885f,
3331 0.269006f, 0.768031f, 0.705653f, 0.206628f, 0.479532f, 0.978558f, 0.292398f, 0.791423f,
3332 0.237817f, 0.736842f, 0.424951f, 0.923977f, 0.136452f, 0.635478f, 0.323587f, 0.822612f,
3333 0.986355f, 0.487329f, 0.674464f, 0.175439f, 0.88499f, 0.385965f, 0.573099f, 0.0740741f,
3334 0.51462f, 0.0155945f, 0.202729f, 0.701754f, 0.148148f, 0.647174f, 0.834308f, 0.335283f,
3335 0.265107f, 0.764133f, 0.951267f, 0.452242f, 0.896686f, 0.397661f, 0.08577f, 0.584795f,
3336 0.8577f, 0.358674f, 0.920078f, 0.421053f, 0.740741f, 0.241715f, 0.678363f, 0.179337f,
3337 0.109162f, 0.608187f, 0.17154f, 0.670565f, 0.491228f, 0.990253f, 0.42885f, 0.927875f,
3338 0.0662768f, 0.565302f, 0.62768f, 0.128655f, 0.183236f, 0.682261f, 0.744639f, 0.245614f,
3339 0.814815f, 0.315789f, 0.378168f, 0.877193f, 0.931774f, 0.432749f, 0.495127f, 0.994152f,
3340 0.0350877f, 0.534113f, 0.97076f, 0.471735f, 0.214425f, 0.71345f, 0.526316f, 0.0272904f,
3341 0.783626f, 0.2846f, 0.222222f, 0.721248f, 0.962963f, 0.463938f, 0.276803f, 0.775828f,
3342 0.966862f, 0.467836f, 0.405458f, 0.904483f, 0.0701754f, 0.569201f, 0.881092f, 0.382066f,
3343 0.218324f, 0.717349f, 0.654971f, 0.155945f, 0.818713f, 0.319688f, 0.132554f, 0.631579f,
3344 0.0623782f, 0.561404f, 0.748538f, 0.249513f, 0.912281f, 0.413255f, 0.974659f, 0.475634f,
3345 0.810916f, 0.311891f, 0.499025f, 0.998051f, 0.163743f, 0.662768f, 0.226121f, 0.725146f,
3346 0.690058f, 0.191033f, 0.00389864f, 0.502924f, 0.557505f, 0.0584795f, 0.120858f, 0.619883f,
3347 0.440546f, 0.939571f, 0.752437f, 0.253411f, 0.307992f, 0.807018f, 0.869396f, 0.37037f,
3348 0.658869f, 0.159844f, 0.346979f, 0.846004f, 0.588694f, 0.0896686f, 0.152047f, 0.651072f,
3349 0.409357f, 0.908382f, 0.596491f, 0.0974659f, 0.339181f, 0.838207f, 0.900585f, 0.401559f,
3350 0.34308f, 0.842105f, 0.779727f, 0.280702f, 0.693957f, 0.194932f, 0.25731f, 0.756335f,
3351 0.592593f, 0.0935673f, 0.0311891f, 0.530214f, 0.444444f, 0.94347f, 0.506823f, 0.00779727f,
3352 0.68616f, 0.187135f, 0.124756f, 0.623782f, 0.288499f, 0.787524f, 0.350877f, 0.849903f,
3353 0.436647f, 0.935673f, 0.873294f, 0.374269f, 0.538012f, 0.0389864f, 0.60039f, 0.101365f,
3354 0.57115f, 0.0721248f, 0.758285f, 0.259259f, 0.719298f, 0.220273f, 0.532164f, 0.0331384f,
3355 0.321637f, 0.820663f, 0.00974659f, 0.508772f, 0.469786f, 0.968811f, 0.282651f, 0.781676f,
3356 0.539961f, 0.0409357f, 0.727096f, 0.22807f, 0.500975f, 0.00194932f, 0.563353f, 0.0643275f,
3357 0.290448f, 0.789474f, 0.477583f, 0.976608f, 0.251462f, 0.750487f, 0.31384f, 0.812865f,
3358 0.94152f, 0.442495f, 0.879142f, 0.380117f, 0.37232f, 0.871345f, 0.309942f, 0.808967f,
3359 0.192982f, 0.692008f, 0.130604f, 0.62963f, 0.621832f, 0.122807f, 0.559454f, 0.0604289f,
3360 0.660819f, 0.161793f, 0.723197f, 0.224172f, 0.403509f, 0.902534f, 0.840156f, 0.341131f,
3361 0.411306f, 0.910331f, 0.473684f, 0.97271f, 0.653021f, 0.153996f, 0.0916179f, 0.590643f,
3362 0.196881f, 0.695906f, 0.384016f, 0.883041f, 0.0955166f, 0.594542f, 0.157895f, 0.65692f,
3363 0.945419f, 0.446394f, 0.633528f, 0.134503f, 0.844055f, 0.345029f, 0.906433f, 0.407407f,
3364 0.165692f, 0.664717f, 0.103314f, 0.602339f, 0.126706f, 0.625731f, 0.189084f, 0.688109f,
3365 0.91423f, 0.415205f, 0.851852f, 0.352827f, 0.875244f, 0.376218f, 0.937622f, 0.438596f,
3366 0.317739f, 0.816764f, 0.255361f, 0.754386f, 0.996101f, 0.497076f, 0.933723f, 0.434698f,
3367 0.567251f, 0.0682261f, 0.504873f, 0.00584795f, 0.247563f, 0.746589f, 0.185185f, 0.684211f,
3368 0.037037f, 0.536062f, 0.0994152f, 0.598441f, 0.777778f, 0.278752f, 0.465887f, 0.964912f,
3369 0.785575f, 0.28655f, 0.847953f, 0.348928f, 0.0292398f, 0.528265f, 0.7154f, 0.216374f,
3370 0.39961f, 0.898636f, 0.961014f, 0.461988f, 0.0487329f, 0.547758f, 0.111111f, 0.610136f,
3371 0.649123f, 0.150097f, 0.212476f, 0.711501f, 0.797271f, 0.298246f, 0.859649f, 0.360624f,
3372 0.118908f, 0.617934f, 0.0565302f, 0.555556f, 0.329435f, 0.82846f, 0.516569f, 0.0175439f,
3373 0.867446f, 0.368421f, 0.805068f, 0.306043f, 0.578947f, 0.079922f, 0.267057f, 0.766082f,
3374 0.270955f, 0.76998f, 0.707602f, 0.208577f, 0.668616f, 0.169591f, 0.606238f, 0.107212f,
3375 0.520468f, 0.0214425f, 0.45809f, 0.957115f, 0.419103f, 0.918129f, 0.356725f, 0.855751f,
3376 0.988304f, 0.489279f, 0.426901f, 0.925926f, 0.450292f, 0.949318f, 0.512671f, 0.0136452f,
3377 0.239766f, 0.738791f, 0.676413f, 0.177388f, 0.699805f, 0.20078f, 0.263158f, 0.762183f,
3378 0.773879f, 0.274854f, 0.337232f, 0.836257f, 0.672515f, 0.173489f, 0.734893f, 0.235867f,
3379 0.0253411f, 0.524366f, 0.586745f, 0.0877193f, 0.423002f, 0.922027f, 0.48538f, 0.984405f,
3380 0.74269f, 0.243665f, 0.680312f, 0.181287f, 0.953216f, 0.454191f, 0.1423f, 0.641326f,
3381 0.493177f, 0.992203f, 0.430799f, 0.929825f, 0.204678f, 0.703704f, 0.890838f, 0.391813f,
3382 0.894737f, 0.395712f, 0.0838207f, 0.582846f, 0.0448343f, 0.54386f, 0.231969f, 0.730994f,
3383 0.146199f, 0.645224f, 0.832359f, 0.333333f, 0.793372f, 0.294347f, 0.980507f, 0.481481f,
3384 0.364522f, 0.863548f, 0.80117f, 0.302144f, 0.824561f, 0.325536f, 0.138402f, 0.637427f,
3385 0.614035f, 0.11501f, 0.0526316f, 0.551657f, 0.0760234f, 0.575049f, 0.88694f, 0.387914f,
3390 return enabled ? pnanovdb_dither_lut[offset & 511] : 0.5f;
3395 #ifdef PNANOVDB_HDDA 3398 #define PNANOVDB_ENFORCE_FORWARD_STEPPING 3400 #define PNANOVDB_HDDA_FLOAT_MAX 1e38f 3402 struct pnanovdb_hdda_t
3404 pnanovdb_int32_t dim;
3407 pnanovdb_coord_t voxel;
3408 pnanovdb_coord_t step;
3409 pnanovdb_vec3_t delta;
3410 pnanovdb_vec3_t next;
3412 PNANOVDB_STRUCT_TYPEDEF(pnanovdb_hdda_t)
3414 PNANOVDB_FORCE_INLINE pnanovdb_coord_t pnanovdb_hdda_pos_to_ijk(PNANOVDB_IN(pnanovdb_vec3_t) pos)
3416 pnanovdb_coord_t voxel;
3417 voxel.x = pnanovdb_float_to_int32(pnanovdb_floor(PNANOVDB_DEREF(pos).x));
3418 voxel.y = pnanovdb_float_to_int32(pnanovdb_floor(PNANOVDB_DEREF(pos).y));
3419 voxel.z = pnanovdb_float_to_int32(pnanovdb_floor(PNANOVDB_DEREF(pos).z));
3423 PNANOVDB_FORCE_INLINE pnanovdb_coord_t pnanovdb_hdda_pos_to_voxel(PNANOVDB_IN(pnanovdb_vec3_t) pos,
int dim)
3425 pnanovdb_coord_t voxel;
3426 voxel.x = pnanovdb_float_to_int32(pnanovdb_floor(PNANOVDB_DEREF(pos).x)) & (~(dim - 1));
3427 voxel.y = pnanovdb_float_to_int32(pnanovdb_floor(PNANOVDB_DEREF(pos).y)) & (~(dim - 1));
3428 voxel.z = pnanovdb_float_to_int32(pnanovdb_floor(PNANOVDB_DEREF(pos).z)) & (~(dim - 1));
3432 PNANOVDB_FORCE_INLINE pnanovdb_vec3_t pnanovdb_hdda_ray_start(PNANOVDB_IN(pnanovdb_vec3_t) origin,
float tmin, PNANOVDB_IN(pnanovdb_vec3_t) direction)
3434 pnanovdb_vec3_t pos = pnanovdb_vec3_add(
3435 pnanovdb_vec3_mul(PNANOVDB_DEREF(direction), pnanovdb_vec3_uniform(tmin)),
3436 PNANOVDB_DEREF(origin)
3441 PNANOVDB_FORCE_INLINE
void pnanovdb_hdda_init(PNANOVDB_INOUT(pnanovdb_hdda_t) hdda, PNANOVDB_IN(pnanovdb_vec3_t) origin,
float tmin, PNANOVDB_IN(pnanovdb_vec3_t) direction,
float tmax,
int dim)
3443 PNANOVDB_DEREF(hdda).dim = dim;
3444 PNANOVDB_DEREF(hdda).tmin = tmin;
3445 PNANOVDB_DEREF(hdda).tmax = tmax;
3447 pnanovdb_vec3_t pos = pnanovdb_hdda_ray_start(origin, tmin, direction);
3448 pnanovdb_vec3_t dir_inv = pnanovdb_vec3_div(pnanovdb_vec3_uniform(1.f), PNANOVDB_DEREF(direction));
3450 PNANOVDB_DEREF(hdda).voxel = pnanovdb_hdda_pos_to_voxel(PNANOVDB_REF(pos), dim);
3453 if (PNANOVDB_DEREF(direction).x == 0.f)
3455 PNANOVDB_DEREF(hdda).next.x = PNANOVDB_HDDA_FLOAT_MAX;
3456 PNANOVDB_DEREF(hdda).step.x = 0;
3457 PNANOVDB_DEREF(hdda).delta.x = 0.f;
3459 else if (dir_inv.x > 0.f)
3461 PNANOVDB_DEREF(hdda).step.x = 1;
3462 PNANOVDB_DEREF(hdda).next.x = PNANOVDB_DEREF(hdda).tmin + (PNANOVDB_DEREF(hdda).voxel.x + dim - pos.x) * dir_inv.x;
3463 PNANOVDB_DEREF(hdda).delta.x = dir_inv.x;
3467 PNANOVDB_DEREF(hdda).step.x = -1;
3468 PNANOVDB_DEREF(hdda).next.x = PNANOVDB_DEREF(hdda).tmin + (PNANOVDB_DEREF(hdda).voxel.x - pos.x) * dir_inv.x;
3469 PNANOVDB_DEREF(hdda).delta.x = -dir_inv.x;
3473 if (PNANOVDB_DEREF(direction).y == 0.f)
3475 PNANOVDB_DEREF(hdda).next.y = PNANOVDB_HDDA_FLOAT_MAX;
3476 PNANOVDB_DEREF(hdda).step.y = 0;
3477 PNANOVDB_DEREF(hdda).delta.y = 0.f;
3479 else if (dir_inv.y > 0.f)
3481 PNANOVDB_DEREF(hdda).step.y = 1;
3482 PNANOVDB_DEREF(hdda).next.y = PNANOVDB_DEREF(hdda).tmin + (PNANOVDB_DEREF(hdda).voxel.y + dim - pos.y) * dir_inv.y;
3483 PNANOVDB_DEREF(hdda).delta.y = dir_inv.y;
3487 PNANOVDB_DEREF(hdda).step.y = -1;
3488 PNANOVDB_DEREF(hdda).next.y = PNANOVDB_DEREF(hdda).tmin + (PNANOVDB_DEREF(hdda).voxel.y - pos.y) * dir_inv.y;
3489 PNANOVDB_DEREF(hdda).delta.y = -dir_inv.y;
3493 if (PNANOVDB_DEREF(direction).z == 0.f)
3495 PNANOVDB_DEREF(hdda).next.z = PNANOVDB_HDDA_FLOAT_MAX;
3496 PNANOVDB_DEREF(hdda).step.z = 0;
3497 PNANOVDB_DEREF(hdda).delta.z = 0.f;
3499 else if (dir_inv.z > 0.f)
3501 PNANOVDB_DEREF(hdda).step.z = 1;
3502 PNANOVDB_DEREF(hdda).next.z = PNANOVDB_DEREF(hdda).tmin + (PNANOVDB_DEREF(hdda).voxel.z + dim - pos.z) * dir_inv.z;
3503 PNANOVDB_DEREF(hdda).delta.z = dir_inv.z;
3507 PNANOVDB_DEREF(hdda).step.z = -1;
3508 PNANOVDB_DEREF(hdda).next.z = PNANOVDB_DEREF(hdda).tmin + (PNANOVDB_DEREF(hdda).voxel.z - pos.z) * dir_inv.z;
3509 PNANOVDB_DEREF(hdda).delta.z = -dir_inv.z;
3513 PNANOVDB_FORCE_INLINE pnanovdb_bool_t pnanovdb_hdda_update(PNANOVDB_INOUT(pnanovdb_hdda_t) hdda, PNANOVDB_IN(pnanovdb_vec3_t) origin, PNANOVDB_IN(pnanovdb_vec3_t) direction,
int dim)
3515 if (PNANOVDB_DEREF(hdda).dim == dim)
3517 return PNANOVDB_FALSE;
3521 pnanovdb_coord_t voxel_max = {
3522 (PNANOVDB_DEREF(hdda).voxel.x + PNANOVDB_DEREF(hdda).dim - 1) & (~(dim - 1)),
3523 (PNANOVDB_DEREF(hdda).voxel.y + PNANOVDB_DEREF(hdda).dim - 1) & (~(dim - 1)),
3524 (PNANOVDB_DEREF(hdda).voxel.z + PNANOVDB_DEREF(hdda).dim - 1) & (~(dim - 1))
3526 pnanovdb_coord_t voxel_min = {
3527 PNANOVDB_DEREF(hdda).voxel.x & (~(dim - 1)),
3528 PNANOVDB_DEREF(hdda).voxel.y & (~(dim - 1)),
3529 PNANOVDB_DEREF(hdda).voxel.z & (~(dim - 1))
3532 PNANOVDB_DEREF(hdda).dim = dim;
3534 pnanovdb_vec3_t pos = pnanovdb_vec3_add(
3535 pnanovdb_vec3_mul(PNANOVDB_DEREF(direction), pnanovdb_vec3_uniform(PNANOVDB_DEREF(hdda).tmin)),
3536 PNANOVDB_DEREF(origin)
3538 pnanovdb_vec3_t dir_inv = pnanovdb_vec3_div(pnanovdb_vec3_uniform(1.f), PNANOVDB_DEREF(direction));
3540 PNANOVDB_DEREF(hdda).voxel = pnanovdb_hdda_pos_to_voxel(PNANOVDB_REF(pos), dim);
3543 PNANOVDB_DEREF(hdda).voxel.x = PNANOVDB_DEREF(hdda).voxel.x < voxel_max.x ? PNANOVDB_DEREF(hdda).voxel.x : voxel_max.x;
3544 PNANOVDB_DEREF(hdda).voxel.y = PNANOVDB_DEREF(hdda).voxel.y < voxel_max.y ? PNANOVDB_DEREF(hdda).voxel.y : voxel_max.y;
3545 PNANOVDB_DEREF(hdda).voxel.z = PNANOVDB_DEREF(hdda).voxel.z < voxel_max.z ? PNANOVDB_DEREF(hdda).voxel.z : voxel_max.z;
3546 PNANOVDB_DEREF(hdda).voxel.x = PNANOVDB_DEREF(hdda).voxel.x > voxel_min.x ? PNANOVDB_DEREF(hdda).voxel.x : voxel_min.x;
3547 PNANOVDB_DEREF(hdda).voxel.y = PNANOVDB_DEREF(hdda).voxel.y > voxel_min.y ? PNANOVDB_DEREF(hdda).voxel.y : voxel_min.y;
3548 PNANOVDB_DEREF(hdda).voxel.z = PNANOVDB_DEREF(hdda).voxel.z > voxel_min.z ? PNANOVDB_DEREF(hdda).voxel.z : voxel_min.z;
3550 if (PNANOVDB_DEREF(hdda).step.x != 0)
3552 PNANOVDB_DEREF(hdda).next.x = PNANOVDB_DEREF(hdda).tmin + (PNANOVDB_DEREF(hdda).voxel.x - pos.x) * dir_inv.x;
3553 if (PNANOVDB_DEREF(hdda).step.x > 0)
3555 PNANOVDB_DEREF(hdda).next.x += dim * dir_inv.x;
3558 if (PNANOVDB_DEREF(hdda).step.y != 0)
3560 PNANOVDB_DEREF(hdda).next.y = PNANOVDB_DEREF(hdda).tmin + (PNANOVDB_DEREF(hdda).voxel.y - pos.y) * dir_inv.y;
3561 if (PNANOVDB_DEREF(hdda).step.y > 0)
3563 PNANOVDB_DEREF(hdda).next.y += dim * dir_inv.y;
3566 if (PNANOVDB_DEREF(hdda).step.z != 0)
3568 PNANOVDB_DEREF(hdda).next.z = PNANOVDB_DEREF(hdda).tmin + (PNANOVDB_DEREF(hdda).voxel.z - pos.z) * dir_inv.z;
3569 if (PNANOVDB_DEREF(hdda).step.z > 0)
3571 PNANOVDB_DEREF(hdda).next.z += dim * dir_inv.z;
3575 return PNANOVDB_TRUE;
3578 PNANOVDB_FORCE_INLINE pnanovdb_bool_t pnanovdb_hdda_step(PNANOVDB_INOUT(pnanovdb_hdda_t) hdda)
3580 pnanovdb_bool_t ret;
3581 if (PNANOVDB_DEREF(hdda).next.x < PNANOVDB_DEREF(hdda).next.y && PNANOVDB_DEREF(hdda).next.x < PNANOVDB_DEREF(hdda).next.z)
3583 #ifdef PNANOVDB_ENFORCE_FORWARD_STEPPING 3584 if (PNANOVDB_DEREF(hdda).next.x <= PNANOVDB_DEREF(hdda).tmin)
3586 PNANOVDB_DEREF(hdda).next.x += PNANOVDB_DEREF(hdda).tmin - 0.999999f * PNANOVDB_DEREF(hdda).next.x + 1.0e-6f;
3589 PNANOVDB_DEREF(hdda).tmin = PNANOVDB_DEREF(hdda).next.x;
3590 PNANOVDB_DEREF(hdda).next.x += PNANOVDB_DEREF(hdda).dim * PNANOVDB_DEREF(hdda).delta.x;
3591 PNANOVDB_DEREF(hdda).voxel.x += PNANOVDB_DEREF(hdda).dim * PNANOVDB_DEREF(hdda).step.x;
3592 ret = PNANOVDB_DEREF(hdda).tmin <= PNANOVDB_DEREF(hdda).tmax;
3594 else if (PNANOVDB_DEREF(hdda).next.y < PNANOVDB_DEREF(hdda).next.z)
3596 #ifdef PNANOVDB_ENFORCE_FORWARD_STEPPING 3597 if (PNANOVDB_DEREF(hdda).next.y <= PNANOVDB_DEREF(hdda).tmin)
3599 PNANOVDB_DEREF(hdda).next.y += PNANOVDB_DEREF(hdda).tmin - 0.999999f * PNANOVDB_DEREF(hdda).next.y + 1.0e-6f;
3602 PNANOVDB_DEREF(hdda).tmin = PNANOVDB_DEREF(hdda).next.y;
3603 PNANOVDB_DEREF(hdda).next.y += PNANOVDB_DEREF(hdda).dim * PNANOVDB_DEREF(hdda).delta.y;
3604 PNANOVDB_DEREF(hdda).voxel.y += PNANOVDB_DEREF(hdda).dim * PNANOVDB_DEREF(hdda).step.y;
3605 ret = PNANOVDB_DEREF(hdda).tmin <= PNANOVDB_DEREF(hdda).tmax;
3609 #ifdef PNANOVDB_ENFORCE_FORWARD_STEPPING 3610 if (PNANOVDB_DEREF(hdda).next.z <= PNANOVDB_DEREF(hdda).tmin)
3612 PNANOVDB_DEREF(hdda).next.z += PNANOVDB_DEREF(hdda).tmin - 0.999999f * PNANOVDB_DEREF(hdda).next.z + 1.0e-6f;
3615 PNANOVDB_DEREF(hdda).tmin = PNANOVDB_DEREF(hdda).next.z;
3616 PNANOVDB_DEREF(hdda).next.z += PNANOVDB_DEREF(hdda).dim * PNANOVDB_DEREF(hdda).delta.z;
3617 PNANOVDB_DEREF(hdda).voxel.z += PNANOVDB_DEREF(hdda).dim * PNANOVDB_DEREF(hdda).step.z;
3618 ret = PNANOVDB_DEREF(hdda).tmin <= PNANOVDB_DEREF(hdda).tmax;
3623 PNANOVDB_FORCE_INLINE pnanovdb_bool_t pnanovdb_hdda_ray_clip(
3624 PNANOVDB_IN(pnanovdb_vec3_t) bbox_min,
3625 PNANOVDB_IN(pnanovdb_vec3_t) bbox_max,
3626 PNANOVDB_IN(pnanovdb_vec3_t) origin, PNANOVDB_INOUT(
float) tmin,
3627 PNANOVDB_IN(pnanovdb_vec3_t) direction, PNANOVDB_INOUT(
float) tmax
3630 pnanovdb_vec3_t dir_inv = pnanovdb_vec3_div(pnanovdb_vec3_uniform(1.f), PNANOVDB_DEREF(direction));
3631 pnanovdb_vec3_t t0 = pnanovdb_vec3_mul(pnanovdb_vec3_sub(PNANOVDB_DEREF(bbox_min), PNANOVDB_DEREF(origin)), dir_inv);
3632 pnanovdb_vec3_t t1 = pnanovdb_vec3_mul(pnanovdb_vec3_sub(PNANOVDB_DEREF(bbox_max), PNANOVDB_DEREF(origin)), dir_inv);
3633 pnanovdb_vec3_t tmin3 = pnanovdb_vec3_min(t0, t1);
3634 pnanovdb_vec3_t tmax3 = pnanovdb_vec3_max(t0, t1);
3635 float tnear = pnanovdb_max(tmin3.x, pnanovdb_max(tmin3.y, tmin3.z));
3636 float tfar = pnanovdb_min(tmax3.x, pnanovdb_min(tmax3.y, tmax3.z));
3637 pnanovdb_bool_t hit = tnear <= tfar;
3638 PNANOVDB_DEREF(tmin) = pnanovdb_max(PNANOVDB_DEREF(tmin), tnear);
3639 PNANOVDB_DEREF(tmax) = pnanovdb_min(PNANOVDB_DEREF(tmax), tfar);
3643 PNANOVDB_FORCE_INLINE pnanovdb_bool_t pnanovdb_hdda_zero_crossing(
3644 pnanovdb_grid_type_t grid_type,
3647 PNANOVDB_IN(pnanovdb_vec3_t) origin,
float tmin,
3648 PNANOVDB_IN(pnanovdb_vec3_t) direction,
float tmax,
3649 PNANOVDB_INOUT(
float) thit,
3650 PNANOVDB_INOUT(
float) v
3655 pnanovdb_vec3_t bbox_minf = pnanovdb_coord_to_vec3(bbox_min);
3656 pnanovdb_vec3_t bbox_maxf = pnanovdb_coord_to_vec3(pnanovdb_coord_add(bbox_max, pnanovdb_coord_uniform(1)));
3658 pnanovdb_bool_t hit = pnanovdb_hdda_ray_clip(PNANOVDB_REF(bbox_minf), PNANOVDB_REF(bbox_maxf), origin, PNANOVDB_REF(tmin), direction, PNANOVDB_REF(tmax));
3659 if (!hit || tmax > 1.0e20f)
3661 return PNANOVDB_FALSE;
3664 pnanovdb_vec3_t pos = pnanovdb_hdda_ray_start(origin, tmin, direction);
3665 pnanovdb_coord_t ijk = pnanovdb_hdda_pos_to_ijk(PNANOVDB_REF(pos));
3671 pnanovdb_hdda_t hdda;
3672 pnanovdb_hdda_init(PNANOVDB_REF(hdda), origin, tmin, direction, tmax, dim);
3673 while (pnanovdb_hdda_step(PNANOVDB_REF(hdda)))
3675 pnanovdb_vec3_t pos_start = pnanovdb_hdda_ray_start(origin, hdda.tmin + 1.0001f, direction);
3676 ijk = pnanovdb_hdda_pos_to_ijk(PNANOVDB_REF(pos_start));
3678 pnanovdb_hdda_update(PNANOVDB_REF(hdda), origin, direction, dim);
3688 if (PNANOVDB_DEREF(v) * v0 < 0.f)
3690 PNANOVDB_DEREF(thit) = hdda.tmin;
3691 return PNANOVDB_TRUE;
3695 return PNANOVDB_FALSE;
3700 #endif // end of NANOVDB_PNANOVDB_H_HAS_BEEN_INCLUDED pnanovdb_map_t map
Definition: PNanoVDB.h:1251
PNANOVDB_FORCE_INLINE float pnanovdb_root_fp4_read_float(pnanovdb_buf_t buf, pnanovdb_address_t address, PNANOVDB_IN(pnanovdb_coord_t) ijk, pnanovdb_uint32_t level)
Definition: PNanoVDB.h:2657
pnanovdb_uint32_t node_count_lower
Definition: PNanoVDB.h:1508
PNANOVDB_FORCE_INLINE pnanovdb_vec3_t pnanovdb_grid_world_to_index_dirf(pnanovdb_buf_t buf, pnanovdb_grid_handle_t grid, PNANOVDB_IN(pnanovdb_vec3_t) src)
Definition: PNanoVDB.h:3225
PNANOVDB_FORCE_INLINE double pnanovdb_map_get_taperd(pnanovdb_buf_t buf, pnanovdb_map_handle_t p, pnanovdb_uint32_t index)
Definition: PNanoVDB.h:1212
PNANOVDB_FORCE_INLINE void pnanovdb_tree_set_first_leaf(pnanovdb_buf_t buf, pnanovdb_tree_handle_t p, pnanovdb_leaf_handle_t leaf)
Definition: PNanoVDB.h:2023
PNANOVDB_FORCE_INLINE float pnanovdb_leaf_fp4_read_float(pnanovdb_buf_t buf, pnanovdb_address_t address, PNANOVDB_IN(pnanovdb_coord_t) ijk)
Definition: PNanoVDB.h:2099
PNANOVDB_FORCE_INLINE float pnanovdb_root_fp16_read_float(pnanovdb_buf_t buf, pnanovdb_address_t address, PNANOVDB_IN(pnanovdb_coord_t) ijk, pnanovdb_uint32_t level)
Definition: PNanoVDB.h:2685
PNANOVDB_FORCE_INLINE pnanovdb_address_t pnanovdb_upper_get_stddev_address(pnanovdb_grid_type_t grid_type, pnanovdb_buf_t buf, pnanovdb_upper_handle_t node)
Definition: PNanoVDB.h:2524
pnanovdb_coord_t bbox_max
Definition: PNanoVDB.h:1742
PNANOVDB_FORCE_INLINE pnanovdb_uint32_t pnanovdb_tree_get_node_count_lower(pnanovdb_buf_t buf, pnanovdb_tree_handle_t p)
Definition: PNanoVDB.h:1548
PNANOVDB_FORCE_INLINE pnanovdb_vec3_t pnanovdb_read_vec3u16(pnanovdb_buf_t buf, pnanovdb_address_t address)
Definition: PNanoVDB.h:997
PNANOVDB_FORCE_INLINE pnanovdb_uint64_t pnanovdb_leaf_pointindex_get_offset(pnanovdb_buf_t buf, pnanovdb_leaf_handle_t leaf)
Definition: PNanoVDB.h:2359
#define PNANOVDB_ROOT_TILE_OFF_KEY
Definition: PNanoVDB.h:1653
PNANOVDB_FORCE_INLINE pnanovdb_uint64_t pnanovdb_leaf_onindexmask_get_last_offset(pnanovdb_buf_t buf, pnanovdb_leaf_handle_t leaf)
Definition: PNanoVDB.h:2304
PNANOVDB_FORCE_INLINE void pnanovdb_lower_set_bbox_max(pnanovdb_buf_t buf, pnanovdb_lower_handle_t p, PNANOVDB_IN(pnanovdb_coord_t) bbox_max)
Definition: PNanoVDB.h:1783
PNANOVDB_FORCE_INLINE pnanovdb_bool_t pnanovdb_readaccessor_is_active(pnanovdb_grid_type_t grid_type, pnanovdb_buf_t buf, PNANOVDB_INOUT(pnanovdb_readaccessor_t) acc, PNANOVDB_IN(pnanovdb_coord_t) ijk)
Definition: PNanoVDB.h:3139
#define PNANOVDB_GRID_SIZE
Definition: PNanoVDB.h:1266
PNANOVDB_FORCE_INLINE pnanovdb_root_handle_t pnanovdb_tree_get_root(pnanovdb_buf_t buf, pnanovdb_tree_handle_t tree)
Definition: PNanoVDB.h:1941
pnanovdb_uint32_t grid_type
Definition: PNanoVDB.h:1255
pnanovdb_uint32_t root_tile_size
Definition: PNanoVDB.h:1860
PNANOVDB_FORCE_INLINE pnanovdb_uint32_t pnanovdb_gridblindmetadata_get_data_type(pnanovdb_buf_t buf, pnanovdb_gridblindmetadata_handle_t p)
Definition: PNanoVDB.h:1472
#define PNANOVDB_GRID_TYPE_VEC3U16
Definition: PNanoVDB.h:1118
PNANOVDB_FORCE_INLINE pnanovdb_uint32_t pnanovdb_read_uint32(pnanovdb_buf_t buf, pnanovdb_address_t address)
Definition: PNanoVDB.h:946
PNANOVDB_FORCE_INLINE pnanovdb_uint64_t pnanovdb_leaf_index_get_min_index(pnanovdb_buf_t buf, pnanovdb_address_t min_address)
Definition: PNanoVDB.h:2129
Definition: PNanoVDB.h:1849
pnanovdb_lower_handle_t lower
Definition: PNanoVDB.h:2805
#define PNANOVDB_LEAF_OFF_BBOX_MIN
Definition: PNanoVDB.h:1816
#define PNANOVDB_UPPER_OFF_FLAGS
Definition: PNanoVDB.h:1696
PNANOVDB_FORCE_INLINE void pnanovdb_write_int32(pnanovdb_buf_t buf, pnanovdb_address_t address, pnanovdb_int32_t value)
Definition: PNanoVDB.h:1054
#define PNANOVDB_GRID_OFF_DATA1
Definition: PNanoVDB.h:1284
Definition: PNanoVDB.h:1516
Definition: PNanoVDB.h:1241
#define PNANOVDB_MAP_OFF_MATF
Definition: PNanoVDB.h:1182
#define PNANOVDB_TREE_OFF_TILE_COUNT_ROOT
Definition: PNanoVDB.h:1530
#define PNANOVDB_UPPER_OFF_BBOX_MAX
Definition: PNanoVDB.h:1695
pnanovdb_upper_handle_t upper
Definition: PNanoVDB.h:2806
#define PNANOVDB_LOWER_OFF_BBOX_MAX
Definition: PNanoVDB.h:1757
Definition: PNanoVDB.h:1750
PNANOVDB_FORCE_INLINE void pnanovdb_root_tile_set_state(pnanovdb_buf_t buf, pnanovdb_root_tile_handle_t p, pnanovdb_uint32_t state)
Definition: PNanoVDB.h:1673
PNANOVDB_FORCE_INLINE pnanovdb_uint64_t pnanovdb_leaf_indexmask_get_ave_index(pnanovdb_buf_t buf, pnanovdb_address_t ave_address)
Definition: PNanoVDB.h:2170
PNANOVDB_FORCE_INLINE void pnanovdb_leaf_pointindex_set_value(pnanovdb_buf_t buf, pnanovdb_leaf_handle_t leaf, pnanovdb_uint32_t i, pnanovdb_uint32_t value)
Definition: PNanoVDB.h:2404
#define PNANOVDB_GRID_OFF_MAGIC
Definition: PNanoVDB.h:1268
PNANOVDB_FORCE_INLINE pnanovdb_address_t pnanovdb_root_get_stddev_address(pnanovdb_grid_type_t grid_type, pnanovdb_buf_t buf, pnanovdb_root_handle_t root)
Definition: PNanoVDB.h:2609
PNANOVDB_FORCE_INLINE pnanovdb_uint64_t pnanovdb_leaf_index_get_ave_index(pnanovdb_buf_t buf, pnanovdb_address_t ave_address)
Definition: PNanoVDB.h:2139
pnanovdb_uint32_t data0
Definition: PNanoVDB.h:1258
PNANOVDB_FORCE_INLINE pnanovdb_bool_t pnanovdb_uint64_any_bit(pnanovdb_uint64_t a)
Definition: PNanoVDB.h:793
pnanovdb_uint32_t lower_off_max
Definition: PNanoVDB.h:1868
pnanovdb_coord_t key
Definition: PNanoVDB.h:2803
PNANOVDB_FORCE_INLINE void pnanovdb_lower_set_table_child(pnanovdb_grid_type_t grid_type, pnanovdb_buf_t buf, pnanovdb_lower_handle_t node, pnanovdb_uint32_t n, pnanovdb_int64_t child)
Definition: PNanoVDB.h:2486
pnanovdb_uint32_t tile_count_root
Definition: PNanoVDB.h:1512
#define PNANOVDB_GRID_OFF_DATA2
Definition: PNanoVDB.h:1285
PNANOVDB_FORCE_INLINE void pnanovdb_root_set_bbox_min(pnanovdb_buf_t buf, pnanovdb_root_handle_t p, PNANOVDB_IN(pnanovdb_coord_t) bbox_min)
Definition: PNanoVDB.h:1629
pnanovdb_address_t address
Definition: PNanoVDB.h:1648
PNANOVDB_FORCE_INLINE pnanovdb_lower_handle_t pnanovdb_upper_get_child(pnanovdb_grid_type_t grid_type, pnanovdb_buf_t buf, pnanovdb_upper_handle_t upper, pnanovdb_uint32_t n)
Definition: PNanoVDB.h:2542
PNANOVDB_FORCE_INLINE pnanovdb_uint64_t pnanovdb_read_uint64(pnanovdb_buf_t buf, pnanovdb_address_t address)
Definition: PNanoVDB.h:950
#define PNANOVDB_UPPER_OFF_VALUE_MASK
Definition: PNanoVDB.h:1697
PNANOVDB_FORCE_INLINE pnanovdb_tree_handle_t pnanovdb_grid_get_tree(pnanovdb_buf_t buf, pnanovdb_grid_handle_t grid)
Definition: PNanoVDB.h:1934
PNANOVDB_FORCE_INLINE pnanovdb_uint32_t pnanovdb_leaf_onindexmask_get_value_count(pnanovdb_buf_t buf, pnanovdb_leaf_handle_t leaf)
Definition: PNanoVDB.h:2300
PNANOVDB_FORCE_INLINE pnanovdb_uint64_t pnanovdb_tree_get_node_offset_upper(pnanovdb_buf_t buf, pnanovdb_tree_handle_t p)
Definition: PNanoVDB.h:1539
#define PNANOVDB_MAP_OFF_INVMATD
Definition: PNanoVDB.h:1187
PNANOVDB_FORCE_INLINE void pnanovdb_grid_set_checksum(pnanovdb_buf_t buf, pnanovdb_grid_handle_t p, pnanovdb_uint64_t checksum)
Definition: PNanoVDB.h:1347
PNANOVDB_FORCE_INLINE pnanovdb_uint32_t pnanovdb_grid_get_grid_count(pnanovdb_buf_t buf, pnanovdb_grid_handle_t p)
Definition: PNanoVDB.h:1302
pnanovdb_uint32_t value_stride_bits
Definition: PNanoVDB.h:1857
pnanovdb_uint32_t root_off_max
Definition: PNanoVDB.h:1853
PNANOVDB_FORCE_INLINE pnanovdb_int64_t pnanovdb_uint64_diff(pnanovdb_uint64_t a, pnanovdb_uint64_t b)
Definition: PNanoVDB.h:768
PNANOVDB_FORCE_INLINE pnanovdb_bool_t pnanovdb_readaccessor_iscached2(PNANOVDB_INOUT(pnanovdb_readaccessor_t) acc, int dirty)
Definition: PNanoVDB.h:2842
PNANOVDB_FORCE_INLINE float pnanovdb_leaf_fp8_read_float(pnanovdb_buf_t buf, pnanovdb_address_t address, PNANOVDB_IN(pnanovdb_coord_t) ijk)
Definition: PNanoVDB.h:2104
pnanovdb_uint32_t root_size
Definition: PNanoVDB.h:1856
pnanovdb_uint32_t lower_off_min
Definition: PNanoVDB.h:1867
PNANOVDB_FORCE_INLINE void pnanovdb_root_tile_set_key(pnanovdb_buf_t buf, pnanovdb_root_tile_handle_t p, pnanovdb_uint64_t key)
Definition: PNanoVDB.h:1667
PNANOVDB_STATIC_CONST pnanovdb_uint32_t pnanovdb_grid_type_value_strides_bits[32]
Definition: PNanoVDB.h:1153
PNANOVDB_FORCE_INLINE pnanovdb_address_t pnanovdb_upper_get_value_address_and_level_and_cache(pnanovdb_grid_type_t grid_type, pnanovdb_buf_t buf, pnanovdb_upper_handle_t upper, PNANOVDB_IN(pnanovdb_coord_t) ijk, PNANOVDB_INOUT(pnanovdb_readaccessor_t) acc, PNANOVDB_INOUT(pnanovdb_uint32_t) level)
Definition: PNanoVDB.h:2889
PNANOVDB_FORCE_INLINE pnanovdb_uint64_t pnanovdb_grid_get_data1(pnanovdb_buf_t buf, pnanovdb_grid_handle_t p)
Definition: PNanoVDB.h:1337
#define PNANOVDB_UPPER_OFF_CHILD_MASK
Definition: PNanoVDB.h:1698
PNANOVDB_FORCE_INLINE pnanovdb_uint64_t pnanovdb_leaf_index_get_dev_index(pnanovdb_buf_t buf, pnanovdb_address_t dev_address)
Definition: PNanoVDB.h:2144
PNANOVDB_FORCE_INLINE pnanovdb_uint64_t pnanovdb_upper_get_flags(pnanovdb_buf_t buf, pnanovdb_upper_handle_t p)
Definition: PNanoVDB.h:1706
pnanovdb_address_t address
Definition: PNanoVDB.h:1610
pnanovdb_uint64_t voxel_count
Definition: PNanoVDB.h:1513
#define PNANOVDB_TREE_OFF_TILE_COUNT_LOWER
Definition: PNanoVDB.h:1528
PNANOVDB_FORCE_INLINE pnanovdb_uint32_t pnanovdb_grid_get_grid_index(pnanovdb_buf_t buf, pnanovdb_grid_handle_t p)
Definition: PNanoVDB.h:1299
PNANOVDB_FORCE_INLINE pnanovdb_coord_t pnanovdb_upper_get_bbox_min(pnanovdb_buf_t buf, pnanovdb_upper_handle_t p)
Definition: PNanoVDB.h:1700
PNANOVDB_FORCE_INLINE void pnanovdb_grid_set_first_gridblindmetadata(pnanovdb_buf_t buf, pnanovdb_grid_handle_t p, pnanovdb_gridblindmetadata_handle_t gridblindmetadata)
Definition: PNanoVDB.h:2017
pnanovdb_uint32_t leaf_off_max
Definition: PNanoVDB.h:1874
PNANOVDB_FORCE_INLINE void pnanovdb_write_double(pnanovdb_buf_t buf, pnanovdb_address_t address, double value)
Definition: PNanoVDB.h:1066
pnanovdb_address_t address
Definition: PNanoVDB.h:1750
PNANOVDB_FORCE_INLINE int pnanovdb_readaccessor_computedirty(PNANOVDB_INOUT(pnanovdb_readaccessor_t) acc, PNANOVDB_IN(pnanovdb_coord_t) ijk)
Definition: PNanoVDB.h:2852
PNANOVDB_FORCE_INLINE pnanovdb_uint64_t pnanovdb_leaf_onindex_get_dev_index(pnanovdb_buf_t buf, pnanovdb_address_t dev_address)
Definition: PNanoVDB.h:2262
PNANOVDB_FORCE_INLINE pnanovdb_uint32_t pnanovdb_readaccessor_get_dim(pnanovdb_grid_type_t grid_type, pnanovdb_buf_t buf, PNANOVDB_INOUT(pnanovdb_readaccessor_t) acc, PNANOVDB_IN(pnanovdb_coord_t) ijk)
Definition: PNanoVDB.h:3048
PNANOVDB_FORCE_INLINE void pnanovdb_tree_set_node_offset_leaf(pnanovdb_buf_t buf, pnanovdb_tree_handle_t p, pnanovdb_uint64_t node_offset_leaf)
Definition: PNanoVDB.h:1567
PNANOVDB_STATIC_CONST pnanovdb_uint32_t pnanovdb_grid_type_minmax_strides_bits[32]
Definition: PNanoVDB.h:1157
PNANOVDB_FORCE_INLINE pnanovdb_bool_t pnanovdb_upper_is_active_and_cache(pnanovdb_grid_type_t grid_type, pnanovdb_buf_t buf, pnanovdb_upper_handle_t upper, PNANOVDB_IN(pnanovdb_coord_t) ijk, PNANOVDB_INOUT(pnanovdb_readaccessor_t) acc)
Definition: PNanoVDB.h:3098
PNANOVDB_FORCE_INLINE pnanovdb_int64_t pnanovdb_lower_get_table_child(pnanovdb_grid_type_t grid_type, pnanovdb_buf_t buf, pnanovdb_lower_handle_t node, pnanovdb_uint32_t n)
Definition: PNanoVDB.h:2449
PNANOVDB_FORCE_INLINE void pnanovdb_leaf_set_value_mask(pnanovdb_buf_t buf, pnanovdb_leaf_handle_t p, pnanovdb_uint32_t bit_index, pnanovdb_bool_t value)
Definition: PNanoVDB.h:1841
Definition: PNanoVDB.h:1501
PNANOVDB_FORCE_INLINE void pnanovdb_upper_set_child(pnanovdb_grid_type_t grid_type, pnanovdb_buf_t buf, pnanovdb_upper_handle_t upper, pnanovdb_uint32_t n, pnanovdb_lower_handle_t lower)
Definition: PNanoVDB.h:2578
PNANOVDB_FORCE_INLINE pnanovdb_bool_t pnanovdb_readaccessor_iscached0(PNANOVDB_INOUT(pnanovdb_readaccessor_t) acc, int dirty)
Definition: PNanoVDB.h:2822
PNANOVDB_FORCE_INLINE pnanovdb_vec3_t pnanovdb_read_vec3u8(pnanovdb_buf_t buf, pnanovdb_address_t address)
Definition: PNanoVDB.h:1006
#define PNANOVDB_ROOT_OFF_BBOX_MIN
Definition: PNanoVDB.h:1615
#define PNANOVDB_GRID_OFF_VOXEL_SIZE
Definition: PNanoVDB.h:1278
PNANOVDB_FORCE_INLINE pnanovdb_address_t pnanovdb_leaf_get_table_address(pnanovdb_grid_type_t grid_type, pnanovdb_buf_t buf, pnanovdb_leaf_handle_t node, pnanovdb_uint32_t n)
Definition: PNanoVDB.h:2069
PNANOVDB_FORCE_INLINE pnanovdb_address_t pnanovdb_lower_get_value_address(pnanovdb_grid_type_t grid_type, pnanovdb_buf_t buf, pnanovdb_lower_handle_t lower, PNANOVDB_IN(pnanovdb_coord_t) ijk)
Definition: PNanoVDB.h:2480
#define PNANOVDB_GRID_TYPE_VEC3U8
Definition: PNanoVDB.h:1117
pnanovdb_uint32_t upper_off_table
Definition: PNanoVDB.h:1865
pnanovdb_uint64_t grid_size
Definition: PNanoVDB.h:1249
PNANOVDB_FORCE_INLINE pnanovdb_uint64_t pnanovdb_root_pointindex_get_point_range(pnanovdb_buf_t buf, pnanovdb_address_t value_address, PNANOVDB_IN(pnanovdb_coord_t) ijk, pnanovdb_uint32_t level, PNANOVDB_INOUT(pnanovdb_uint64_t) range_begin, PNANOVDB_INOUT(pnanovdb_uint64_t) range_end)
Definition: PNanoVDB.h:2741
#define PNANOVDB_ROOT_OFF_BBOX_MAX
Definition: PNanoVDB.h:1616
PNANOVDB_FORCE_INLINE pnanovdb_bool_t pnanovdb_leaf_onindexmask_get_mask_bit(pnanovdb_buf_t buf, pnanovdb_leaf_handle_t leaf, pnanovdb_uint32_t n)
Definition: PNanoVDB.h:2332
PNANOVDB_FORCE_INLINE void pnanovdb_root_tile_set_child(pnanovdb_buf_t buf, pnanovdb_root_tile_handle_t p, pnanovdb_int64_t child)
Definition: PNanoVDB.h:1670
PNANOVDB_FORCE_INLINE void pnanovdb_grid_set_data0(pnanovdb_buf_t buf, pnanovdb_grid_handle_t p, pnanovdb_uint32_t data0)
Definition: PNanoVDB.h:1386
#define PNANOVDB_GRIDBLINDMETADATA_OFF_DATA_CLASS
Definition: PNanoVDB.h:1453
pnanovdb_uint32_t leaf_size
Definition: PNanoVDB.h:1878
#define PNANOVDB_GRID_OFF_FLAGS
Definition: PNanoVDB.h:1271
PNANOVDB_FORCE_INLINE pnanovdb_uint64_t pnanovdb_tree_get_voxel_count(pnanovdb_buf_t buf, pnanovdb_tree_handle_t p)
Definition: PNanoVDB.h:1563
PNANOVDB_FORCE_INLINE void pnanovdb_tree_set_tile_count_lower(pnanovdb_buf_t buf, pnanovdb_tree_handle_t p, pnanovdb_uint32_t tile_count_lower)
Definition: PNanoVDB.h:1588
pnanovdb_uint32_t upper_size
Definition: PNanoVDB.h:1866
PNANOVDB_FORCE_INLINE void pnanovdb_leaf_onindexmask_set_mask_bit(pnanovdb_buf_t buf, pnanovdb_leaf_handle_t leaf, pnanovdb_uint32_t n, pnanovdb_bool_t v)
Definition: PNanoVDB.h:2340
PNANOVDB_FORCE_INLINE pnanovdb_coord_t pnanovdb_read_coord(pnanovdb_buf_t buf, pnanovdb_address_t address)
Definition: PNanoVDB.h:970
pnanovdb_uint32_t root_off_stddev
Definition: PNanoVDB.h:1855
PNANOVDB_FORCE_INLINE pnanovdb_bool_t pnanovdb_lower_get_child_mask(pnanovdb_buf_t buf, pnanovdb_lower_handle_t p, pnanovdb_uint32_t bit_index)
Definition: PNanoVDB.h:1775
PNANOVDB_FORCE_INLINE pnanovdb_uint32_t pnanovdb_gridblindmetadata_get_value_size(pnanovdb_buf_t buf, pnanovdb_gridblindmetadata_handle_t p)
Definition: PNanoVDB.h:1463
PNANOVDB_FORCE_INLINE void pnanovdb_lower_set_child_mask(pnanovdb_buf_t buf, pnanovdb_lower_handle_t p, pnanovdb_uint32_t bit_index, pnanovdb_bool_t value)
Definition: PNanoVDB.h:1793
#define PNANOVDB_MAP_OFF_VECF
Definition: PNanoVDB.h:1184
pnanovdb_int64_t blind_metadata_offset
Definition: PNanoVDB.h:1256
PNANOVDB_FORCE_INLINE double pnanovdb_map_get_vecd(pnanovdb_buf_t buf, pnanovdb_map_handle_t p, pnanovdb_uint32_t index)
Definition: PNanoVDB.h:1209
PNANOVDB_FORCE_INLINE pnanovdb_uint64_t pnanovdb_leaf_onindex_get_min_index(pnanovdb_buf_t buf, pnanovdb_address_t min_address)
Definition: PNanoVDB.h:2229
PNANOVDB_FORCE_INLINE pnanovdb_uint64_t pnanovdb_leaf_onindexmask_get_ave_index(pnanovdb_buf_t buf, pnanovdb_address_t ave_address)
Definition: PNanoVDB.h:2320
PNANOVDB_FORCE_INLINE pnanovdb_gridblindmetadata_handle_t pnanovdb_grid_get_gridblindmetadata(pnanovdb_buf_t buf, pnanovdb_grid_handle_t grid, pnanovdb_uint32_t index)
Definition: PNanoVDB.h:1917
PNANOVDB_FORCE_INLINE pnanovdb_uint32_t pnanovdb_tree_get_node_count_leaf(pnanovdb_buf_t buf, pnanovdb_tree_handle_t p)
Definition: PNanoVDB.h:1545
PNANOVDB_FORCE_INLINE pnanovdb_uint64_t pnanovdb_leaf_onindexmask_get_value_index(pnanovdb_buf_t buf, pnanovdb_address_t value_address, PNANOVDB_IN(pnanovdb_coord_t) ijk)
Definition: PNanoVDB.h:2328
PNANOVDB_FORCE_INLINE void pnanovdb_tree_set_node_offset_root(pnanovdb_buf_t buf, pnanovdb_tree_handle_t p, pnanovdb_uint64_t node_offset_root)
Definition: PNanoVDB.h:1576
PNANOVDB_FORCE_INLINE pnanovdb_uint32_t pnanovdb_uint32_countbits(pnanovdb_uint32_t value)
Definition: PNanoVDB.h:670
PNANOVDB_FORCE_INLINE pnanovdb_int64_t pnanovdb_grid_get_blind_metadata_offset(pnanovdb_buf_t buf, pnanovdb_grid_handle_t p)
Definition: PNanoVDB.h:1328
PNANOVDB_FORCE_INLINE double pnanovdb_grid_get_world_bbox(pnanovdb_buf_t buf, pnanovdb_grid_handle_t p, pnanovdb_uint32_t index)
Definition: PNanoVDB.h:1316
pnanovdb_coord_t bbox_min
Definition: PNanoVDB.h:1741
pnanovdb_uint32_t version
Definition: PNanoVDB.h:1245
#define PNANOVDB_LOWER_OFF_FLAGS
Definition: PNanoVDB.h:1758
PNANOVDB_FORCE_INLINE void pnanovdb_gridblindmetadata_set_data_offset(pnanovdb_buf_t buf, pnanovdb_gridblindmetadata_handle_t p, pnanovdb_int64_t data_offset)
Definition: PNanoVDB.h:1479
#define PNANOVDB_TREE_OFF_NODE_OFFSET_LOWER
Definition: PNanoVDB.h:1522
PNANOVDB_FORCE_INLINE void pnanovdb_lower_set_child(pnanovdb_grid_type_t grid_type, pnanovdb_buf_t buf, pnanovdb_lower_handle_t lower, pnanovdb_uint32_t n, pnanovdb_leaf_handle_t leaf)
Definition: PNanoVDB.h:2492
PNANOVDB_FORCE_INLINE pnanovdb_uint32_t pnanovdb_version_get_minor(pnanovdb_uint32_t version)
Definition: PNanoVDB.h:1405
Definition: PNanoVDB.h:1801
PNANOVDB_FORCE_INLINE double pnanovdb_map_get_invmatd(pnanovdb_buf_t buf, pnanovdb_map_handle_t p, pnanovdb_uint32_t index)
Definition: PNanoVDB.h:1206
PNANOVDB_FORCE_INLINE pnanovdb_uint32_t pnanovdb_uint64_countbits(pnanovdb_uint64_t value)
Definition: PNanoVDB.h:690
#define PNANOVDB_UPPER_OFF_BBOX_MIN
Definition: PNanoVDB.h:1694
PNANOVDB_FORCE_INLINE void pnanovdb_gridblindmetadata_set_data_class(pnanovdb_buf_t buf, pnanovdb_gridblindmetadata_handle_t p, pnanovdb_uint32_t data_class)
Definition: PNanoVDB.h:1491
Definition: PNanoVDB.h:1639
PNANOVDB_FORCE_INLINE pnanovdb_address_t pnanovdb_lower_get_stddev_address(pnanovdb_grid_type_t grid_type, pnanovdb_buf_t buf, pnanovdb_lower_handle_t node)
Definition: PNanoVDB.h:2437
#define PNANOVDB_TREE_OFF_TILE_COUNT_UPPER
Definition: PNanoVDB.h:1529
PNANOVDB_FORCE_INLINE void pnanovdb_upper_set_child_mask(pnanovdb_buf_t buf, pnanovdb_upper_handle_t p, pnanovdb_uint32_t bit_index, pnanovdb_bool_t value)
Definition: PNanoVDB.h:1731
#define PNANOVDB_TREE_OFF_NODE_OFFSET_ROOT
Definition: PNanoVDB.h:1524
PNANOVDB_FORCE_INLINE pnanovdb_uint32_t pnanovdb_grid_get_data0(pnanovdb_buf_t buf, pnanovdb_grid_handle_t p)
Definition: PNanoVDB.h:1334
#define PNANOVDB_ROOT_TILE_OFF_STATE
Definition: PNanoVDB.h:1655
PNANOVDB_FORCE_INLINE pnanovdb_uint64_t pnanovdb_leaf_pointindex_get_value(pnanovdb_buf_t buf, pnanovdb_leaf_handle_t leaf, pnanovdb_uint32_t i)
Definition: PNanoVDB.h:2377
#define PNANOVDB_MAP_OFF_TAPERF
Definition: PNanoVDB.h:1185
pnanovdb_uint32_t grid_index
Definition: PNanoVDB.h:1247
pnanovdb_uint64_t node_offset_lower
Definition: PNanoVDB.h:1504
PNANOVDB_FORCE_INLINE pnanovdb_uint32_t pnanovdb_tree_get_tile_count_upper(pnanovdb_buf_t buf, pnanovdb_tree_handle_t p)
Definition: PNanoVDB.h:1557
pnanovdb_uint32_t node_count_leaf
Definition: PNanoVDB.h:1507
#define PNANOVDB_LOWER_OFF_VALUE_MASK
Definition: PNanoVDB.h:1759
PNANOVDB_FORCE_INLINE pnanovdb_uint32_t pnanovdb_grid_get_grid_name(pnanovdb_buf_t buf, pnanovdb_grid_handle_t p, pnanovdb_uint32_t index)
Definition: PNanoVDB.h:1308
pnanovdb_uint64_t checksum
Definition: PNanoVDB.h:1244
PNANOVDB_FORCE_INLINE pnanovdb_coord_t pnanovdb_upper_get_bbox_max(pnanovdb_buf_t buf, pnanovdb_upper_handle_t p)
Definition: PNanoVDB.h:1703
pnanovdb_uint32_t pad1
Definition: PNanoVDB.h:1644
pnanovdb_uint32_t grid_count
Definition: PNanoVDB.h:1248
float taperf
Definition: PNanoVDB.h:1170
pnanovdb_uint64_t flags
Definition: PNanoVDB.h:1743
PNANOVDB_FORCE_INLINE void pnanovdb_write_vec3(pnanovdb_buf_t buf, pnanovdb_address_t address, PNANOVDB_IN(pnanovdb_vec3_t) value)
Definition: PNanoVDB.h:1076
#define PNANOVDB_LOWER_OFF_CHILD_MASK
Definition: PNanoVDB.h:1760
PNANOVDB_FORCE_INLINE pnanovdb_uint32_t pnanovdb_tree_get_tile_count_lower(pnanovdb_buf_t buf, pnanovdb_tree_handle_t p)
Definition: PNanoVDB.h:1554
PNANOVDB_FORCE_INLINE pnanovdb_address_t pnanovdb_upper_get_value_address(pnanovdb_grid_type_t grid_type, pnanovdb_buf_t buf, pnanovdb_upper_handle_t upper, PNANOVDB_IN(pnanovdb_coord_t) ijk)
Definition: PNanoVDB.h:2566
PNANOVDB_FORCE_INLINE pnanovdb_uint64_t pnanovdb_leaf_onindex_get_ave_index(pnanovdb_buf_t buf, pnanovdb_address_t ave_address)
Definition: PNanoVDB.h:2251
pnanovdb_uint32_t lower_off_ave
Definition: PNanoVDB.h:1869
pnanovdb_uint32_t bbox_dif_and_flags
Definition: PNanoVDB.h:1804
PNANOVDB_FORCE_INLINE pnanovdb_coord_t pnanovdb_lower_get_bbox_max(pnanovdb_buf_t buf, pnanovdb_lower_handle_t p)
Definition: PNanoVDB.h:1765
#define PNANOVDB_GRIDBLINDMETADATA_OFF_VALUE_COUNT
Definition: PNanoVDB.h:1450
pnanovdb_address_t address
Definition: PNanoVDB.h:1263
PNANOVDB_FORCE_INLINE float pnanovdb_dither_lookup(pnanovdb_bool_t enabled, int offset)
Definition: PNanoVDB.h:3388
pnanovdb_coord_t bbox_min
Definition: PNanoVDB.h:1803
PNANOVDB_FORCE_INLINE float pnanovdb_root_fpn_read_float(pnanovdb_buf_t buf, pnanovdb_address_t address, PNANOVDB_IN(pnanovdb_coord_t) ijk, pnanovdb_uint32_t level)
Definition: PNanoVDB.h:2699
PNANOVDB_FORCE_INLINE pnanovdb_address_t pnanovdb_lower_get_value_address_and_level(pnanovdb_grid_type_t grid_type, pnanovdb_buf_t buf, pnanovdb_lower_handle_t lower, PNANOVDB_IN(pnanovdb_coord_t) ijk, PNANOVDB_INOUT(pnanovdb_uint32_t) level)
Definition: PNanoVDB.h:2462
PNANOVDB_FORCE_INLINE pnanovdb_uint64_t pnanovdb_leaf_index_get_value_index(pnanovdb_buf_t buf, pnanovdb_address_t value_address, PNANOVDB_IN(pnanovdb_coord_t) ijk)
Definition: PNanoVDB.h:2149
PNANOVDB_FORCE_INLINE void pnanovdb_upper_set_value_mask(pnanovdb_buf_t buf, pnanovdb_upper_handle_t p, pnanovdb_uint32_t bit_index, pnanovdb_bool_t value)
Definition: PNanoVDB.h:1724
PNANOVDB_FORCE_INLINE void pnanovdb_gridblindmetadata_set_name(pnanovdb_buf_t buf, pnanovdb_gridblindmetadata_handle_t p, pnanovdb_uint32_t index, pnanovdb_uint32_t name)
Definition: PNanoVDB.h:1497
PNANOVDB_FORCE_INLINE pnanovdb_coord_t pnanovdb_leaf_get_bbox_min(pnanovdb_buf_t buf, pnanovdb_leaf_handle_t p)
Definition: PNanoVDB.h:1824
pnanovdb_uint32_t blind_metadata_count
Definition: PNanoVDB.h:1257
PNANOVDB_FORCE_INLINE void pnanovdb_map_set_taperd(pnanovdb_buf_t buf, pnanovdb_map_handle_t p, pnanovdb_uint32_t index, double taperd)
Definition: PNanoVDB.h:1237
PNANOVDB_FORCE_INLINE pnanovdb_address_t pnanovdb_upper_get_value_address_and_cache(pnanovdb_grid_type_t grid_type, pnanovdb_buf_t buf, pnanovdb_upper_handle_t upper, PNANOVDB_IN(pnanovdb_coord_t) ijk, PNANOVDB_INOUT(pnanovdb_readaccessor_t) acc)
Definition: PNanoVDB.h:2908
PNANOVDB_FORCE_INLINE void pnanovdb_tree_set_node_count_upper(pnanovdb_buf_t buf, pnanovdb_tree_handle_t p, pnanovdb_uint32_t node_count_upper)
Definition: PNanoVDB.h:1585
pnanovdb_uint32_t leaf_off_min
Definition: PNanoVDB.h:1873
PNANOVDB_FORCE_INLINE pnanovdb_uint32_t pnanovdb_leaf_get_dim_and_cache(pnanovdb_grid_type_t grid_type, pnanovdb_buf_t buf, pnanovdb_leaf_handle_t leaf, PNANOVDB_IN(pnanovdb_coord_t) ijk, PNANOVDB_INOUT(pnanovdb_readaccessor_t) acc)
Definition: PNanoVDB.h:2985
PNANOVDB_FORCE_INLINE pnanovdb_address_t pnanovdb_root_get_max_address(pnanovdb_grid_type_t grid_type, pnanovdb_buf_t buf, pnanovdb_root_handle_t root)
Definition: PNanoVDB.h:2597
PNANOVDB_FORCE_INLINE pnanovdb_bool_t pnanovdb_root_tile_get_child_mask(pnanovdb_buf_t buf, pnanovdb_root_tile_handle_t tile)
Definition: PNanoVDB.h:1964
PNANOVDB_FORCE_INLINE pnanovdb_uint64_t pnanovdb_gridblindmetadata_get_value_count(pnanovdb_buf_t buf, pnanovdb_gridblindmetadata_handle_t p)
Definition: PNanoVDB.h:1460
#define PNANOVDB_TREE_OFF_NODE_COUNT_LEAF
Definition: PNanoVDB.h:1525
PNANOVDB_FORCE_INLINE void pnanovdb_grid_set_grid_index(pnanovdb_buf_t buf, pnanovdb_grid_handle_t p, pnanovdb_uint32_t grid_index)
Definition: PNanoVDB.h:1356
PNANOVDB_STATIC_CONST pnanovdb_uint32_t pnanovdb_grid_type_minmax_aligns_bits[32]
Definition: PNanoVDB.h:1159
PNANOVDB_FORCE_INLINE pnanovdb_bool_t pnanovdb_lower_is_active_and_cache(pnanovdb_grid_type_t grid_type, pnanovdb_buf_t buf, pnanovdb_lower_handle_t lower, PNANOVDB_IN(pnanovdb_coord_t) ijk, PNANOVDB_INOUT(pnanovdb_readaccessor_t) acc)
Definition: PNanoVDB.h:3080
pnanovdb_uint32_t upper_off_min
Definition: PNanoVDB.h:1861
PNANOVDB_FORCE_INLINE void pnanovdb_grid_set_flags(pnanovdb_buf_t buf, pnanovdb_grid_handle_t p, pnanovdb_uint32_t flags)
Definition: PNanoVDB.h:1353
PNANOVDB_FORCE_INLINE pnanovdb_bool_t pnanovdb_readaccessor_iscached1(PNANOVDB_INOUT(pnanovdb_readaccessor_t) acc, int dirty)
Definition: PNanoVDB.h:2832
pnanovdb_uint32_t table_stride
Definition: PNanoVDB.h:1858
#define PNANOVDB_GRID_OFF_GRID_COUNT
Definition: PNanoVDB.h:1273
PNANOVDB_FORCE_INLINE pnanovdb_address_t pnanovdb_readaccessor_get_value_address_bit(pnanovdb_grid_type_t grid_type, pnanovdb_buf_t buf, PNANOVDB_INOUT(pnanovdb_readaccessor_t) acc, PNANOVDB_IN(pnanovdb_coord_t) ijk, PNANOVDB_INOUT(pnanovdb_uint32_t) bit_index)
Definition: PNanoVDB.h:2975
pnanovdb_uint32_t upper_off_max
Definition: PNanoVDB.h:1862
PNANOVDB_FORCE_INLINE pnanovdb_coord_t pnanovdb_root_get_bbox_max(pnanovdb_buf_t buf, pnanovdb_root_handle_t p)
Definition: PNanoVDB.h:1622
#define PNANOVDB_GRIDBLINDMETADATA_OFF_DATA_TYPE
Definition: PNanoVDB.h:1454
Definition: PNanoVDB.h:1601
PNANOVDB_FORCE_INLINE pnanovdb_uint64_t pnanovdb_grid_get_magic(pnanovdb_buf_t buf, pnanovdb_grid_handle_t p)
Definition: PNanoVDB.h:1287
PNANOVDB_FORCE_INLINE pnanovdb_uint32_t pnanovdb_root_get_dim_and_cache(pnanovdb_grid_type_t grid_type, pnanovdb_buf_t buf, pnanovdb_root_handle_t root, PNANOVDB_IN(pnanovdb_coord_t) ijk, PNANOVDB_INOUT(pnanovdb_readaccessor_t) acc)
Definition: PNanoVDB.h:3026
PNANOVDB_FORCE_INLINE pnanovdb_uint32_t pnanovdb_version_get_major(pnanovdb_uint32_t version)
Definition: PNanoVDB.h:1401
PNANOVDB_FORCE_INLINE pnanovdb_address_t pnanovdb_root_get_ave_address(pnanovdb_grid_type_t grid_type, pnanovdb_buf_t buf, pnanovdb_root_handle_t root)
Definition: PNanoVDB.h:2603
MatType scale(const Vec3< typename MatType::value_type > &s)
Return a matrix that scales by s.
Definition: Mat.h:615
PNANOVDB_FORCE_INLINE pnanovdb_uint64_t pnanovdb_root_pointindex_get_point_address_range(pnanovdb_buf_t buf, pnanovdb_grid_type_t value_type, pnanovdb_address_t value_address, pnanovdb_address_t blindmetadata_value_address, PNANOVDB_IN(pnanovdb_coord_t) ijk, pnanovdb_uint32_t level, PNANOVDB_INOUT(pnanovdb_address_t) address_begin, PNANOVDB_INOUT(pnanovdb_address_t) address_end)
Definition: PNanoVDB.h:2770
PNANOVDB_FORCE_INLINE pnanovdb_uint64_t pnanovdb_lower_get_flags(pnanovdb_buf_t buf, pnanovdb_lower_handle_t p)
Definition: PNanoVDB.h:1768
PNANOVDB_FORCE_INLINE pnanovdb_uint64_t pnanovdb_tree_get_node_offset_leaf(pnanovdb_buf_t buf, pnanovdb_tree_handle_t p)
Definition: PNanoVDB.h:1533
PNANOVDB_FORCE_INLINE pnanovdb_leaf_handle_t pnanovdb_lower_get_child(pnanovdb_grid_type_t grid_type, pnanovdb_buf_t buf, pnanovdb_lower_handle_t lower, pnanovdb_uint32_t n)
Definition: PNanoVDB.h:2455
#define PNANOVDB_LEAF_OFF_BBOX_DIF_AND_FLAGS
Definition: PNanoVDB.h:1817
PNANOVDB_FORCE_INLINE void pnanovdb_map_set_taperf(pnanovdb_buf_t buf, pnanovdb_map_handle_t p, pnanovdb_uint32_t index, float taperf)
Definition: PNanoVDB.h:1225
PNANOVDB_FORCE_INLINE void pnanovdb_map_set_invmatd(pnanovdb_buf_t buf, pnanovdb_map_handle_t p, pnanovdb_uint32_t index, double invmatd)
Definition: PNanoVDB.h:1231
PNANOVDB_FORCE_INLINE pnanovdb_uint64_t pnanovdb_root_tile_get_key(pnanovdb_buf_t buf, pnanovdb_root_tile_handle_t p)
Definition: PNanoVDB.h:1657
PNANOVDB_FORCE_INLINE pnanovdb_address_t pnanovdb_upper_get_min_address(pnanovdb_grid_type_t grid_type, pnanovdb_buf_t buf, pnanovdb_upper_handle_t node)
Definition: PNanoVDB.h:2506
PNANOVDB_FORCE_INLINE pnanovdb_uint64_t pnanovdb_leaf_onindexmask_get_max_index(pnanovdb_buf_t buf, pnanovdb_address_t max_address)
Definition: PNanoVDB.h:2316
PNANOVDB_FORCE_INLINE void pnanovdb_upper_set_table_child(pnanovdb_grid_type_t grid_type, pnanovdb_buf_t buf, pnanovdb_upper_handle_t node, pnanovdb_uint32_t n, pnanovdb_int64_t child)
Definition: PNanoVDB.h:2572
pnanovdb_leaf_handle_t leaf
Definition: PNanoVDB.h:2804
PNANOVDB_FORCE_INLINE pnanovdb_address_t pnanovdb_leaf_get_max_address(pnanovdb_grid_type_t grid_type, pnanovdb_buf_t buf, pnanovdb_leaf_handle_t node)
Definition: PNanoVDB.h:2051
pnanovdb_address_t address
Definition: PNanoVDB.h:1177
PNANOVDB_FORCE_INLINE pnanovdb_address_t pnanovdb_readaccessor_get_value_address(pnanovdb_grid_type_t grid_type, pnanovdb_buf_t buf, PNANOVDB_INOUT(pnanovdb_readaccessor_t) acc, PNANOVDB_IN(pnanovdb_coord_t) ijk)
Definition: PNanoVDB.h:2969
PNANOVDB_FORCE_INLINE pnanovdb_root_tile_handle_t pnanovdb_root_get_tile(pnanovdb_grid_type_t grid_type, pnanovdb_root_handle_t root, pnanovdb_uint32_t n)
Definition: PNanoVDB.h:1949
#define PNANOVDB_GRID_TYPE_CAP
Definition: PNanoVDB.h:1122
Definition: PNanoVDB.h:1810
PNANOVDB_FORCE_INLINE pnanovdb_bool_t pnanovdb_leaf_indexmask_has_stats(pnanovdb_buf_t buf, pnanovdb_leaf_handle_t leaf)
Definition: PNanoVDB.h:2158
pnanovdb_uint64_t data2
Definition: PNanoVDB.h:1260
PNANOVDB_FORCE_INLINE pnanovdb_vec3_t pnanovdb_map_apply_inverse(pnanovdb_buf_t buf, pnanovdb_map_handle_t map, PNANOVDB_IN(pnanovdb_vec3_t) src)
Definition: PNanoVDB.h:3177
PNANOVDB_FORCE_INLINE pnanovdb_vec3_t pnanovdb_map_apply_jacobi(pnanovdb_buf_t buf, pnanovdb_map_handle_t map, PNANOVDB_IN(pnanovdb_vec3_t) src)
Definition: PNanoVDB.h:3189
#define PNANOVDB_GRID_TYPE_FLOAT
Definition: PNanoVDB.h:1094
pnanovdb_uint32_t lower_off_table
Definition: PNanoVDB.h:1871
PNANOVDB_FORCE_INLINE void pnanovdb_grid_set_world_bbox(pnanovdb_buf_t buf, pnanovdb_grid_handle_t p, pnanovdb_uint32_t index, double world_bbox)
Definition: PNanoVDB.h:1368
#define PNANOVDB_GRIDBLINDMETADATA_OFF_NAME
Definition: PNanoVDB.h:1455
#define PNANOVDB_GRIDBLINDMETADATA_SIZE
Definition: PNanoVDB.h:1447
PNANOVDB_FORCE_INLINE float pnanovdb_leaf_fp_read_float(pnanovdb_buf_t buf, pnanovdb_address_t address, PNANOVDB_IN(pnanovdb_coord_t) ijk, pnanovdb_uint32_t value_log_bits)
Definition: PNanoVDB.h:2083
pnanovdb_uint32_t table_size
Definition: PNanoVDB.h:1605
PNANOVDB_FORCE_INLINE void pnanovdb_grid_set_data2(pnanovdb_buf_t buf, pnanovdb_grid_handle_t p, pnanovdb_uint64_t data2)
Definition: PNanoVDB.h:1392
PNANOVDB_FORCE_INLINE float pnanovdb_map_get_matf(pnanovdb_buf_t buf, pnanovdb_map_handle_t p, pnanovdb_uint32_t index)
Definition: PNanoVDB.h:1191
PNANOVDB_FORCE_INLINE pnanovdb_bool_t pnanovdb_upper_get_child_mask(pnanovdb_buf_t buf, pnanovdb_upper_handle_t p, pnanovdb_uint32_t bit_index)
Definition: PNanoVDB.h:1713
PNANOVDB_STATIC_CONST pnanovdb_uint32_t pnanovdb_grid_type_table_strides_bits[32]
Definition: PNanoVDB.h:1155
PNANOVDB_FORCE_INLINE void pnanovdb_write_uint64(pnanovdb_buf_t buf, pnanovdb_address_t address, pnanovdb_uint64_t value)
Definition: PNanoVDB.h:1050
PNANOVDB_FORCE_INLINE void pnanovdb_write_uint32(pnanovdb_buf_t buf, pnanovdb_address_t address, pnanovdb_uint32_t value)
Definition: PNanoVDB.h:1046
#define PNANOVDB_GRIDBLINDMETADATA_OFF_DATA_OFFSET
Definition: PNanoVDB.h:1449
PNANOVDB_FORCE_INLINE void pnanovdb_tree_set_node_count_leaf(pnanovdb_buf_t buf, pnanovdb_tree_handle_t p, pnanovdb_uint32_t node_count_leaf)
Definition: PNanoVDB.h:1579
PNANOVDB_FORCE_INLINE void pnanovdb_grid_set_voxel_size(pnanovdb_buf_t buf, pnanovdb_grid_handle_t p, pnanovdb_uint32_t index, double voxel_size)
Definition: PNanoVDB.h:1371
PNANOVDB_FORCE_INLINE void pnanovdb_lower_set_bbox_min(pnanovdb_buf_t buf, pnanovdb_lower_handle_t p, PNANOVDB_IN(pnanovdb_coord_t) bbox_min)
Definition: PNanoVDB.h:1780
PNANOVDB_FORCE_INLINE pnanovdb_uint64_t pnanovdb_grid_get_checksum(pnanovdb_buf_t buf, pnanovdb_grid_handle_t p)
Definition: PNanoVDB.h:1290
#define PNANOVDB_LEAF_TABLE_NEG_OFF_BBOX_DIF_AND_FLAGS
Definition: PNanoVDB.h:1820
#define PNANOVDB_GRID_OFF_GRID_TYPE
Definition: PNanoVDB.h:1280
PNANOVDB_FORCE_INLINE pnanovdb_uint64_t pnanovdb_leaf_pointindex_get_last(pnanovdb_buf_t buf, pnanovdb_leaf_handle_t leaf, pnanovdb_uint32_t i)
Definition: PNanoVDB.h:2372
#define PNANOVDB_LOWER_OFF_BBOX_MIN
Definition: PNanoVDB.h:1756
PNANOVDB_FORCE_INLINE pnanovdb_uint64_t pnanovdb_grid_get_data2(pnanovdb_buf_t buf, pnanovdb_grid_handle_t p)
Definition: PNanoVDB.h:1340
Definition: PNanoVDB.h:1610
PNANOVDB_FORCE_INLINE void pnanovdb_gridblindmetadata_set_semantic(pnanovdb_buf_t buf, pnanovdb_gridblindmetadata_handle_t p, pnanovdb_uint32_t semantic)
Definition: PNanoVDB.h:1488
pnanovdb_address_t address
Definition: PNanoVDB.h:1688
PNANOVDB_FORCE_INLINE pnanovdb_address_t pnanovdb_lower_get_ave_address(pnanovdb_grid_type_t grid_type, pnanovdb_buf_t buf, pnanovdb_lower_handle_t node)
Definition: PNanoVDB.h:2431
PNANOVDB_FORCE_INLINE pnanovdb_uint64_t pnanovdb_leaf_onindex_get_max_index(pnanovdb_buf_t buf, pnanovdb_address_t max_address)
Definition: PNanoVDB.h:2240
PNANOVDB_FORCE_INLINE void pnanovdb_tree_set_voxel_count(pnanovdb_buf_t buf, pnanovdb_tree_handle_t p, pnanovdb_uint64_t voxel_count)
Definition: PNanoVDB.h:1597
PNANOVDB_FORCE_INLINE pnanovdb_address_t pnanovdb_readaccessor_get_value_address_and_level(pnanovdb_grid_type_t grid_type, pnanovdb_buf_t buf, PNANOVDB_INOUT(pnanovdb_readaccessor_t) acc, PNANOVDB_IN(pnanovdb_coord_t) ijk, PNANOVDB_INOUT(pnanovdb_uint32_t) level)
Definition: PNanoVDB.h:2944
PNANOVDB_FORCE_INLINE void pnanovdb_write_int64(pnanovdb_buf_t buf, pnanovdb_address_t address, pnanovdb_int64_t value)
Definition: PNanoVDB.h:1058
PNANOVDB_FORCE_INLINE void pnanovdb_grid_set_version(pnanovdb_buf_t buf, pnanovdb_grid_handle_t p, pnanovdb_uint32_t version)
Definition: PNanoVDB.h:1350
#define PNANOVDB_LEAF_TABLE_NEG_OFF_MINIMUM
Definition: PNanoVDB.h:1821
PNANOVDB_FORCE_INLINE pnanovdb_uint64_t pnanovdb_leaf_onindexmask_get_dev_index(pnanovdb_buf_t buf, pnanovdb_address_t dev_address)
Definition: PNanoVDB.h:2324
PNANOVDB_FORCE_INLINE pnanovdb_uint32_t pnanovdb_uint64_to_uint32_lsr(pnanovdb_uint64_t a, pnanovdb_uint32_t b)
Definition: PNanoVDB.h:778
#define PNANOVDB_GRID_OFF_VERSION
Definition: PNanoVDB.h:1270
pnanovdb_uint32_t leaf_off_table
Definition: PNanoVDB.h:1877
pnanovdb_coord_t bbox_min
Definition: PNanoVDB.h:1679
PNANOVDB_FORCE_INLINE pnanovdb_uint32_t pnanovdb_root_tile_get_state(pnanovdb_buf_t buf, pnanovdb_root_tile_handle_t p)
Definition: PNanoVDB.h:1663
pnanovdb_uint32_t root_off_background
Definition: PNanoVDB.h:1851
PNANOVDB_FORCE_INLINE pnanovdb_coord_t pnanovdb_lower_get_bbox_min(pnanovdb_buf_t buf, pnanovdb_lower_handle_t p)
Definition: PNanoVDB.h:1762
PNANOVDB_FORCE_INLINE pnanovdb_int32_t pnanovdb_read_int32(pnanovdb_buf_t buf, pnanovdb_address_t address)
Definition: PNanoVDB.h:954
PNANOVDB_FORCE_INLINE void pnanovdb_gridblindmetadata_set_data_type(pnanovdb_buf_t buf, pnanovdb_gridblindmetadata_handle_t p, pnanovdb_uint32_t data_type)
Definition: PNanoVDB.h:1494
PNANOVDB_FORCE_INLINE pnanovdb_uint32_t pnanovdb_grid_get_version(pnanovdb_buf_t buf, pnanovdb_grid_handle_t p)
Definition: PNanoVDB.h:1293
PNANOVDB_FORCE_INLINE pnanovdb_address_t pnanovdb_upper_get_max_address(pnanovdb_grid_type_t grid_type, pnanovdb_buf_t buf, pnanovdb_upper_handle_t node)
Definition: PNanoVDB.h:2512
Definition: PNanoVDB.h:1263
PNANOVDB_FORCE_INLINE pnanovdb_bool_t pnanovdb_leaf_is_active_and_cache(pnanovdb_grid_type_t grid_type, pnanovdb_buf_t buf, pnanovdb_leaf_handle_t leaf, PNANOVDB_IN(pnanovdb_coord_t) ijk, PNANOVDB_INOUT(pnanovdb_readaccessor_t) acc)
Definition: PNanoVDB.h:3074
Definition: PNanoVDB.h:1177
PNANOVDB_FORCE_INLINE float pnanovdb_root_fp8_read_float(pnanovdb_buf_t buf, pnanovdb_address_t address, PNANOVDB_IN(pnanovdb_coord_t) ijk, pnanovdb_uint32_t level)
Definition: PNanoVDB.h:2671
PNANOVDB_FORCE_INLINE void pnanovdb_tree_set_node_offset_upper(pnanovdb_buf_t buf, pnanovdb_tree_handle_t p, pnanovdb_uint64_t node_offset_upper)
Definition: PNanoVDB.h:1573
PNANOVDB_FORCE_INLINE pnanovdb_uint32_t pnanovdb_tree_get_node_count_upper(pnanovdb_buf_t buf, pnanovdb_tree_handle_t p)
Definition: PNanoVDB.h:1551
PNANOVDB_FORCE_INLINE pnanovdb_bool_t pnanovdb_upper_get_value_mask(pnanovdb_buf_t buf, pnanovdb_upper_handle_t p, pnanovdb_uint32_t bit_index)
Definition: PNanoVDB.h:1709
PNANOVDB_FORCE_INLINE pnanovdb_bool_t pnanovdb_leaf_index_has_stats(pnanovdb_buf_t buf, pnanovdb_leaf_handle_t leaf)
Definition: PNanoVDB.h:2124
PNANOVDB_FORCE_INLINE pnanovdb_address_t pnanovdb_root_get_min_address(pnanovdb_grid_type_t grid_type, pnanovdb_buf_t buf, pnanovdb_root_handle_t root)
Definition: PNanoVDB.h:2591
pnanovdb_uint32_t upper_off_stddev
Definition: PNanoVDB.h:1864
#define PNANOVDB_GRIDBLINDMETADATA_OFF_VALUE_SIZE
Definition: PNanoVDB.h:1451
PNANOVDB_FORCE_INLINE pnanovdb_address_t pnanovdb_upper_get_ave_address(pnanovdb_grid_type_t grid_type, pnanovdb_buf_t buf, pnanovdb_upper_handle_t node)
Definition: PNanoVDB.h:2518
PNANOVDB_FORCE_INLINE void pnanovdb_map_set_invmatf(pnanovdb_buf_t buf, pnanovdb_map_handle_t p, pnanovdb_uint32_t index, float invmatf)
Definition: PNanoVDB.h:1219
PNANOVDB_FORCE_INLINE pnanovdb_int64_t pnanovdb_gridblindmetadata_get_data_offset(pnanovdb_buf_t buf, pnanovdb_gridblindmetadata_handle_t p)
Definition: PNanoVDB.h:1457
PNANOVDB_FORCE_INLINE pnanovdb_uint64_t pnanovdb_leaf_pointindex_get_first(pnanovdb_buf_t buf, pnanovdb_leaf_handle_t leaf, pnanovdb_uint32_t i)
Definition: PNanoVDB.h:2367
#define PNANOVDB_ROOT_TILE_OFF_CHILD
Definition: PNanoVDB.h:1654
PNANOVDB_FORCE_INLINE void pnanovdb_upper_set_bbox_max(pnanovdb_buf_t buf, pnanovdb_upper_handle_t p, PNANOVDB_IN(pnanovdb_coord_t) bbox_max)
Definition: PNanoVDB.h:1721
#define PNANOVDB_GRID_OFF_DATA0
Definition: PNanoVDB.h:1283
PNANOVDB_FORCE_INLINE pnanovdb_vec3_t pnanovdb_read_vec3(pnanovdb_buf_t buf, pnanovdb_address_t address)
Definition: PNanoVDB.h:978
PNANOVDB_FORCE_INLINE pnanovdb_uint64_t pnanovdb_leaf_indexmask_get_dev_index(pnanovdb_buf_t buf, pnanovdb_address_t dev_address)
Definition: PNanoVDB.h:2174
pnanovdb_uint32_t root_tile_off_value
Definition: PNanoVDB.h:1859
PNANOVDB_FORCE_INLINE double pnanovdb_grid_get_voxel_size(pnanovdb_buf_t buf, pnanovdb_grid_handle_t p, pnanovdb_uint32_t index)
Definition: PNanoVDB.h:1319
PNANOVDB_FORCE_INLINE pnanovdb_uint64_t pnanovdb_leaf_indexmask_get_max_index(pnanovdb_buf_t buf, pnanovdb_address_t max_address)
Definition: PNanoVDB.h:2166
PNANOVDB_FORCE_INLINE void pnanovdb_leaf_pointindex_set_value_only(pnanovdb_buf_t buf, pnanovdb_leaf_handle_t leaf, pnanovdb_uint32_t i, pnanovdb_uint32_t value)
Definition: PNanoVDB.h:2381
PNANOVDB_FORCE_INLINE void pnanovdb_tree_set_node_count_lower(pnanovdb_buf_t buf, pnanovdb_tree_handle_t p, pnanovdb_uint32_t node_count_lower)
Definition: PNanoVDB.h:1582
PNANOVDB_FORCE_INLINE pnanovdb_bool_t pnanovdb_leaf_onindexmask_has_stats(pnanovdb_buf_t buf, pnanovdb_leaf_handle_t leaf)
Definition: PNanoVDB.h:2308
#define PNANOVDB_LEAF_OFF_VALUE_MASK
Definition: PNanoVDB.h:1818
PNANOVDB_FORCE_INLINE void pnanovdb_leaf_set_bbox_dif_and_flags(pnanovdb_buf_t buf, pnanovdb_leaf_handle_t p, pnanovdb_uint32_t bbox_dif_and_flags)
Definition: PNanoVDB.h:1838
PNANOVDB_FORCE_INLINE pnanovdb_uint32_t pnanovdb_read_uint16(pnanovdb_buf_t buf, pnanovdb_address_t address)
Definition: PNanoVDB.h:987
PNANOVDB_FORCE_INLINE pnanovdb_uint64_t pnanovdb_leaf_onindex_get_value_index(pnanovdb_buf_t buf, pnanovdb_address_t value_address, PNANOVDB_IN(pnanovdb_coord_t) ijk)
Definition: PNanoVDB.h:2273
#define PNANOVDB_GRID_OFF_BLIND_METADATA_OFFSET
Definition: PNanoVDB.h:1281
PNANOVDB_FORCE_INLINE pnanovdb_uint64_t pnanovdb_tree_get_node_offset_root(pnanovdb_buf_t buf, pnanovdb_tree_handle_t p)
Definition: PNanoVDB.h:1542
pnanovdb_uint32_t tile_count_upper
Definition: PNanoVDB.h:1511
Definition: PNanoVDB.h:1677
PNANOVDB_FORCE_INLINE pnanovdb_uint64_t pnanovdb_leaf_pointindex_get_point_count(pnanovdb_buf_t buf, pnanovdb_leaf_handle_t leaf)
Definition: PNanoVDB.h:2363
PNANOVDB_FORCE_INLINE float pnanovdb_leaf_fp16_read_float(pnanovdb_buf_t buf, pnanovdb_address_t address, PNANOVDB_IN(pnanovdb_coord_t) ijk)
Definition: PNanoVDB.h:2109
PNANOVDB_FORCE_INLINE pnanovdb_uint32_t pnanovdb_leaf_onindex_get_value_count(pnanovdb_buf_t buf, pnanovdb_leaf_handle_t leaf)
Definition: PNanoVDB.h:2209
PNANOVDB_FORCE_INLINE void pnanovdb_gridblindmetadata_set_value_size(pnanovdb_buf_t buf, pnanovdb_gridblindmetadata_handle_t p, pnanovdb_uint32_t value_size)
Definition: PNanoVDB.h:1485
pnanovdb_uint64_t node_offset_leaf
Definition: PNanoVDB.h:1503
PNANOVDB_FORCE_INLINE pnanovdb_address_t pnanovdb_root_get_value_address_bit(pnanovdb_grid_type_t grid_type, pnanovdb_buf_t buf, pnanovdb_root_handle_t root, PNANOVDB_IN(pnanovdb_coord_t) ijk, PNANOVDB_INOUT(pnanovdb_uint32_t) bit_index)
Definition: PNanoVDB.h:2649
PNANOVDB_FORCE_INLINE pnanovdb_uint64_t pnanovdb_uint64_offset(pnanovdb_uint64_t a, pnanovdb_uint32_t b)
Definition: PNanoVDB.h:763
PNANOVDB_FORCE_INLINE pnanovdb_int64_t pnanovdb_upper_get_table_child(pnanovdb_grid_type_t grid_type, pnanovdb_buf_t buf, pnanovdb_upper_handle_t node, pnanovdb_uint32_t n)
Definition: PNanoVDB.h:2536
#define PNANOVDB_MAP_OFF_VECD
Definition: PNanoVDB.h:1188
#define PNANOVDB_ROOT_OFF_TABLE_SIZE
Definition: PNanoVDB.h:1617
pnanovdb_uint64_t node_offset_root
Definition: PNanoVDB.h:1506
PNANOVDB_FORCE_INLINE pnanovdb_bool_t pnanovdb_leaf_get_value_mask(pnanovdb_buf_t buf, pnanovdb_leaf_handle_t p, pnanovdb_uint32_t bit_index)
Definition: PNanoVDB.h:1830
#define PNANOVDB_TREE_OFF_NODE_COUNT_LOWER
Definition: PNanoVDB.h:1526
PNANOVDB_FORCE_INLINE void pnanovdb_grid_set_magic(pnanovdb_buf_t buf, pnanovdb_grid_handle_t p, pnanovdb_uint64_t magic)
Definition: PNanoVDB.h:1344
PNANOVDB_FORCE_INLINE pnanovdb_uint32_t pnanovdb_gridblindmetadata_get_data_class(pnanovdb_buf_t buf, pnanovdb_gridblindmetadata_handle_t p)
Definition: PNanoVDB.h:1469
PNANOVDB_FORCE_INLINE pnanovdb_address_t pnanovdb_upper_get_value_address_and_level(pnanovdb_grid_type_t grid_type, pnanovdb_buf_t buf, pnanovdb_upper_handle_t upper, PNANOVDB_IN(pnanovdb_coord_t) ijk, PNANOVDB_INOUT(pnanovdb_uint32_t) level)
Definition: PNanoVDB.h:2549
PNANOVDB_FORCE_INLINE pnanovdb_uint64_t pnanovdb_uint64_bit_mask(pnanovdb_uint32_t bit_idx)
Definition: PNanoVDB.h:783
PNANOVDB_FORCE_INLINE void pnanovdb_tree_set_first_upper(pnanovdb_buf_t buf, pnanovdb_tree_handle_t p, pnanovdb_upper_handle_t upper)
Definition: PNanoVDB.h:2029
PNANOVDB_FORCE_INLINE pnanovdb_bool_t pnanovdb_leaf_onindex_has_stats(pnanovdb_buf_t buf, pnanovdb_leaf_handle_t leaf)
Definition: PNanoVDB.h:2224
Definition: PNanoVDB.h:1688
PNANOVDB_FORCE_INLINE pnanovdb_coord_t pnanovdb_root_get_bbox_min(pnanovdb_buf_t buf, pnanovdb_root_handle_t p)
Definition: PNanoVDB.h:1619
PNANOVDB_FORCE_INLINE pnanovdb_address_t pnanovdb_root_get_value_address_and_level_and_cache(pnanovdb_grid_type_t grid_type, pnanovdb_buf_t buf, pnanovdb_root_handle_t root, PNANOVDB_IN(pnanovdb_coord_t) ijk, PNANOVDB_INOUT(pnanovdb_readaccessor_t) acc, PNANOVDB_INOUT(pnanovdb_uint32_t) level)
Definition: PNanoVDB.h:2914
PNANOVDB_FORCE_INLINE pnanovdb_bool_t pnanovdb_root_is_active_and_cache(pnanovdb_grid_type_t grid_type, pnanovdb_buf_t buf, pnanovdb_root_handle_t root, PNANOVDB_IN(pnanovdb_coord_t) ijk, PNANOVDB_INOUT(pnanovdb_readaccessor_t) acc)
Definition: PNanoVDB.h:3116
PNANOVDB_FORCE_INLINE pnanovdb_uint64_t pnanovdb_root_index_get_value_index(pnanovdb_buf_t buf, pnanovdb_address_t address, PNANOVDB_IN(pnanovdb_coord_t) ijk, pnanovdb_uint32_t level)
Definition: PNanoVDB.h:2713
pnanovdb_uint32_t upper_off_ave
Definition: PNanoVDB.h:1863
#define PNANOVDB_LEAF_TABLE_NEG_OFF_QUANTUM
Definition: PNanoVDB.h:1822
pnanovdb_uint32_t root_off_min
Definition: PNanoVDB.h:1852
PNANOVDB_FORCE_INLINE pnanovdb_uint64_t pnanovdb_leaf_indexmask_get_value_index(pnanovdb_buf_t buf, pnanovdb_address_t value_address, PNANOVDB_IN(pnanovdb_coord_t) ijk)
Definition: PNanoVDB.h:2178
PNANOVDB_FORCE_INLINE pnanovdb_uint32_t pnanovdb_upper_coord_to_offset(PNANOVDB_IN(pnanovdb_coord_t) ijk)
Definition: PNanoVDB.h:2499
PNANOVDB_FORCE_INLINE pnanovdb_address_t pnanovdb_upper_get_table_address(pnanovdb_grid_type_t grid_type, pnanovdb_buf_t buf, pnanovdb_upper_handle_t node, pnanovdb_uint32_t n)
Definition: PNanoVDB.h:2530
pnanovdb_coord_t bbox_min
Definition: PNanoVDB.h:1603
PNANOVDB_FORCE_INLINE void pnanovdb_map_set_vecf(pnanovdb_buf_t buf, pnanovdb_map_handle_t p, pnanovdb_uint32_t index, float vecf)
Definition: PNanoVDB.h:1222
#define PNANOVDB_TREE_OFF_NODE_COUNT_UPPER
Definition: PNanoVDB.h:1527
PNANOVDB_FORCE_INLINE pnanovdb_uint64_t pnanovdb_root_onindex_get_value_index(pnanovdb_buf_t buf, pnanovdb_address_t address, PNANOVDB_IN(pnanovdb_coord_t) ijk, pnanovdb_uint32_t level)
Definition: PNanoVDB.h:2727
PNANOVDB_FORCE_INLINE void pnanovdb_grid_set_data1(pnanovdb_buf_t buf, pnanovdb_grid_handle_t p, pnanovdb_uint64_t data1)
Definition: PNanoVDB.h:1389
PNANOVDB_FORCE_INLINE float pnanovdb_map_get_taperf(pnanovdb_buf_t buf, pnanovdb_map_handle_t p, pnanovdb_uint32_t index)
Definition: PNanoVDB.h:1200
pnanovdb_address_t address
Definition: PNanoVDB.h:1810
PNANOVDB_FORCE_INLINE void pnanovdb_upper_set_bbox_min(pnanovdb_buf_t buf, pnanovdb_upper_handle_t p, PNANOVDB_IN(pnanovdb_coord_t) bbox_min)
Definition: PNanoVDB.h:1718
#define PNANOVDB_GRID_OFF_GRID_CLASS
Definition: PNanoVDB.h:1279
PNANOVDB_FORCE_INLINE void pnanovdb_tree_set_first_lower(pnanovdb_buf_t buf, pnanovdb_tree_handle_t p, pnanovdb_lower_handle_t lower)
Definition: PNanoVDB.h:2026
PNANOVDB_FORCE_INLINE void pnanovdb_root_set_child(pnanovdb_grid_type_t grid_type, pnanovdb_buf_t buf, pnanovdb_root_handle_t root, pnanovdb_root_tile_handle_t tile, pnanovdb_upper_handle_t upper)
Definition: PNanoVDB.h:1976
PNANOVDB_FORCE_INLINE void pnanovdb_grid_set_grid_size(pnanovdb_buf_t buf, pnanovdb_grid_handle_t p, pnanovdb_uint64_t grid_size)
Definition: PNanoVDB.h:1362
#define PNANOVDB_GRID_TYPE_ONINDEX
Definition: PNanoVDB.h:1113
PNANOVDB_FORCE_INLINE void pnanovdb_write_float(pnanovdb_buf_t buf, pnanovdb_address_t address, float value)
Definition: PNanoVDB.h:1062
PNANOVDB_FORCE_INLINE pnanovdb_uint32_t pnanovdb_gridblindmetadata_get_name(pnanovdb_buf_t buf, pnanovdb_gridblindmetadata_handle_t p, pnanovdb_uint32_t index)
Definition: PNanoVDB.h:1475
#define PNANOVDB_MAP_OFF_MATD
Definition: PNanoVDB.h:1186
PNANOVDB_FORCE_INLINE void pnanovdb_leaf_pointindex_set_on(pnanovdb_buf_t buf, pnanovdb_leaf_handle_t leaf, pnanovdb_uint32_t i)
Definition: PNanoVDB.h:2395
PNANOVDB_FORCE_INLINE pnanovdb_vec3_t pnanovdb_grid_index_to_world_dirf(pnanovdb_buf_t buf, pnanovdb_grid_handle_t grid, PNANOVDB_IN(pnanovdb_vec3_t) src)
Definition: PNanoVDB.h:3231
#define PNANOVDB_GRID_OFF_GRID_NAME
Definition: PNanoVDB.h:1275
PNANOVDB_FORCE_INLINE pnanovdb_uint32_t pnanovdb_grid_get_blind_metadata_count(pnanovdb_buf_t buf, pnanovdb_grid_handle_t p)
Definition: PNanoVDB.h:1331
PNANOVDB_FORCE_INLINE void pnanovdb_map_set_vecd(pnanovdb_buf_t buf, pnanovdb_map_handle_t p, pnanovdb_uint32_t index, double vecd)
Definition: PNanoVDB.h:1234
PNANOVDB_FORCE_INLINE pnanovdb_uint64_t pnanovdb_leaf_onindex_get_last_offset(pnanovdb_buf_t buf, pnanovdb_leaf_handle_t leaf)
Definition: PNanoVDB.h:2217
PNANOVDB_FORCE_INLINE pnanovdb_uint32_t pnanovdb_gridblindmetadata_get_semantic(pnanovdb_buf_t buf, pnanovdb_gridblindmetadata_handle_t p)
Definition: PNanoVDB.h:1466
PNANOVDB_FORCE_INLINE float pnanovdb_map_get_invmatf(pnanovdb_buf_t buf, pnanovdb_map_handle_t p, pnanovdb_uint32_t index)
Definition: PNanoVDB.h:1194
PNANOVDB_FORCE_INLINE pnanovdb_bool_t pnanovdb_lower_get_value_mask(pnanovdb_buf_t buf, pnanovdb_lower_handle_t p, pnanovdb_uint32_t bit_index)
Definition: PNanoVDB.h:1771
pnanovdb_uint64_t data1
Definition: PNanoVDB.h:1259
pnanovdb_uint32_t leaf_off_stddev
Definition: PNanoVDB.h:1876
PNANOVDB_FORCE_INLINE pnanovdb_int64_t pnanovdb_root_tile_get_child(pnanovdb_buf_t buf, pnanovdb_root_tile_handle_t p)
Definition: PNanoVDB.h:1660
pnanovdb_uint32_t tile_count_lower
Definition: PNanoVDB.h:1510
PNANOVDB_STATIC_CONST pnanovdb_uint32_t pnanovdb_grid_type_leaf_type[32]
Definition: PNanoVDB.h:1163
PNANOVDB_FORCE_INLINE pnanovdb_address_t pnanovdb_leaf_get_min_address(pnanovdb_grid_type_t grid_type, pnanovdb_buf_t buf, pnanovdb_leaf_handle_t node)
Definition: PNanoVDB.h:2045
#define PNANOVDB_GRID_OFF_MAP
Definition: PNanoVDB.h:1276
PNANOVDB_FORCE_INLINE void pnanovdb_tree_set_tile_count_root(pnanovdb_buf_t buf, pnanovdb_tree_handle_t p, pnanovdb_uint32_t tile_count_root)
Definition: PNanoVDB.h:1594
PNANOVDB_FORCE_INLINE pnanovdb_uint64_t pnanovdb_uint64_and(pnanovdb_uint64_t a, pnanovdb_uint64_t b)
Definition: PNanoVDB.h:788
PNANOVDB_FORCE_INLINE double pnanovdb_read_double(pnanovdb_buf_t buf, pnanovdb_address_t address)
Definition: PNanoVDB.h:966
#define PNANOVDB_TREE_OFF_NODE_OFFSET_UPPER
Definition: PNanoVDB.h:1523
pnanovdb_coord_t bbox_max
Definition: PNanoVDB.h:1604
PNANOVDB_FORCE_INLINE pnanovdb_address_t pnanovdb_root_get_value_address_and_cache(pnanovdb_grid_type_t grid_type, pnanovdb_buf_t buf, pnanovdb_root_handle_t root, PNANOVDB_IN(pnanovdb_coord_t) ijk, PNANOVDB_INOUT(pnanovdb_readaccessor_t) acc)
Definition: PNanoVDB.h:2938
PNANOVDB_FORCE_INLINE pnanovdb_uint64_t pnanovdb_grid_get_grid_size(pnanovdb_buf_t buf, pnanovdb_grid_handle_t p)
Definition: PNanoVDB.h:1305
PNANOVDB_FORCE_INLINE pnanovdb_address_t pnanovdb_root_get_value_address(pnanovdb_grid_type_t grid_type, pnanovdb_buf_t buf, pnanovdb_root_handle_t root, PNANOVDB_IN(pnanovdb_coord_t) ijk)
Definition: PNanoVDB.h:2643
PNANOVDB_FORCE_INLINE pnanovdb_uint32_t pnanovdb_leaf_get_bbox_dif_and_flags(pnanovdb_buf_t buf, pnanovdb_leaf_handle_t p)
Definition: PNanoVDB.h:1827
Definition: PNanoVDB.h:1165
PNANOVDB_FORCE_INLINE void pnanovdb_write_coord(pnanovdb_buf_t buf, pnanovdb_address_t address, PNANOVDB_IN(pnanovdb_coord_t) value)
Definition: PNanoVDB.h:1070
pnanovdb_uint64_t magic
Definition: PNanoVDB.h:1243
PNANOVDB_FORCE_INLINE pnanovdb_address_t pnanovdb_leaf_get_stddev_address(pnanovdb_grid_type_t grid_type, pnanovdb_buf_t buf, pnanovdb_leaf_handle_t node)
Definition: PNanoVDB.h:2063
PNANOVDB_FORCE_INLINE void pnanovdb_grid_set_blind_metadata_count(pnanovdb_buf_t buf, pnanovdb_grid_handle_t p, pnanovdb_uint32_t metadata_count)
Definition: PNanoVDB.h:1383
PNANOVDB_FORCE_INLINE void pnanovdb_grid_set_grid_type(pnanovdb_buf_t buf, pnanovdb_grid_handle_t p, pnanovdb_uint32_t grid_type)
Definition: PNanoVDB.h:1377
pnanovdb_uint32_t node_count_upper
Definition: PNanoVDB.h:1509
PNANOVDB_FORCE_INLINE void pnanovdb_grid_set_grid_count(pnanovdb_buf_t buf, pnanovdb_grid_handle_t p, pnanovdb_uint32_t grid_count)
Definition: PNanoVDB.h:1359
PNANOVDB_FORCE_INLINE pnanovdb_uint32_t pnanovdb_root_get_tile_count(pnanovdb_buf_t buf, pnanovdb_root_handle_t p)
Definition: PNanoVDB.h:1625
pnanovdb_uint32_t lower_off_stddev
Definition: PNanoVDB.h:1870
PNANOVDB_FORCE_INLINE pnanovdb_uint32_t pnanovdb_make_version(pnanovdb_uint32_t major, pnanovdb_uint32_t minor, pnanovdb_uint32_t patch_num)
Definition: PNanoVDB.h:1396
#define PNANOVDB_GRID_OFF_CHECKSUM
Definition: PNanoVDB.h:1269
PNANOVDB_FORCE_INLINE pnanovdb_uint64_t pnanovdb_leaf_index_get_max_index(pnanovdb_buf_t buf, pnanovdb_address_t max_address)
Definition: PNanoVDB.h:2134
PNANOVDB_STATIC_CONST pnanovdb_uint32_t pnanovdb_grid_type_stat_strides_bits[32]
Definition: PNanoVDB.h:1161
PNANOVDB_FORCE_INLINE float pnanovdb_leaf_fpn_read_float(pnanovdb_buf_t buf, pnanovdb_address_t address, PNANOVDB_IN(pnanovdb_coord_t) ijk)
Definition: PNanoVDB.h:2114
Definition: PNanoVDB.h:1739
PNANOVDB_FORCE_INLINE pnanovdb_uint64_t pnanovdb_tree_get_node_offset_lower(pnanovdb_buf_t buf, pnanovdb_tree_handle_t p)
Definition: PNanoVDB.h:1536
PNANOVDB_FORCE_INLINE pnanovdb_uint32_t pnanovdb_grid_get_grid_type(pnanovdb_buf_t buf, pnanovdb_grid_handle_t p)
Definition: PNanoVDB.h:1325
PNANOVDB_FORCE_INLINE pnanovdb_uint32_t pnanovdb_lower_get_dim_and_cache(pnanovdb_grid_type_t grid_type, pnanovdb_buf_t buf, pnanovdb_lower_handle_t lower, PNANOVDB_IN(pnanovdb_coord_t) ijk, PNANOVDB_INOUT(pnanovdb_readaccessor_t) acc)
Definition: PNanoVDB.h:2990
PNANOVDB_FORCE_INLINE pnanovdb_address_t pnanovdb_lower_get_value_address_and_level_and_cache(pnanovdb_grid_type_t grid_type, pnanovdb_buf_t buf, pnanovdb_lower_handle_t lower, PNANOVDB_IN(pnanovdb_coord_t) ijk, PNANOVDB_INOUT(pnanovdb_readaccessor_t) acc, PNANOVDB_INOUT(pnanovdb_uint32_t) level)
Definition: PNanoVDB.h:2863
#define PNANOVDB_GRID_TYPE_POINTINDEX
Definition: PNanoVDB.h:1116
PNANOVDB_FORCE_INLINE void pnanovdb_leaf_set_bbox_min(pnanovdb_buf_t buf, pnanovdb_leaf_handle_t p, PNANOVDB_IN(pnanovdb_coord_t) bbox_min)
Definition: PNanoVDB.h:1835
pnanovdb_uint64_t flags
Definition: PNanoVDB.h:1681
PNANOVDB_FORCE_INLINE pnanovdb_map_handle_t pnanovdb_grid_get_map(pnanovdb_buf_t buf, pnanovdb_grid_handle_t p)
Definition: PNanoVDB.h:1311
PNANOVDB_FORCE_INLINE pnanovdb_address_t pnanovdb_lower_get_max_address(pnanovdb_grid_type_t grid_type, pnanovdb_buf_t buf, pnanovdb_lower_handle_t node)
Definition: PNanoVDB.h:2425
PNANOVDB_FORCE_INLINE pnanovdb_address_t pnanovdb_grid_get_gridblindmetadata_value_address(pnanovdb_buf_t buf, pnanovdb_grid_handle_t grid, pnanovdb_uint32_t index)
Definition: PNanoVDB.h:1926
PNANOVDB_FORCE_INLINE void pnanovdb_grid_set_blind_metadata_offset(pnanovdb_buf_t buf, pnanovdb_grid_handle_t p, pnanovdb_uint64_t blind_metadata_offset)
Definition: PNanoVDB.h:1380
PNANOVDB_FORCE_INLINE pnanovdb_address_t pnanovdb_root_get_background_address(pnanovdb_grid_type_t grid_type, pnanovdb_buf_t buf, pnanovdb_root_handle_t root)
Definition: PNanoVDB.h:2585
PNANOVDB_FORCE_INLINE void pnanovdb_root_set_tile_count(pnanovdb_buf_t buf, pnanovdb_root_handle_t p, pnanovdb_uint32_t tile_count)
Definition: PNanoVDB.h:1635
PNANOVDB_FORCE_INLINE pnanovdb_uint32_t pnanovdb_tree_get_tile_count_root(pnanovdb_buf_t buf, pnanovdb_tree_handle_t p)
Definition: PNanoVDB.h:1560
PNANOVDB_FORCE_INLINE pnanovdb_address_t pnanovdb_lower_get_table_address(pnanovdb_grid_type_t grid_type, pnanovdb_buf_t buf, pnanovdb_lower_handle_t node, pnanovdb_uint32_t n)
Definition: PNanoVDB.h:2443
PNANOVDB_STATIC_CONST float pnanovdb_dither_lut[512]
Definition: PNanoVDB.h:3320
PNANOVDB_FORCE_INLINE pnanovdb_uint64_t pnanovdb_leaf_onindexmask_get_min_index(pnanovdb_buf_t buf, pnanovdb_address_t min_address)
Definition: PNanoVDB.h:2312
PNANOVDB_FORCE_INLINE pnanovdb_uint32_t pnanovdb_upper_get_dim_and_cache(pnanovdb_grid_type_t grid_type, pnanovdb_buf_t buf, pnanovdb_upper_handle_t upper, PNANOVDB_IN(pnanovdb_coord_t) ijk, PNANOVDB_INOUT(pnanovdb_readaccessor_t) acc)
Definition: PNanoVDB.h:3008
PNANOVDB_FORCE_INLINE void pnanovdb_readaccessor_init(PNANOVDB_INOUT(pnanovdb_readaccessor_t) acc, pnanovdb_root_handle_t root)
Definition: PNanoVDB.h:2811
PNANOVDB_FORCE_INLINE pnanovdb_vec3_t pnanovdb_grid_index_to_worldf(pnanovdb_buf_t buf, pnanovdb_grid_handle_t grid, PNANOVDB_IN(pnanovdb_vec3_t) src)
Definition: PNanoVDB.h:3219
PNANOVDB_FORCE_INLINE void pnanovdb_root_set_bbox_max(pnanovdb_buf_t buf, pnanovdb_root_handle_t p, PNANOVDB_IN(pnanovdb_coord_t) bbox_max)
Definition: PNanoVDB.h:1632
pnanovdb_uint32_t pad1
Definition: PNanoVDB.h:1606
PNANOVDB_FORCE_INLINE pnanovdb_upper_handle_t pnanovdb_root_get_child(pnanovdb_grid_type_t grid_type, pnanovdb_buf_t buf, pnanovdb_root_handle_t root, pnanovdb_root_tile_handle_t tile)
Definition: PNanoVDB.h:1969
pnanovdb_uint64_t node_offset_upper
Definition: PNanoVDB.h:1505
PNANOVDB_FORCE_INLINE pnanovdb_uint32_t pnanovdb_lower_coord_to_offset(PNANOVDB_IN(pnanovdb_coord_t) ijk)
Definition: PNanoVDB.h:2412
#define PNANOVDB_GRIDBLINDMETADATA_OFF_SEMANTIC
Definition: PNanoVDB.h:1452
#define PNANOVDB_TREE_OFF_VOXEL_COUNT
Definition: PNanoVDB.h:1531
pnanovdb_coord_t bbox_max
Definition: PNanoVDB.h:1680
#define PNANOVDB_GRID_OFF_GRID_SIZE
Definition: PNanoVDB.h:1274
PNANOVDB_FORCE_INLINE void pnanovdb_map_set_matd(pnanovdb_buf_t buf, pnanovdb_map_handle_t p, pnanovdb_uint32_t index, double matd)
Definition: PNanoVDB.h:1228
PNANOVDB_FORCE_INLINE double pnanovdb_map_get_matd(pnanovdb_buf_t buf, pnanovdb_map_handle_t p, pnanovdb_uint32_t index)
Definition: PNanoVDB.h:1203
Definition: PNanoVDB.h:1648
PNANOVDB_FORCE_INLINE pnanovdb_root_tile_handle_t pnanovdb_root_get_tile_zero(pnanovdb_grid_type_t grid_type, pnanovdb_root_handle_t root)
Definition: PNanoVDB.h:1957
pnanovdb_uint32_t flags
Definition: PNanoVDB.h:1246
PNANOVDB_FORCE_INLINE pnanovdb_address_t pnanovdb_leaf_get_value_address(pnanovdb_grid_type_t grid_type, pnanovdb_buf_t buf, pnanovdb_leaf_handle_t leaf, PNANOVDB_IN(pnanovdb_coord_t) ijk)
Definition: PNanoVDB.h:2075
pnanovdb_uint32_t grid_class
Definition: PNanoVDB.h:1254
Definition: PNanoVDB.h:2801
PNANOVDB_FORCE_INLINE void pnanovdb_grid_set_grid_name(pnanovdb_buf_t buf, pnanovdb_grid_handle_t p, pnanovdb_uint32_t index, pnanovdb_uint32_t grid_name)
Definition: PNanoVDB.h:1365
#define PNANOVDB_GRID_OFF_GRID_INDEX
Definition: PNanoVDB.h:1272
#define PNANOVDB_TREE_OFF_NODE_OFFSET_LEAF
Definition: PNanoVDB.h:1521
PNANOVDB_FORCE_INLINE pnanovdb_uint32_t pnanovdb_grid_get_flags(pnanovdb_buf_t buf, pnanovdb_grid_handle_t p)
Definition: PNanoVDB.h:1296
PNANOVDB_FORCE_INLINE pnanovdb_address_t pnanovdb_leaf_get_ave_address(pnanovdb_grid_type_t grid_type, pnanovdb_buf_t buf, pnanovdb_leaf_handle_t node)
Definition: PNanoVDB.h:2057
PNANOVDB_FORCE_INLINE pnanovdb_vec3_t pnanovdb_map_apply(pnanovdb_buf_t buf, pnanovdb_map_handle_t map, PNANOVDB_IN(pnanovdb_vec3_t) src)
Definition: PNanoVDB.h:3165
PNANOVDB_FORCE_INLINE void pnanovdb_grid_set_grid_class(pnanovdb_buf_t buf, pnanovdb_grid_handle_t p, pnanovdb_uint32_t grid_class)
Definition: PNanoVDB.h:1374
#define PNANOVDB_GRID_OFF_BLIND_METADATA_COUNT
Definition: PNanoVDB.h:1282
#define PNANOVDB_MAP_OFF_TAPERD
Definition: PNanoVDB.h:1189
#define PNANOVDB_GRID_OFF_WORLD_BBOX
Definition: PNanoVDB.h:1277
PNANOVDB_FORCE_INLINE pnanovdb_address_t pnanovdb_root_get_value_address_and_level(pnanovdb_grid_type_t grid_type, pnanovdb_buf_t buf, pnanovdb_root_handle_t root, PNANOVDB_IN(pnanovdb_coord_t) ijk, PNANOVDB_INOUT(pnanovdb_uint32_t) level)
Definition: PNanoVDB.h:2621
PNANOVDB_FORCE_INLINE void pnanovdb_lower_set_value_mask(pnanovdb_buf_t buf, pnanovdb_lower_handle_t p, pnanovdb_uint32_t bit_index, pnanovdb_bool_t value)
Definition: PNanoVDB.h:1786
pnanovdb_uint64_t key
Definition: PNanoVDB.h:1641
PNANOVDB_FORCE_INLINE void pnanovdb_map_set_matf(pnanovdb_buf_t buf, pnanovdb_map_handle_t p, pnanovdb_uint32_t index, float matf)
Definition: PNanoVDB.h:1216
PNANOVDB_STATIC_CONST pnanovdb_grid_type_constants_t pnanovdb_grid_type_constants[32]
Definition: PNanoVDB.h:1883
PNANOVDB_FORCE_INLINE pnanovdb_vec3_t pnanovdb_map_apply_inverse_jacobi(pnanovdb_buf_t buf, pnanovdb_map_handle_t map, PNANOVDB_IN(pnanovdb_vec3_t) src)
Definition: PNanoVDB.h:3201
PNANOVDB_FORCE_INLINE pnanovdb_int64_t pnanovdb_read_int64(pnanovdb_buf_t buf, pnanovdb_address_t address)
Definition: PNanoVDB.h:962
PNANOVDB_FORCE_INLINE void pnanovdb_gridblindmetadata_set_value_count(pnanovdb_buf_t buf, pnanovdb_gridblindmetadata_handle_t p, pnanovdb_uint64_t value_count)
Definition: PNanoVDB.h:1482
PNANOVDB_FORCE_INLINE void pnanovdb_leaf_indexmask_set_mask_bit(pnanovdb_buf_t buf, pnanovdb_leaf_handle_t leaf, pnanovdb_uint32_t n, pnanovdb_bool_t v)
Definition: PNanoVDB.h:2190
PNANOVDB_FORCE_INLINE pnanovdb_root_tile_handle_t pnanovdb_root_find_tile(pnanovdb_grid_type_t grid_type, pnanovdb_buf_t buf, pnanovdb_root_handle_t root, PNANOVDB_IN(pnanovdb_coord_t) ijk)
Definition: PNanoVDB.h:1998
pnanovdb_uint32_t leaf_off_ave
Definition: PNanoVDB.h:1875
PNANOVDB_FORCE_INLINE float pnanovdb_map_get_vecf(pnanovdb_buf_t buf, pnanovdb_map_handle_t p, pnanovdb_uint32_t index)
Definition: PNanoVDB.h:1197
pnanovdb_uint32_t root_off_ave
Definition: PNanoVDB.h:1854
pnanovdb_uint32_t lower_size
Definition: PNanoVDB.h:1872
pnanovdb_int64_t child
Definition: PNanoVDB.h:1642
PNANOVDB_FORCE_INLINE pnanovdb_uint64_t pnanovdb_leaf_indexmask_get_min_index(pnanovdb_buf_t buf, pnanovdb_address_t min_address)
Definition: PNanoVDB.h:2162
PNANOVDB_FORCE_INLINE pnanovdb_uint32_t pnanovdb_version_get_patch(pnanovdb_uint32_t version)
Definition: PNanoVDB.h:1409
PNANOVDB_FORCE_INLINE pnanovdb_uint32_t pnanovdb_leaf_coord_to_offset(PNANOVDB_IN(pnanovdb_coord_t) ijk)
Definition: PNanoVDB.h:2038
PNANOVDB_FORCE_INLINE pnanovdb_address_t pnanovdb_lower_get_min_address(pnanovdb_grid_type_t grid_type, pnanovdb_buf_t buf, pnanovdb_lower_handle_t node)
Definition: PNanoVDB.h:2419
PNANOVDB_FORCE_INLINE pnanovdb_uint32_t pnanovdb_grid_get_grid_class(pnanovdb_buf_t buf, pnanovdb_grid_handle_t p)
Definition: PNanoVDB.h:1322
PNANOVDB_FORCE_INLINE pnanovdb_uint64_t pnanovdb_coord_to_key(PNANOVDB_IN(pnanovdb_coord_t) ijk)
Definition: PNanoVDB.h:1981
#define PNANOVDB_MAP_OFF_INVMATF
Definition: PNanoVDB.h:1183
PNANOVDB_FORCE_INLINE pnanovdb_address_t pnanovdb_lower_get_value_address_and_cache(pnanovdb_grid_type_t grid_type, pnanovdb_buf_t buf, pnanovdb_lower_handle_t lower, PNANOVDB_IN(pnanovdb_coord_t) ijk, PNANOVDB_INOUT(pnanovdb_readaccessor_t) acc)
Definition: PNanoVDB.h:2883
PNANOVDB_FORCE_INLINE void pnanovdb_tree_set_node_offset_lower(pnanovdb_buf_t buf, pnanovdb_tree_handle_t p, pnanovdb_uint64_t node_offset_lower)
Definition: PNanoVDB.h:1570
PNANOVDB_FORCE_INLINE void pnanovdb_tree_set_first_root(pnanovdb_buf_t buf, pnanovdb_tree_handle_t p, pnanovdb_root_handle_t root)
Definition: PNanoVDB.h:2032
PNANOVDB_FORCE_INLINE pnanovdb_bool_t pnanovdb_read_bit(pnanovdb_buf_t buf, pnanovdb_address_t address, pnanovdb_uint32_t bit_offset)
Definition: PNanoVDB.h:1016
pnanovdb_uint32_t state
Definition: PNanoVDB.h:1643
double taperd
Definition: PNanoVDB.h:1174
PNANOVDB_FORCE_INLINE pnanovdb_bool_t pnanovdb_leaf_indexmask_get_mask_bit(pnanovdb_buf_t buf, pnanovdb_leaf_handle_t leaf, pnanovdb_uint32_t n)
Definition: PNanoVDB.h:2182
PNANOVDB_FORCE_INLINE pnanovdb_uint64_t pnanovdb_uint64_dec(pnanovdb_uint64_t a)
Definition: PNanoVDB.h:773
PNANOVDB_FORCE_INLINE pnanovdb_address_t pnanovdb_leaf_get_value_address_and_cache(pnanovdb_grid_type_t grid_type, pnanovdb_buf_t buf, pnanovdb_leaf_handle_t leaf, PNANOVDB_IN(pnanovdb_coord_t) ijk, PNANOVDB_INOUT(pnanovdb_readaccessor_t) acc)
Definition: PNanoVDB.h:2857
pnanovdb_root_handle_t root
Definition: PNanoVDB.h:2807
PNANOVDB_FORCE_INLINE pnanovdb_address_t pnanovdb_root_tile_get_value_address(pnanovdb_grid_type_t grid_type, pnanovdb_buf_t buf, pnanovdb_root_tile_handle_t root_tile)
Definition: PNanoVDB.h:2615
PNANOVDB_FORCE_INLINE float pnanovdb_read_float(pnanovdb_buf_t buf, pnanovdb_address_t address)
Definition: PNanoVDB.h:958
PNANOVDB_FORCE_INLINE pnanovdb_vec3_t pnanovdb_grid_world_to_indexf(pnanovdb_buf_t buf, pnanovdb_grid_handle_t grid, PNANOVDB_IN(pnanovdb_vec3_t) src)
Definition: PNanoVDB.h:3213
PNANOVDB_FORCE_INLINE pnanovdb_uint32_t pnanovdb_read_uint8(pnanovdb_buf_t buf, pnanovdb_address_t address)
Definition: PNanoVDB.h:992
PNANOVDB_FORCE_INLINE void pnanovdb_tree_set_tile_count_upper(pnanovdb_buf_t buf, pnanovdb_tree_handle_t p, pnanovdb_uint32_t tile_count_upper)
Definition: PNanoVDB.h:1591
pnanovdb_address_t address
Definition: PNanoVDB.h:1516