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_ADDRESS_32) 202 #define pnanovdb_buf_t StructuredBuffer<uint> 203 uint pnanovdb_buf_read_uint32(pnanovdb_buf_t buf, uint byte_offset)
205 return buf[(byte_offset >> 2u)];
207 uint2 pnanovdb_buf_read_uint64(pnanovdb_buf_t buf, uint byte_offset)
210 ret.x = pnanovdb_buf_read_uint32(buf, byte_offset + 0u);
211 ret.y = pnanovdb_buf_read_uint32(buf, byte_offset + 4u);
214 void pnanovdb_buf_write_uint32(pnanovdb_buf_t buf, uint byte_offset, uint value)
218 void pnanovdb_buf_write_uint64(pnanovdb_buf_t buf, uint byte_offset, uint2 value)
222 #elif defined(PNANOVDB_ADDRESS_64) 223 #define pnanovdb_buf_t StructuredBuffer<uint> 224 uint pnanovdb_buf_read_uint32(pnanovdb_buf_t buf, uint64_t byte_offset)
226 return buf[uint(byte_offset >> 2u)];
228 uint64_t pnanovdb_buf_read_uint64(pnanovdb_buf_t buf, uint64_t byte_offset)
231 ret = pnanovdb_buf_read_uint32(buf, byte_offset + 0u);
232 ret = ret + (uint64_t(pnanovdb_buf_read_uint32(buf, byte_offset + 4u)) << 32u);
235 void pnanovdb_buf_write_uint32(pnanovdb_buf_t buf, uint64_t byte_offset, uint value)
239 void pnanovdb_buf_write_uint64(pnanovdb_buf_t buf, uint64_t byte_offset, uint64_t value)
244 #define pnanovdb_grid_type_t uint 245 #define PNANOVDB_GRID_TYPE_GET(grid_typeIn, nameIn) pnanovdb_grid_type_constants[grid_typeIn].nameIn 246 #elif defined(PNANOVDB_BUF_GLSL) 247 struct pnanovdb_buf_t
251 uint pnanovdb_buf_read_uint32(pnanovdb_buf_t buf, uint byte_offset)
253 return pnanovdb_buf_data[(byte_offset >> 2u)];
255 uvec2 pnanovdb_buf_read_uint64(pnanovdb_buf_t buf, uint byte_offset)
258 ret.x = pnanovdb_buf_read_uint32(buf, byte_offset + 0u);
259 ret.y = pnanovdb_buf_read_uint32(buf, byte_offset + 4u);
262 void pnanovdb_buf_write_uint32(pnanovdb_buf_t buf, uint byte_offset, uint value)
266 void pnanovdb_buf_write_uint64(pnanovdb_buf_t buf, uint byte_offset, uvec2 value)
270 #define pnanovdb_grid_type_t uint 271 #define PNANOVDB_GRID_TYPE_GET(grid_typeIn, nameIn) pnanovdb_grid_type_constants[grid_typeIn].nameIn 277 #if defined(PNANOVDB_C) 278 #if defined(__CUDACC__) 279 #define PNANOVDB_FORCE_INLINE static __host__ __device__ __forceinline__ 280 #elif defined(_WIN32) 281 #define PNANOVDB_FORCE_INLINE static inline __forceinline 283 #define PNANOVDB_FORCE_INLINE static inline __attribute__((always_inline)) 285 #elif defined(PNANOVDB_HLSL) 286 #define PNANOVDB_FORCE_INLINE 287 #elif defined(PNANOVDB_GLSL) 288 #define PNANOVDB_FORCE_INLINE 292 #if defined(PNANOVDB_C) 293 #define PNANOVDB_STRUCT_TYPEDEF(X) typedef struct X X; 294 #define PNANOVDB_STATIC_CONST static const 295 #define PNANOVDB_INOUT(X) X* 296 #define PNANOVDB_IN(X) const X* 297 #define PNANOVDB_DEREF(X) (*X) 298 #define PNANOVDB_REF(X) &X 299 #elif defined(PNANOVDB_HLSL) 300 #define PNANOVDB_STRUCT_TYPEDEF(X) 301 #define PNANOVDB_STATIC_CONST static const 302 #define PNANOVDB_INOUT(X) inout X 303 #define PNANOVDB_IN(X) X 304 #define PNANOVDB_DEREF(X) X 305 #define PNANOVDB_REF(X) X 306 #elif defined(PNANOVDB_GLSL) 307 #define PNANOVDB_STRUCT_TYPEDEF(X) 308 #define PNANOVDB_STATIC_CONST const 309 #define PNANOVDB_INOUT(X) inout X 310 #define PNANOVDB_IN(X) X 311 #define PNANOVDB_DEREF(X) X 312 #define PNANOVDB_REF(X) X 316 #if defined(PNANOVDB_C) 317 #define PNANOVDB_NATIVE_64 318 #ifndef __CUDACC_RTC__ 321 #if !defined(PNANOVDB_MEMCPY_CUSTOM) 322 #ifndef __CUDACC_RTC__ 325 #define pnanovdb_memcpy memcpy 327 typedef uint32_t pnanovdb_uint32_t;
328 typedef int32_t pnanovdb_int32_t;
329 typedef int32_t pnanovdb_bool_t;
330 #define PNANOVDB_FALSE 0 331 #define PNANOVDB_TRUE 1 332 typedef uint64_t pnanovdb_uint64_t;
333 typedef int64_t pnanovdb_int64_t;
334 typedef struct pnanovdb_coord_t
336 pnanovdb_int32_t x, y, z;
338 typedef struct pnanovdb_vec3_t
342 PNANOVDB_FORCE_INLINE pnanovdb_int32_t pnanovdb_uint32_as_int32(pnanovdb_uint32_t v) {
return (pnanovdb_int32_t)v; }
343 PNANOVDB_FORCE_INLINE pnanovdb_int64_t pnanovdb_uint64_as_int64(pnanovdb_uint64_t v) {
return (pnanovdb_int64_t)v; }
344 PNANOVDB_FORCE_INLINE pnanovdb_uint64_t pnanovdb_int64_as_uint64(pnanovdb_int64_t v) {
return (pnanovdb_uint64_t)v; }
345 PNANOVDB_FORCE_INLINE pnanovdb_uint32_t pnanovdb_int32_as_uint32(pnanovdb_int32_t v) {
return (pnanovdb_uint32_t)v; }
346 PNANOVDB_FORCE_INLINE
float pnanovdb_uint32_as_float(pnanovdb_uint32_t v) {
float vf; pnanovdb_memcpy(&vf, &v,
sizeof(vf));
return vf; }
347 PNANOVDB_FORCE_INLINE pnanovdb_uint32_t pnanovdb_float_as_uint32(
float v) {
return *((pnanovdb_uint32_t*)(&v)); }
348 PNANOVDB_FORCE_INLINE
double pnanovdb_uint64_as_double(pnanovdb_uint64_t v) {
double vf; pnanovdb_memcpy(&vf, &v,
sizeof(vf));
return vf; }
349 PNANOVDB_FORCE_INLINE pnanovdb_uint64_t pnanovdb_double_as_uint64(
double v) {
return *((pnanovdb_uint64_t*)(&v)); }
350 PNANOVDB_FORCE_INLINE pnanovdb_uint32_t pnanovdb_uint64_low(pnanovdb_uint64_t v) {
return (pnanovdb_uint32_t)v; }
351 PNANOVDB_FORCE_INLINE pnanovdb_uint32_t pnanovdb_uint64_high(pnanovdb_uint64_t v) {
return (pnanovdb_uint32_t)(v >> 32u); }
352 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); }
353 PNANOVDB_FORCE_INLINE pnanovdb_uint64_t pnanovdb_uint32_as_uint64_low(pnanovdb_uint32_t x) {
return ((pnanovdb_uint64_t)x); }
354 PNANOVDB_FORCE_INLINE pnanovdb_int32_t pnanovdb_uint64_is_equal(pnanovdb_uint64_t a, pnanovdb_uint64_t b) {
return a == b; }
355 PNANOVDB_FORCE_INLINE pnanovdb_int32_t pnanovdb_int64_is_zero(pnanovdb_int64_t a) {
return a == 0; }
356 #ifdef PNANOVDB_CMATH 357 PNANOVDB_FORCE_INLINE
float pnanovdb_floor(
float v) {
return floorf(v); }
359 PNANOVDB_FORCE_INLINE pnanovdb_int32_t pnanovdb_float_to_int32(
float v) {
return (pnanovdb_int32_t)v; }
360 PNANOVDB_FORCE_INLINE
float pnanovdb_int32_to_float(pnanovdb_int32_t v) {
return (
float)v; }
361 PNANOVDB_FORCE_INLINE
float pnanovdb_uint32_to_float(pnanovdb_uint32_t v) {
return (
float)v; }
362 PNANOVDB_FORCE_INLINE
float pnanovdb_min(
float a,
float b) {
return a < b ? a : b; }
363 PNANOVDB_FORCE_INLINE
float pnanovdb_max(
float a,
float b) {
return a > b ? a : b; }
364 #elif defined(PNANOVDB_HLSL) 365 typedef uint pnanovdb_uint32_t;
366 typedef int pnanovdb_int32_t;
367 typedef bool pnanovdb_bool_t;
368 #define PNANOVDB_FALSE false 369 #define PNANOVDB_TRUE true 370 typedef int3 pnanovdb_coord_t;
371 typedef float3 pnanovdb_vec3_t;
372 pnanovdb_int32_t pnanovdb_uint32_as_int32(pnanovdb_uint32_t v) {
return int(v); }
373 pnanovdb_uint32_t pnanovdb_int32_as_uint32(pnanovdb_int32_t v) {
return uint(v); }
374 float pnanovdb_uint32_as_float(pnanovdb_uint32_t v) {
return asfloat(v); }
375 pnanovdb_uint32_t pnanovdb_float_as_uint32(
float v) {
return asuint(v); }
376 float pnanovdb_floor(
float v) {
return floor(v); }
377 pnanovdb_int32_t pnanovdb_float_to_int32(
float v) {
return int(v); }
378 float pnanovdb_int32_to_float(pnanovdb_int32_t v) {
return float(v); }
379 float pnanovdb_uint32_to_float(pnanovdb_uint32_t v) {
return float(v); }
380 float pnanovdb_min(
float a,
float b) {
return min(a, b); }
381 float pnanovdb_max(
float a,
float b) {
return max(a, b); }
382 #if defined(PNANOVDB_ADDRESS_32) 383 typedef uint2 pnanovdb_uint64_t;
384 typedef int2 pnanovdb_int64_t;
385 pnanovdb_int64_t pnanovdb_uint64_as_int64(pnanovdb_uint64_t v) {
return int2(v); }
386 pnanovdb_uint64_t pnanovdb_int64_as_uint64(pnanovdb_int64_t v) {
return uint2(v); }
387 double pnanovdb_uint64_as_double(pnanovdb_uint64_t v) {
return asdouble(v.x, v.y); }
388 pnanovdb_uint64_t pnanovdb_double_as_uint64(
double v) { uint2 ret; asuint(v, ret.x, ret.y);
return ret; }
389 pnanovdb_uint32_t pnanovdb_uint64_low(pnanovdb_uint64_t v) {
return v.x; }
390 pnanovdb_uint32_t pnanovdb_uint64_high(pnanovdb_uint64_t v) {
return v.y; }
391 pnanovdb_uint64_t pnanovdb_uint32_as_uint64(pnanovdb_uint32_t x, pnanovdb_uint32_t y) {
return uint2(x, y); }
392 pnanovdb_uint64_t pnanovdb_uint32_as_uint64_low(pnanovdb_uint32_t x) {
return uint2(x, 0); }
393 bool pnanovdb_uint64_is_equal(pnanovdb_uint64_t a, pnanovdb_uint64_t b) {
return (a.x == b.x) && (a.y == b.y); }
394 bool pnanovdb_int64_is_zero(pnanovdb_int64_t a) {
return a.x == 0 && a.y == 0; }
396 typedef uint64_t pnanovdb_uint64_t;
397 typedef int64_t pnanovdb_int64_t;
398 pnanovdb_int64_t pnanovdb_uint64_as_int64(pnanovdb_uint64_t v) {
return int64_t(v); }
399 pnanovdb_uint64_t pnanovdb_int64_as_uint64(pnanovdb_int64_t v) {
return uint64_t(v); }
400 double pnanovdb_uint64_as_double(pnanovdb_uint64_t v) {
return asdouble(uint(v), uint(v >> 32u)); }
401 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); }
402 pnanovdb_uint32_t pnanovdb_uint64_low(pnanovdb_uint64_t v) {
return uint(v); }
403 pnanovdb_uint32_t pnanovdb_uint64_high(pnanovdb_uint64_t v) {
return uint(v >> 32u); }
404 pnanovdb_uint64_t pnanovdb_uint32_as_uint64(pnanovdb_uint32_t x, pnanovdb_uint32_t y) {
return uint64_t(x) + (uint64_t(y) << 32u); }
405 pnanovdb_uint64_t pnanovdb_uint32_as_uint64_low(pnanovdb_uint32_t x) {
return uint64_t(x); }
406 bool pnanovdb_uint64_is_equal(pnanovdb_uint64_t a, pnanovdb_uint64_t b) {
return a == b; }
407 bool pnanovdb_int64_is_zero(pnanovdb_int64_t a) {
return a == 0; }
409 #elif defined(PNANOVDB_GLSL) 410 #define pnanovdb_uint32_t uint 411 #define pnanovdb_int32_t int 412 #define pnanovdb_bool_t bool 413 #define PNANOVDB_FALSE false 414 #define PNANOVDB_TRUE true 415 #define pnanovdb_uint64_t uvec2 416 #define pnanovdb_int64_t ivec2 417 #define pnanovdb_coord_t ivec3 418 #define pnanovdb_vec3_t vec3 419 pnanovdb_int32_t pnanovdb_uint32_as_int32(pnanovdb_uint32_t v) {
return int(v); }
420 pnanovdb_int64_t pnanovdb_uint64_as_int64(pnanovdb_uint64_t v) {
return ivec2(v); }
421 pnanovdb_uint64_t pnanovdb_int64_as_uint64(pnanovdb_int64_t v) {
return uvec2(v); }
422 pnanovdb_uint32_t pnanovdb_int32_as_uint32(pnanovdb_int32_t v) {
return uint(v); }
423 float pnanovdb_uint32_as_float(pnanovdb_uint32_t v) {
return uintBitsToFloat(v); }
424 pnanovdb_uint32_t pnanovdb_float_as_uint32(
float v) {
return floatBitsToUint(v); }
425 double pnanovdb_uint64_as_double(pnanovdb_uint64_t v) {
return packDouble2x32(uvec2(v.x, v.y)); }
426 pnanovdb_uint64_t pnanovdb_double_as_uint64(
double v) {
return unpackDouble2x32(v); }
427 pnanovdb_uint32_t pnanovdb_uint64_low(pnanovdb_uint64_t v) {
return v.x; }
428 pnanovdb_uint32_t pnanovdb_uint64_high(pnanovdb_uint64_t v) {
return v.y; }
429 pnanovdb_uint64_t pnanovdb_uint32_as_uint64(pnanovdb_uint32_t x, pnanovdb_uint32_t y) {
return uvec2(x, y); }
430 pnanovdb_uint64_t pnanovdb_uint32_as_uint64_low(pnanovdb_uint32_t x) {
return uvec2(x, 0); }
431 bool pnanovdb_uint64_is_equal(pnanovdb_uint64_t a, pnanovdb_uint64_t b) {
return (a.x == b.x) && (a.y == b.y); }
432 bool pnanovdb_int64_is_zero(pnanovdb_int64_t a) {
return a.x == 0 && a.y == 0; }
433 float pnanovdb_floor(
float v) {
return floor(v); }
434 pnanovdb_int32_t pnanovdb_float_to_int32(
float v) {
return int(v); }
435 float pnanovdb_int32_to_float(pnanovdb_int32_t v) {
return float(v); }
436 float pnanovdb_uint32_to_float(pnanovdb_uint32_t v) {
return float(v); }
437 float pnanovdb_min(
float a,
float b) {
return min(a, b); }
438 float pnanovdb_max(
float a,
float b) {
return max(a, b); }
443 #if defined(PNANOVDB_C) 444 PNANOVDB_FORCE_INLINE pnanovdb_vec3_t pnanovdb_vec3_uniform(
float a)
452 PNANOVDB_FORCE_INLINE pnanovdb_vec3_t pnanovdb_vec3_add(
const pnanovdb_vec3_t a,
const pnanovdb_vec3_t b)
460 PNANOVDB_FORCE_INLINE pnanovdb_vec3_t pnanovdb_vec3_sub(
const pnanovdb_vec3_t a,
const pnanovdb_vec3_t b)
468 PNANOVDB_FORCE_INLINE pnanovdb_vec3_t pnanovdb_vec3_mul(
const pnanovdb_vec3_t a,
const pnanovdb_vec3_t b)
476 PNANOVDB_FORCE_INLINE pnanovdb_vec3_t pnanovdb_vec3_div(
const pnanovdb_vec3_t a,
const pnanovdb_vec3_t b)
484 PNANOVDB_FORCE_INLINE pnanovdb_vec3_t pnanovdb_vec3_min(
const pnanovdb_vec3_t a,
const pnanovdb_vec3_t b)
487 v.x = a.x < b.x ? a.x : b.x;
488 v.y = a.y < b.y ? a.y : b.y;
489 v.z = a.z < b.z ? a.z : b.z;
492 PNANOVDB_FORCE_INLINE pnanovdb_vec3_t pnanovdb_vec3_max(
const pnanovdb_vec3_t a,
const pnanovdb_vec3_t b)
495 v.x = a.x > b.x ? a.x : b.x;
496 v.y = a.y > b.y ? a.y : b.y;
497 v.z = a.z > b.z ? a.z : b.z;
500 PNANOVDB_FORCE_INLINE pnanovdb_vec3_t pnanovdb_coord_to_vec3(
const pnanovdb_coord_t coord)
503 v.x = pnanovdb_int32_to_float(coord.x);
504 v.y = pnanovdb_int32_to_float(coord.y);
505 v.z = pnanovdb_int32_to_float(coord.z);
508 PNANOVDB_FORCE_INLINE pnanovdb_coord_t pnanovdb_coord_uniform(
const pnanovdb_int32_t a)
516 PNANOVDB_FORCE_INLINE pnanovdb_coord_t pnanovdb_coord_add(pnanovdb_coord_t a, pnanovdb_coord_t b)
524 #elif defined(PNANOVDB_HLSL) 525 pnanovdb_vec3_t pnanovdb_vec3_uniform(
float a) {
return float3(a, a, a); }
526 pnanovdb_vec3_t pnanovdb_vec3_add(pnanovdb_vec3_t a, pnanovdb_vec3_t b) {
return a + b; }
527 pnanovdb_vec3_t pnanovdb_vec3_sub(pnanovdb_vec3_t a, pnanovdb_vec3_t b) {
return a - b; }
528 pnanovdb_vec3_t pnanovdb_vec3_mul(pnanovdb_vec3_t a, pnanovdb_vec3_t b) {
return a * b; }
529 pnanovdb_vec3_t pnanovdb_vec3_div(pnanovdb_vec3_t a, pnanovdb_vec3_t b) {
return a / b; }
530 pnanovdb_vec3_t pnanovdb_vec3_min(pnanovdb_vec3_t a, pnanovdb_vec3_t b) {
return min(a, b); }
531 pnanovdb_vec3_t pnanovdb_vec3_max(pnanovdb_vec3_t a, pnanovdb_vec3_t b) {
return max(a, b); }
532 pnanovdb_vec3_t pnanovdb_coord_to_vec3(pnanovdb_coord_t coord) {
return float3(coord); }
533 pnanovdb_coord_t pnanovdb_coord_uniform(pnanovdb_int32_t a) {
return int3(a, a, a); }
534 pnanovdb_coord_t pnanovdb_coord_add(pnanovdb_coord_t a, pnanovdb_coord_t b) {
return a + b; }
535 #elif defined(PNANOVDB_GLSL) 536 pnanovdb_vec3_t pnanovdb_vec3_uniform(
float a) {
return vec3(a, a, a); }
537 pnanovdb_vec3_t pnanovdb_vec3_add(pnanovdb_vec3_t a, pnanovdb_vec3_t b) {
return a + b; }
538 pnanovdb_vec3_t pnanovdb_vec3_sub(pnanovdb_vec3_t a, pnanovdb_vec3_t b) {
return a - b; }
539 pnanovdb_vec3_t pnanovdb_vec3_mul(pnanovdb_vec3_t a, pnanovdb_vec3_t b) {
return a * b; }
540 pnanovdb_vec3_t pnanovdb_vec3_div(pnanovdb_vec3_t a, pnanovdb_vec3_t b) {
return a / b; }
541 pnanovdb_vec3_t pnanovdb_vec3_min(pnanovdb_vec3_t a, pnanovdb_vec3_t b) {
return min(a, b); }
542 pnanovdb_vec3_t pnanovdb_vec3_max(pnanovdb_vec3_t a, pnanovdb_vec3_t b) {
return max(a, b); }
543 pnanovdb_vec3_t pnanovdb_coord_to_vec3(
const pnanovdb_coord_t coord) {
return vec3(coord); }
544 pnanovdb_coord_t pnanovdb_coord_uniform(pnanovdb_int32_t a) {
return ivec3(a, a, a); }
545 pnanovdb_coord_t pnanovdb_coord_add(pnanovdb_coord_t a, pnanovdb_coord_t b) {
return a + b; }
552 #if defined(PNANOVDB_C) 553 #if defined(_MSC_VER) && (_MSC_VER >= 1928) && defined(PNANOVDB_USE_INTRINSICS) 554 return __popcnt(value);
555 #elif (defined(__GNUC__) || defined(__clang__)) && defined(PNANOVDB_USE_INTRINSICS) 556 return __builtin_popcount(value);
558 value = value - ((value >> 1) & 0x55555555);
559 value = (value & 0x33333333) + ((value >> 2) & 0x33333333);
560 value = (value + (value >> 4)) & 0x0F0F0F0F;
561 return (value * 0x01010101) >> 24;
563 #elif defined(PNANOVDB_HLSL) 564 return countbits(value);
565 #elif defined(PNANOVDB_GLSL) 566 return bitCount(value);
575 #if defined(PNANOVDB_ADDRESS_32) 578 pnanovdb_uint32_t low = pnanovdb_uint64_low(a);
579 pnanovdb_uint32_t high = pnanovdb_uint64_high(a);
585 return pnanovdb_uint32_as_uint64(low, high);
590 pnanovdb_uint32_t low = pnanovdb_uint64_low(a);
591 pnanovdb_uint32_t high = pnanovdb_uint64_high(a);
597 return pnanovdb_uint32_as_uint64(low, high);
602 pnanovdb_uint32_t low = pnanovdb_uint64_low(a);
603 pnanovdb_uint32_t high = pnanovdb_uint64_high(a);
606 ((low >> b) | ((b > 0) ? (high << (32u - b)) : 0u));
611 pnanovdb_uint32_t mask_low = bit_idx < 32u ? 1u << bit_idx : 0u;
612 pnanovdb_uint32_t mask_high = bit_idx >= 32u ? 1u << (bit_idx - 32u) : 0u;
613 return pnanovdb_uint32_as_uint64(mask_low, mask_high);
616 PNANOVDB_FORCE_INLINE pnanovdb_uint64_t
pnanovdb_uint64_and(pnanovdb_uint64_t a, pnanovdb_uint64_t b)
618 return pnanovdb_uint32_as_uint64(
619 pnanovdb_uint64_low(a) & pnanovdb_uint64_low(b),
620 pnanovdb_uint64_high(a) & pnanovdb_uint64_high(b)
626 return pnanovdb_uint64_low(a) != 0u || pnanovdb_uint64_high(a) != 0u;
642 return pnanovdb_uint64_low(a >> b);
647 return 1llu << bit_idx;
663 #if defined(PNANOVDB_ADDRESS_32) 664 struct pnanovdb_address_t
666 pnanovdb_uint32_t byte_offset;
668 PNANOVDB_STRUCT_TYPEDEF(pnanovdb_address_t)
670 PNANOVDB_FORCE_INLINE pnanovdb_address_t pnanovdb_address_offset(pnanovdb_address_t address, pnanovdb_uint32_t byte_offset)
672 pnanovdb_address_t ret = address;
673 ret.byte_offset += byte_offset;
676 PNANOVDB_FORCE_INLINE pnanovdb_address_t pnanovdb_address_offset_neg(pnanovdb_address_t address, pnanovdb_uint32_t byte_offset)
678 pnanovdb_address_t ret = address;
679 ret.byte_offset -= byte_offset;
682 PNANOVDB_FORCE_INLINE pnanovdb_address_t pnanovdb_address_offset_product(pnanovdb_address_t address, pnanovdb_uint32_t byte_offset, pnanovdb_uint32_t multiplier)
684 pnanovdb_address_t ret = address;
685 ret.byte_offset += byte_offset * multiplier;
688 PNANOVDB_FORCE_INLINE pnanovdb_address_t pnanovdb_address_offset64(pnanovdb_address_t address, pnanovdb_uint64_t byte_offset)
690 pnanovdb_address_t ret = address;
692 ret.byte_offset += pnanovdb_uint64_low(byte_offset);
695 PNANOVDB_FORCE_INLINE pnanovdb_address_t pnanovdb_address_offset64_product(pnanovdb_address_t address, pnanovdb_uint64_t byte_offset, pnanovdb_uint32_t multiplier)
697 pnanovdb_address_t ret = address;
698 ret.byte_offset += pnanovdb_uint64_low(byte_offset) * multiplier;
701 PNANOVDB_FORCE_INLINE pnanovdb_uint32_t pnanovdb_address_mask(pnanovdb_address_t address, pnanovdb_uint32_t mask)
703 return address.byte_offset & mask;
705 PNANOVDB_FORCE_INLINE pnanovdb_address_t pnanovdb_address_mask_inv(pnanovdb_address_t address, pnanovdb_uint32_t mask)
707 pnanovdb_address_t ret = address;
708 ret.byte_offset &= (~mask);
711 PNANOVDB_FORCE_INLINE pnanovdb_address_t pnanovdb_address_null()
713 pnanovdb_address_t ret = { 0 };
716 PNANOVDB_FORCE_INLINE pnanovdb_bool_t pnanovdb_address_is_null(pnanovdb_address_t address)
718 return address.byte_offset == 0u;
720 PNANOVDB_FORCE_INLINE pnanovdb_bool_t pnanovdb_address_in_interval(pnanovdb_address_t address, pnanovdb_address_t min_address, pnanovdb_address_t max_address)
722 return address.byte_offset >= min_address.byte_offset && address.byte_offset < max_address.byte_offset;
724 #elif defined(PNANOVDB_ADDRESS_64) 725 struct pnanovdb_address_t
727 pnanovdb_uint64_t byte_offset;
729 PNANOVDB_STRUCT_TYPEDEF(pnanovdb_address_t)
731 PNANOVDB_FORCE_INLINE pnanovdb_address_t pnanovdb_address_offset(pnanovdb_address_t address, pnanovdb_uint32_t byte_offset)
733 pnanovdb_address_t ret = address;
734 ret.byte_offset += byte_offset;
737 PNANOVDB_FORCE_INLINE pnanovdb_address_t pnanovdb_address_offset_neg(pnanovdb_address_t address, pnanovdb_uint32_t byte_offset)
739 pnanovdb_address_t ret = address;
740 ret.byte_offset -= byte_offset;
743 PNANOVDB_FORCE_INLINE pnanovdb_address_t pnanovdb_address_offset_product(pnanovdb_address_t address, pnanovdb_uint32_t byte_offset, pnanovdb_uint32_t multiplier)
745 pnanovdb_address_t ret = address;
746 ret.byte_offset += pnanovdb_uint32_as_uint64_low(byte_offset) * pnanovdb_uint32_as_uint64_low(multiplier);
749 PNANOVDB_FORCE_INLINE pnanovdb_address_t pnanovdb_address_offset64(pnanovdb_address_t address, pnanovdb_uint64_t byte_offset)
751 pnanovdb_address_t ret = address;
752 ret.byte_offset += byte_offset;
755 PNANOVDB_FORCE_INLINE pnanovdb_address_t pnanovdb_address_offset64_product(pnanovdb_address_t address, pnanovdb_uint64_t byte_offset, pnanovdb_uint32_t multiplier)
757 pnanovdb_address_t ret = address;
758 ret.byte_offset += byte_offset * pnanovdb_uint32_as_uint64_low(multiplier);
761 PNANOVDB_FORCE_INLINE pnanovdb_uint32_t pnanovdb_address_mask(pnanovdb_address_t address, pnanovdb_uint32_t mask)
763 return pnanovdb_uint64_low(address.byte_offset) & mask;
765 PNANOVDB_FORCE_INLINE pnanovdb_address_t pnanovdb_address_mask_inv(pnanovdb_address_t address, pnanovdb_uint32_t mask)
767 pnanovdb_address_t ret = address;
768 ret.byte_offset &= (~pnanovdb_uint32_as_uint64_low(mask));
771 PNANOVDB_FORCE_INLINE pnanovdb_address_t pnanovdb_address_null()
773 pnanovdb_address_t ret = { 0 };
776 PNANOVDB_FORCE_INLINE pnanovdb_bool_t pnanovdb_address_is_null(pnanovdb_address_t address)
778 return address.byte_offset == 0llu;
780 PNANOVDB_FORCE_INLINE pnanovdb_bool_t pnanovdb_address_in_interval(pnanovdb_address_t address, pnanovdb_address_t min_address, pnanovdb_address_t max_address)
782 return address.byte_offset >= min_address.byte_offset && address.byte_offset < max_address.byte_offset;
790 return pnanovdb_buf_read_uint32(buf, address.byte_offset);
794 return pnanovdb_buf_read_uint64(buf, address.byte_offset);
796 PNANOVDB_FORCE_INLINE pnanovdb_int32_t
pnanovdb_read_int32(pnanovdb_buf_t buf, pnanovdb_address_t address)
804 PNANOVDB_FORCE_INLINE pnanovdb_int64_t
pnanovdb_read_int64(pnanovdb_buf_t buf, pnanovdb_address_t address)
812 PNANOVDB_FORCE_INLINE pnanovdb_coord_t
pnanovdb_read_coord(pnanovdb_buf_t buf, pnanovdb_address_t address)
814 pnanovdb_coord_t ret;
815 ret.x = pnanovdb_uint32_as_int32(
pnanovdb_read_uint32(buf, pnanovdb_address_offset(address, 0u)));
816 ret.y = pnanovdb_uint32_as_int32(
pnanovdb_read_uint32(buf, pnanovdb_address_offset(address, 4u)));
817 ret.z = pnanovdb_uint32_as_int32(
pnanovdb_read_uint32(buf, pnanovdb_address_offset(address, 8u)));
820 PNANOVDB_FORCE_INLINE pnanovdb_vec3_t
pnanovdb_read_vec3(pnanovdb_buf_t buf, pnanovdb_address_t address)
832 return (raw >> (pnanovdb_address_mask(address, 2) << 3));
834 PNANOVDB_FORCE_INLINE pnanovdb_uint32_t
pnanovdb_read_uint8(pnanovdb_buf_t buf, pnanovdb_address_t address)
837 return (raw >> (pnanovdb_address_mask(address, 3) << 3)) & 255;
842 const float scale = 1.f / 65535.f;
843 ret.x = scale * pnanovdb_uint32_to_float(
pnanovdb_read_uint16(buf, pnanovdb_address_offset(address, 0u))) - 0.5f;
844 ret.y = scale * pnanovdb_uint32_to_float(
pnanovdb_read_uint16(buf, pnanovdb_address_offset(address, 2u))) - 0.5f;
845 ret.z = scale * pnanovdb_uint32_to_float(
pnanovdb_read_uint16(buf, pnanovdb_address_offset(address, 4u))) - 0.5f;
851 const float scale = 1.f / 255.f;
852 ret.x = scale * pnanovdb_uint32_to_float(
pnanovdb_read_uint8(buf, pnanovdb_address_offset(address, 0u))) - 0.5f;
853 ret.y = scale * pnanovdb_uint32_to_float(
pnanovdb_read_uint8(buf, pnanovdb_address_offset(address, 1u))) - 0.5f;
854 ret.z = scale * pnanovdb_uint32_to_float(
pnanovdb_read_uint8(buf, pnanovdb_address_offset(address, 2u))) - 0.5f;
858 PNANOVDB_FORCE_INLINE pnanovdb_bool_t
pnanovdb_read_bit(pnanovdb_buf_t buf, pnanovdb_address_t address, pnanovdb_uint32_t bit_offset)
860 pnanovdb_address_t word_address = pnanovdb_address_mask_inv(address, 3u);
861 pnanovdb_uint32_t bit_index = (pnanovdb_address_mask(address, 3u) << 3u) + bit_offset;
862 pnanovdb_uint32_t value_word = pnanovdb_buf_read_uint32(buf, word_address.byte_offset);
863 return ((value_word >> bit_index) & 1) != 0u;
866 #if defined(PNANOVDB_C) 867 PNANOVDB_FORCE_INLINE
short pnanovdb_read_half(pnanovdb_buf_t buf, pnanovdb_address_t address)
870 return (
short)(raw >> (pnanovdb_address_mask(address, 2) << 3));
872 #elif defined(PNANOVDB_HLSL) 873 PNANOVDB_FORCE_INLINE
float pnanovdb_read_half(pnanovdb_buf_t buf, pnanovdb_address_t address)
876 return f16tof32(raw >> (pnanovdb_address_mask(address, 2) << 3));
878 #elif defined(PNANOVDB_GLSL) 879 PNANOVDB_FORCE_INLINE
float pnanovdb_read_half(pnanovdb_buf_t buf, pnanovdb_address_t address)
882 return unpackHalf2x16(raw >> (pnanovdb_address_mask(address, 2) << 3)).x;
888 PNANOVDB_FORCE_INLINE
void pnanovdb_write_uint32(pnanovdb_buf_t buf, pnanovdb_address_t address, pnanovdb_uint32_t value)
890 pnanovdb_buf_write_uint32(buf, address.byte_offset, value);
892 PNANOVDB_FORCE_INLINE
void pnanovdb_write_uint64(pnanovdb_buf_t buf, pnanovdb_address_t address, pnanovdb_uint64_t value)
894 pnanovdb_buf_write_uint64(buf, address.byte_offset, value);
896 PNANOVDB_FORCE_INLINE
void pnanovdb_write_int32(pnanovdb_buf_t buf, pnanovdb_address_t address, pnanovdb_int32_t value)
900 PNANOVDB_FORCE_INLINE
void pnanovdb_write_int64(pnanovdb_buf_t buf, pnanovdb_address_t address, pnanovdb_int64_t value)
902 pnanovdb_buf_write_uint64(buf, address.byte_offset, pnanovdb_int64_as_uint64(value));
912 PNANOVDB_FORCE_INLINE
void pnanovdb_write_coord(pnanovdb_buf_t buf, pnanovdb_address_t address, PNANOVDB_IN(pnanovdb_coord_t) value)
914 pnanovdb_write_uint32(buf, pnanovdb_address_offset(address, 0u), pnanovdb_int32_as_uint32(PNANOVDB_DEREF(value).x));
915 pnanovdb_write_uint32(buf, pnanovdb_address_offset(address, 4u), pnanovdb_int32_as_uint32(PNANOVDB_DEREF(value).y));
916 pnanovdb_write_uint32(buf, pnanovdb_address_offset(address, 8u), pnanovdb_int32_as_uint32(PNANOVDB_DEREF(value).z));
918 PNANOVDB_FORCE_INLINE
void pnanovdb_write_vec3(pnanovdb_buf_t buf, pnanovdb_address_t address, PNANOVDB_IN(pnanovdb_vec3_t) value)
927 #define PNANOVDB_MAGIC_NUMBER 0x304244566f6e614eUL// "NanoVDB0" in hex - little endian (uint64_t) 928 #define PNANOVDB_MAGIC_GRID 0x314244566f6e614eUL// "NanoVDB1" in hex - little endian (uint64_t) 929 #define PNANOVDB_MAGIC_FILE 0x324244566f6e614eUL// "NanoVDB2" in hex - little endian (uint64_t) 931 #define PNANOVDB_MAJOR_VERSION_NUMBER 32// reflects changes to the ABI 932 #define PNANOVDB_MINOR_VERSION_NUMBER 6// reflects changes to the API but not ABI 933 #define PNANOVDB_PATCH_VERSION_NUMBER 0// reflects bug-fixes with no ABI or API changes 935 #define PNANOVDB_GRID_TYPE_UNKNOWN 0 936 #define PNANOVDB_GRID_TYPE_FLOAT 1 937 #define PNANOVDB_GRID_TYPE_DOUBLE 2 938 #define PNANOVDB_GRID_TYPE_INT16 3 939 #define PNANOVDB_GRID_TYPE_INT32 4 940 #define PNANOVDB_GRID_TYPE_INT64 5 941 #define PNANOVDB_GRID_TYPE_VEC3F 6 942 #define PNANOVDB_GRID_TYPE_VEC3D 7 943 #define PNANOVDB_GRID_TYPE_MASK 8 944 #define PNANOVDB_GRID_TYPE_HALF 9 945 #define PNANOVDB_GRID_TYPE_UINT32 10 946 #define PNANOVDB_GRID_TYPE_BOOLEAN 11 947 #define PNANOVDB_GRID_TYPE_RGBA8 12 948 #define PNANOVDB_GRID_TYPE_FP4 13 949 #define PNANOVDB_GRID_TYPE_FP8 14 950 #define PNANOVDB_GRID_TYPE_FP16 15 951 #define PNANOVDB_GRID_TYPE_FPN 16 952 #define PNANOVDB_GRID_TYPE_VEC4F 17 953 #define PNANOVDB_GRID_TYPE_VEC4D 18 954 #define PNANOVDB_GRID_TYPE_INDEX 19 955 #define PNANOVDB_GRID_TYPE_ONINDEX 20 956 #define PNANOVDB_GRID_TYPE_INDEXMASK 21 957 #define PNANOVDB_GRID_TYPE_ONINDEXMASK 22 958 #define PNANOVDB_GRID_TYPE_POINTINDEX 23 959 #define PNANOVDB_GRID_TYPE_VEC3U8 24 960 #define PNANOVDB_GRID_TYPE_VEC3U16 25 961 #define PNANOVDB_GRID_TYPE_END 26 963 #define PNANOVDB_GRID_CLASS_UNKNOWN 0 964 #define PNANOVDB_GRID_CLASS_LEVEL_SET 1 // narrow band level set, e.g. SDF 965 #define PNANOVDB_GRID_CLASS_FOG_VOLUME 2 // fog volume, e.g. density 966 #define PNANOVDB_GRID_CLASS_STAGGERED 3 // staggered MAC grid, e.g. velocity 967 #define PNANOVDB_GRID_CLASS_POINT_INDEX 4 // point index grid 968 #define PNANOVDB_GRID_CLASS_POINT_DATA 5 // point data grid 969 #define PNANOVDB_GRID_CLASS_TOPOLOGY 6 // grid with active states only (no values) 970 #define PNANOVDB_GRID_CLASS_VOXEL_VOLUME 7 // volume of geometric cubes, e.g. minecraft 971 #define PNANOVDB_GRID_CLASS_INDEX_GRID 8 // grid whose values are offsets, e.g. into an external array 972 #define PNANOVDB_GRID_CLASS_TENSOR_GRID 9 // grid which can have extra metadata and features 973 #define PNANOVDB_GRID_CLASS_END 10 975 #define PNANOVDB_GRID_FLAGS_HAS_LONG_GRID_NAME (1 << 0) 976 #define PNANOVDB_GRID_FLAGS_HAS_BBOX (1 << 1) 977 #define PNANOVDB_GRID_FLAGS_HAS_MIN_MAX (1 << 2) 978 #define PNANOVDB_GRID_FLAGS_HAS_AVERAGE (1 << 3) 979 #define PNANOVDB_GRID_FLAGS_HAS_STD_DEVIATION (1 << 4) 980 #define PNANOVDB_GRID_FLAGS_IS_BREADTH_FIRST (1 << 5) 981 #define PNANOVDB_GRID_FLAGS_END (1 << 6) 983 #define PNANOVDB_LEAF_TYPE_DEFAULT 0 984 #define PNANOVDB_LEAF_TYPE_LITE 1 985 #define PNANOVDB_LEAF_TYPE_FP 2 986 #define PNANOVDB_LEAF_TYPE_INDEX 3 987 #define PNANOVDB_LEAF_TYPE_INDEXMASK 4 988 #define PNANOVDB_LEAF_TYPE_POINTINDEX 5 992 PNANOVDB_STATIC_CONST pnanovdb_uint32_t
pnanovdb_grid_type_value_strides_bits[
PNANOVDB_GRID_TYPE_END] = { 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 };
994 PNANOVDB_STATIC_CONST pnanovdb_uint32_t
pnanovdb_grid_type_table_strides_bits[
PNANOVDB_GRID_TYPE_END] = { 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 };
996 PNANOVDB_STATIC_CONST pnanovdb_uint32_t
pnanovdb_grid_type_minmax_strides_bits[
PNANOVDB_GRID_TYPE_END] = { 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 };
998 PNANOVDB_STATIC_CONST pnanovdb_uint32_t
pnanovdb_grid_type_minmax_aligns_bits[
PNANOVDB_GRID_TYPE_END] = { 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 };
1000 PNANOVDB_STATIC_CONST pnanovdb_uint32_t
pnanovdb_grid_type_stat_strides_bits[
PNANOVDB_GRID_TYPE_END] = { 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 };
1002 PNANOVDB_STATIC_CONST pnanovdb_uint32_t
pnanovdb_grid_type_leaf_type[
PNANOVDB_GRID_TYPE_END] = { 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 };
1019 #define PNANOVDB_MAP_SIZE 264 1021 #define PNANOVDB_MAP_OFF_MATF 0 1022 #define PNANOVDB_MAP_OFF_INVMATF 36 1023 #define PNANOVDB_MAP_OFF_VECF 72 1024 #define PNANOVDB_MAP_OFF_TAPERF 84 1025 #define PNANOVDB_MAP_OFF_MATD 88 1026 #define PNANOVDB_MAP_OFF_INVMATD 160 1027 #define PNANOVDB_MAP_OFF_VECD 232 1028 #define PNANOVDB_MAP_OFF_TAPERD 256 1089 pnanovdb_uint32_t grid_name[256 / 4];
1091 double world_bbox[6];
1092 double voxel_size[3];
1097 pnanovdb_uint32_t pad[5];
1103 #define PNANOVDB_GRID_SIZE 672 1105 #define PNANOVDB_GRID_OFF_MAGIC 0 1106 #define PNANOVDB_GRID_OFF_CHECKSUM 8 1107 #define PNANOVDB_GRID_OFF_VERSION 16 1108 #define PNANOVDB_GRID_OFF_FLAGS 20 1109 #define PNANOVDB_GRID_OFF_GRID_INDEX 24 1110 #define PNANOVDB_GRID_OFF_GRID_COUNT 28 1111 #define PNANOVDB_GRID_OFF_GRID_SIZE 32 1112 #define PNANOVDB_GRID_OFF_GRID_NAME 40 1113 #define PNANOVDB_GRID_OFF_MAP 296 1114 #define PNANOVDB_GRID_OFF_WORLD_BBOX 560 1115 #define PNANOVDB_GRID_OFF_VOXEL_SIZE 608 1116 #define PNANOVDB_GRID_OFF_GRID_CLASS 632 1117 #define PNANOVDB_GRID_OFF_GRID_TYPE 636 1118 #define PNANOVDB_GRID_OFF_BLIND_METADATA_OFFSET 640 1119 #define PNANOVDB_GRID_OFF_BLIND_METADATA_COUNT 648 1212 PNANOVDB_FORCE_INLINE pnanovdb_uint32_t
pnanovdb_make_version(pnanovdb_uint32_t major, pnanovdb_uint32_t minor, pnanovdb_uint32_t patch_num)
1214 return (major << 21u) | (minor << 10u) | patch_num;
1219 return (version >> 21u) & ((1u << 11u) - 1u);
1223 return (version >> 10u) & ((1u << 11u) - 1u);
1227 return version & ((1u << 10u) - 1u);
1238 pnanovdb_uint32_t name[256 / 4];
1244 #define PNANOVDB_GRIDBLINDMETADATA_SIZE 288 1246 #define PNANOVDB_GRIDBLINDMETADATA_OFF_BYTE_OFFSET 0 1247 #define PNANOVDB_GRIDBLINDMETADATA_OFF_ELEMENT_COUNT 8 1248 #define PNANOVDB_GRIDBLINDMETADATA_OFF_FLAGS 16 1249 #define PNANOVDB_GRIDBLINDMETADATA_OFF_SEMANTIC 20 1250 #define PNANOVDB_GRIDBLINDMETADATA_OFF_DATA_CLASS 24 1251 #define PNANOVDB_GRIDBLINDMETADATA_OFF_DATA_TYPE 28 1252 #define PNANOVDB_GRIDBLINDMETADATA_OFF_NAME 32 1294 #define PNANOVDB_TREE_SIZE 64 1296 #define PNANOVDB_TREE_OFF_NODE_OFFSET_LEAF 0 1297 #define PNANOVDB_TREE_OFF_NODE_OFFSET_LOWER 8 1298 #define PNANOVDB_TREE_OFF_NODE_OFFSET_UPPER 16 1299 #define PNANOVDB_TREE_OFF_NODE_OFFSET_ROOT 24 1300 #define PNANOVDB_TREE_OFF_NODE_COUNT_LEAF 32 1301 #define PNANOVDB_TREE_OFF_NODE_COUNT_LOWER 36 1302 #define PNANOVDB_TREE_OFF_NODE_COUNT_UPPER 40 1303 #define PNANOVDB_TREE_OFF_TILE_COUNT_LEAF 44 1304 #define PNANOVDB_TREE_OFF_TILE_COUNT_LOWER 48 1305 #define PNANOVDB_TREE_OFF_TILE_COUNT_UPPER 52 1306 #define PNANOVDB_TREE_OFF_VOXEL_COUNT 56 1388 #define PNANOVDB_ROOT_BASE_SIZE 28 1390 #define PNANOVDB_ROOT_OFF_BBOX_MIN 0 1391 #define PNANOVDB_ROOT_OFF_BBOX_MAX 12 1392 #define PNANOVDB_ROOT_OFF_TABLE_SIZE 24 1426 #define PNANOVDB_ROOT_TILE_BASE_SIZE 20 1428 #define PNANOVDB_ROOT_TILE_OFF_KEY 0 1429 #define PNANOVDB_ROOT_TILE_OFF_CHILD 8 1430 #define PNANOVDB_ROOT_TILE_OFF_STATE 16 1457 pnanovdb_uint32_t value_mask[1024];
1458 pnanovdb_uint32_t child_mask[1024];
1466 #define PNANOVDB_UPPER_TABLE_COUNT 32768 1467 #define PNANOVDB_UPPER_BASE_SIZE 8224 1469 #define PNANOVDB_UPPER_OFF_BBOX_MIN 0 1470 #define PNANOVDB_UPPER_OFF_BBOX_MAX 12 1471 #define PNANOVDB_UPPER_OFF_FLAGS 24 1472 #define PNANOVDB_UPPER_OFF_VALUE_MASK 32 1473 #define PNANOVDB_UPPER_OFF_CHILD_MASK 4128 1486 return ((value >> (bit_index & 31u)) & 1) != 0u;
1490 return ((value >> (bit_index & 31u)) & 1) != 0u;
1502 if (!value) { valueMask &= ~(1u << (bit_index & 31u)); }
1503 if (value) valueMask |= (1u << (bit_index & 31u));
1512 pnanovdb_uint32_t value_mask[128];
1513 pnanovdb_uint32_t child_mask[128];
1521 #define PNANOVDB_LOWER_TABLE_COUNT 4096 1522 #define PNANOVDB_LOWER_BASE_SIZE 1056 1524 #define PNANOVDB_LOWER_OFF_BBOX_MIN 0 1525 #define PNANOVDB_LOWER_OFF_BBOX_MAX 12 1526 #define PNANOVDB_LOWER_OFF_FLAGS 24 1527 #define PNANOVDB_LOWER_OFF_VALUE_MASK 32 1528 #define PNANOVDB_LOWER_OFF_CHILD_MASK 544 1541 return ((value >> (bit_index & 31u)) & 1) != 0u;
1545 return ((value >> (bit_index & 31u)) & 1) != 0u;
1557 if (!value) { valueMask &= ~(1u << (bit_index & 31u)); }
1558 if (value) valueMask |= (1u << (bit_index & 31u));
1566 pnanovdb_uint32_t value_mask[16];
1574 #define PNANOVDB_LEAF_TABLE_COUNT 512 1575 #define PNANOVDB_LEAF_BASE_SIZE 80 1577 #define PNANOVDB_LEAF_OFF_BBOX_MIN 0 1578 #define PNANOVDB_LEAF_OFF_BBOX_DIF_AND_FLAGS 12 1579 #define PNANOVDB_LEAF_OFF_VALUE_MASK 16 1581 #define PNANOVDB_LEAF_TABLE_NEG_OFF_BBOX_DIF_AND_FLAGS 84 1582 #define PNANOVDB_LEAF_TABLE_NEG_OFF_MINIMUM 16 1583 #define PNANOVDB_LEAF_TABLE_NEG_OFF_QUANTUM 12 1593 return ((value >> (bit_index & 31u)) & 1) != 0u;
1639 {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},
1640 {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},
1641 {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},
1642 {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},
1643 {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},
1644 {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},
1645 {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},
1646 {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},
1647 {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},
1648 {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},
1649 {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},
1650 {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},
1651 {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},
1652 {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},
1653 {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},
1654 {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},
1655 {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},
1656 {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},
1657 {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},
1658 {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},
1659 {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},
1660 {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},
1661 {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},
1662 {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},
1663 {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},
1664 {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},
1673 meta.
address = pnanovdb_address_offset64(meta.
address, byte_offset);
1682 pnanovdb_address_t address = pnanovdb_address_offset64(meta.
address, pnanovdb_int64_as_uint64(byte_offset));
1697 root.
address = pnanovdb_address_offset64(root.
address, byte_offset);
1704 tile.
address = pnanovdb_address_offset(tile.
address, PNANOVDB_GRID_TYPE_GET(grid_type, root_size));
1705 tile.
address = pnanovdb_address_offset_product(tile.
address, PNANOVDB_GRID_TYPE_GET(grid_type, root_tile_size), n);
1712 tile.
address = pnanovdb_address_offset(tile.
address, PNANOVDB_GRID_TYPE_GET(grid_type, root_size));
1725 #if defined(PNANOVDB_NATIVE_64) 1726 pnanovdb_uint64_t iu = pnanovdb_int32_as_uint32(PNANOVDB_DEREF(ijk).x) >> 12u;
1727 pnanovdb_uint64_t ju = pnanovdb_int32_as_uint32(PNANOVDB_DEREF(ijk).y) >> 12u;
1728 pnanovdb_uint64_t ku = pnanovdb_int32_as_uint32(PNANOVDB_DEREF(ijk).z) >> 12u;
1729 return (ku) | (ju << 21u) | (iu << 42u);
1731 pnanovdb_uint32_t iu = pnanovdb_int32_as_uint32(PNANOVDB_DEREF(ijk).x) >> 12u;
1732 pnanovdb_uint32_t ju = pnanovdb_int32_as_uint32(PNANOVDB_DEREF(ijk).y) >> 12u;
1733 pnanovdb_uint32_t ku = pnanovdb_int32_as_uint32(PNANOVDB_DEREF(ijk).z) >> 12u;
1734 pnanovdb_uint32_t key_x = ku | (ju << 21);
1735 pnanovdb_uint32_t key_y = (iu << 10) | (ju >> 11);
1736 return pnanovdb_uint32_as_uint64(key_x, key_y);
1745 for (pnanovdb_uint32_t i = 0u; i < tile_count; i++)
1751 tile.
address = pnanovdb_address_offset(tile.
address, PNANOVDB_GRID_TYPE_GET(grid_type, root_tile_size));
1761 return (((PNANOVDB_DEREF(ijk).x & 7) >> 0) << (2 * 3)) +
1762 (((PNANOVDB_DEREF(ijk).y & 7) >> 0) << (3)) +
1763 ((PNANOVDB_DEREF(ijk).z & 7) >> 0);
1768 pnanovdb_uint32_t byte_offset = PNANOVDB_GRID_TYPE_GET(grid_type, leaf_off_min);
1769 return pnanovdb_address_offset(node.
address, byte_offset);
1774 pnanovdb_uint32_t byte_offset = PNANOVDB_GRID_TYPE_GET(grid_type, leaf_off_max);
1775 return pnanovdb_address_offset(node.
address, byte_offset);
1780 pnanovdb_uint32_t byte_offset = PNANOVDB_GRID_TYPE_GET(grid_type, leaf_off_ave);
1781 return pnanovdb_address_offset(node.
address, byte_offset);
1786 pnanovdb_uint32_t byte_offset = PNANOVDB_GRID_TYPE_GET(grid_type, leaf_off_stddev);
1787 return pnanovdb_address_offset(node.
address, byte_offset);
1792 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);
1793 return pnanovdb_address_offset(node.
address, byte_offset);
1804 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)
1807 pnanovdb_uint32_t value_bits = 1u << value_log_bits;
1808 pnanovdb_uint32_t value_mask = (1u << value_bits) - 1u;
1809 pnanovdb_uint32_t values_per_word_bits = 5u - value_log_bits;
1810 pnanovdb_uint32_t values_per_word_mask = (1u << values_per_word_bits) - 1u;
1815 pnanovdb_uint32_t raw =
pnanovdb_read_uint32(buf, pnanovdb_address_offset(address, ((n >> values_per_word_bits) << 2u)));
1816 pnanovdb_uint32_t value_compressed = (raw >> ((n & values_per_word_mask) << value_log_bits)) & value_mask;
1817 return pnanovdb_uint32_to_float(value_compressed) * quantum + minimum;
1838 pnanovdb_uint32_t flags = bbox_dif_and_flags >> 24u;
1839 pnanovdb_uint32_t value_log_bits = flags >> 5;
1905 pnanovdb_uint32_t word_idx = n >> 5;
1906 pnanovdb_uint32_t bit_idx = n & 31;
1907 pnanovdb_uint32_t val_mask =
1909 return (val_mask & (1u << bit_idx)) != 0u;
1913 pnanovdb_uint32_t word_idx = n >> 5;
1914 pnanovdb_uint32_t bit_idx = n & 31;
1915 pnanovdb_uint32_t val_mask =
1919 val_mask = val_mask | (1u << bit_idx);
1923 val_mask = val_mask & ~(1u << bit_idx);
1953 pnanovdb_uint64_t idx = pnanovdb_uint32_as_uint64_low(0u);
1964 pnanovdb_uint64_t idx = pnanovdb_uint32_as_uint64_low(0u);
1975 pnanovdb_uint64_t idx = pnanovdb_uint32_as_uint64_low(0u);
1986 pnanovdb_uint64_t idx = pnanovdb_uint32_as_uint64_low(0u);
1999 pnanovdb_uint32_t word_idx = n >> 6u;
2000 pnanovdb_uint32_t bit_idx = n & 63u;
2003 pnanovdb_uint64_t value_index = pnanovdb_uint32_as_uint64_low(0u);
2006 pnanovdb_uint32_t sum = 0u;
2010 pnanovdb_uint64_t prefix_sum =
pnanovdb_read_uint64(buf, pnanovdb_address_offset(value_address, 8u));
2055 pnanovdb_uint32_t word_idx = n >> 5;
2056 pnanovdb_uint32_t bit_idx = n & 31;
2057 pnanovdb_uint32_t val_mask =
2059 return (val_mask & (1u << bit_idx)) != 0u;
2063 pnanovdb_uint32_t word_idx = n >> 5;
2064 pnanovdb_uint32_t bit_idx = n & 31;
2065 pnanovdb_uint32_t val_mask =
2069 val_mask = val_mask | (1u << bit_idx);
2073 val_mask = val_mask & ~(1u << bit_idx);
2108 raw32 = (raw32 & 0xFFFF0000) | (value & 0x0000FFFF);
2112 raw32 = (raw32 & 0x0000FFFF) | (value << 16u);
2118 pnanovdb_uint32_t word_idx = i >> 5;
2119 pnanovdb_uint32_t bit_idx = i & 31;
2122 val_mask = val_mask | (1u << bit_idx);
2135 return (((PNANOVDB_DEREF(ijk).x & 127) >> 3) << (2 * 4)) +
2136 (((PNANOVDB_DEREF(ijk).y & 127) >> 3) << (4)) +
2137 ((PNANOVDB_DEREF(ijk).z & 127) >> 3);
2142 pnanovdb_uint32_t byte_offset = PNANOVDB_GRID_TYPE_GET(grid_type, lower_off_min);
2143 return pnanovdb_address_offset(node.
address, byte_offset);
2148 pnanovdb_uint32_t byte_offset = PNANOVDB_GRID_TYPE_GET(grid_type, lower_off_max);
2149 return pnanovdb_address_offset(node.
address, byte_offset);
2154 pnanovdb_uint32_t byte_offset = PNANOVDB_GRID_TYPE_GET(grid_type, lower_off_ave);
2155 return pnanovdb_address_offset(node.
address, byte_offset);
2160 pnanovdb_uint32_t byte_offset = PNANOVDB_GRID_TYPE_GET(grid_type, lower_off_stddev);
2161 return pnanovdb_address_offset(node.
address, byte_offset);
2166 pnanovdb_uint32_t byte_offset = PNANOVDB_GRID_TYPE_GET(grid_type, lower_off_table) + PNANOVDB_GRID_TYPE_GET(grid_type, table_stride) * n;
2167 return pnanovdb_address_offset(node.
address, byte_offset);
2186 pnanovdb_address_t value_address;
2191 PNANOVDB_DEREF(level) = 0u;
2196 PNANOVDB_DEREF(level) = 1u;
2198 return value_address;
2203 pnanovdb_uint32_t level;
2211 return (((PNANOVDB_DEREF(ijk).x & 4095) >> 7) << (2 * 5)) +
2212 (((PNANOVDB_DEREF(ijk).y & 4095) >> 7) << (5)) +
2213 ((PNANOVDB_DEREF(ijk).z & 4095) >> 7);
2218 pnanovdb_uint32_t byte_offset = PNANOVDB_GRID_TYPE_GET(grid_type, upper_off_min);
2219 return pnanovdb_address_offset(node.
address, byte_offset);
2224 pnanovdb_uint32_t byte_offset = PNANOVDB_GRID_TYPE_GET(grid_type, upper_off_max);
2225 return pnanovdb_address_offset(node.
address, byte_offset);
2230 pnanovdb_uint32_t byte_offset = PNANOVDB_GRID_TYPE_GET(grid_type, upper_off_ave);
2231 return pnanovdb_address_offset(node.
address, byte_offset);
2236 pnanovdb_uint32_t byte_offset = PNANOVDB_GRID_TYPE_GET(grid_type, upper_off_stddev);
2237 return pnanovdb_address_offset(node.
address, byte_offset);
2242 pnanovdb_uint32_t byte_offset = PNANOVDB_GRID_TYPE_GET(grid_type, upper_off_table) + PNANOVDB_GRID_TYPE_GET(grid_type, table_stride) * n;
2243 return pnanovdb_address_offset(node.
address, byte_offset);
2262 pnanovdb_address_t value_address;
2271 PNANOVDB_DEREF(level) = 2u;
2273 return value_address;
2278 pnanovdb_uint32_t level;
2292 pnanovdb_uint32_t byte_offset = PNANOVDB_GRID_TYPE_GET(grid_type, root_off_min);
2293 return pnanovdb_address_offset(root.
address, byte_offset);
2298 pnanovdb_uint32_t byte_offset = PNANOVDB_GRID_TYPE_GET(grid_type, root_off_max);
2299 return pnanovdb_address_offset(root.
address, byte_offset);
2304 pnanovdb_uint32_t byte_offset = PNANOVDB_GRID_TYPE_GET(grid_type, root_off_ave);
2305 return pnanovdb_address_offset(root.
address, byte_offset);
2310 pnanovdb_uint32_t byte_offset = PNANOVDB_GRID_TYPE_GET(grid_type, root_off_stddev);
2311 return pnanovdb_address_offset(root.
address, byte_offset);
2316 pnanovdb_uint32_t byte_offset = PNANOVDB_GRID_TYPE_GET(grid_type, root_tile_off_value);
2317 return pnanovdb_address_offset(root_tile.
address, byte_offset);
2323 pnanovdb_address_t ret;
2324 if (pnanovdb_address_is_null(tile.
address))
2326 ret = pnanovdb_address_offset(root.
address, PNANOVDB_GRID_TYPE_GET(grid_type, root_off_background));
2327 PNANOVDB_DEREF(level) = 4u;
2331 ret = pnanovdb_address_offset(tile.
address, PNANOVDB_GRID_TYPE_GET(grid_type, root_tile_off_value));
2332 PNANOVDB_DEREF(level) = 3u;
2344 pnanovdb_uint32_t level;
2350 pnanovdb_uint32_t level;
2352 PNANOVDB_DEREF(bit_index) = level == 0u ? pnanovdb_int32_as_uint32(PNANOVDB_DEREF(ijk).x & 7) : 0u;
2356 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)
2370 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)
2384 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)
2398 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)
2414 pnanovdb_uint64_t ret;
2428 pnanovdb_uint64_t ret;
2442 pnanovdb_address_t value_address,
2443 PNANOVDB_IN(pnanovdb_coord_t) ijk,
2444 pnanovdb_uint32_t level,
2445 PNANOVDB_INOUT(pnanovdb_uint64_t)range_begin,
2446 PNANOVDB_INOUT(pnanovdb_uint64_t)range_end
2449 pnanovdb_uint32_t local_range_begin = 0u;
2450 pnanovdb_uint32_t local_range_end = 0u;
2451 pnanovdb_uint64_t offset = pnanovdb_uint32_as_uint64_low(0u);
2466 return pnanovdb_uint32_as_uint64_low(local_range_end - local_range_begin);
2471 pnanovdb_grid_type_t value_type,
2472 pnanovdb_address_t value_address,
2473 pnanovdb_address_t blindmetadata_value_address,
2474 PNANOVDB_IN(pnanovdb_coord_t) ijk,
2475 pnanovdb_uint32_t level,
2476 PNANOVDB_INOUT(pnanovdb_address_t)address_begin,
2477 PNANOVDB_INOUT(pnanovdb_address_t)address_end
2480 pnanovdb_uint64_t range_begin;
2481 pnanovdb_uint64_t range_end;
2484 pnanovdb_uint32_t stride = 12u;
2493 PNANOVDB_DEREF(address_begin) = pnanovdb_address_offset64_product(blindmetadata_value_address, range_begin, stride);
2494 PNANOVDB_DEREF(address_end) = pnanovdb_address_offset64_product(blindmetadata_value_address, range_end, stride);
2512 PNANOVDB_DEREF(acc).key.x = 0x7FFFFFFF;
2513 PNANOVDB_DEREF(acc).key.y = 0x7FFFFFFF;
2514 PNANOVDB_DEREF(acc).key.z = 0x7FFFFFFF;
2515 PNANOVDB_DEREF(acc).leaf.address = pnanovdb_address_null();
2516 PNANOVDB_DEREF(acc).lower.address = pnanovdb_address_null();
2517 PNANOVDB_DEREF(acc).upper.address = pnanovdb_address_null();
2518 PNANOVDB_DEREF(acc).root = root;
2523 if (pnanovdb_address_is_null(PNANOVDB_DEREF(acc).leaf.
address)) {
return PNANOVDB_FALSE; }
2524 if ((dirty & ~((1u << 3) - 1u)) != 0)
2526 PNANOVDB_DEREF(acc).leaf.address = pnanovdb_address_null();
2527 return PNANOVDB_FALSE;
2529 return PNANOVDB_TRUE;
2533 if (pnanovdb_address_is_null(PNANOVDB_DEREF(acc).lower.
address)) {
return PNANOVDB_FALSE; }
2534 if ((dirty & ~((1u << 7) - 1u)) != 0)
2536 PNANOVDB_DEREF(acc).lower.address = pnanovdb_address_null();
2537 return PNANOVDB_FALSE;
2539 return PNANOVDB_TRUE;
2543 if (pnanovdb_address_is_null(PNANOVDB_DEREF(acc).upper.
address)) {
return PNANOVDB_FALSE; }
2544 if ((dirty & ~((1u << 12) - 1u)) != 0)
2546 PNANOVDB_DEREF(acc).upper.address = pnanovdb_address_null();
2547 return PNANOVDB_FALSE;
2549 return PNANOVDB_TRUE;
2553 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);
2565 pnanovdb_address_t value_address;
2569 PNANOVDB_DEREF(acc).leaf = child;
2570 PNANOVDB_DEREF(acc).key = PNANOVDB_DEREF(ijk);
2572 PNANOVDB_DEREF(level) = 0u;
2577 PNANOVDB_DEREF(level) = 1u;
2579 return value_address;
2584 pnanovdb_uint32_t level;
2597 pnanovdb_address_t value_address;
2601 PNANOVDB_DEREF(acc).lower = child;
2602 PNANOVDB_DEREF(acc).key = PNANOVDB_DEREF(ijk);
2608 PNANOVDB_DEREF(level) = 2u;
2610 return value_address;
2615 pnanovdb_uint32_t level;
2622 pnanovdb_address_t ret;
2623 if (pnanovdb_address_is_null(tile.
address))
2625 ret = pnanovdb_address_offset(root.
address, PNANOVDB_GRID_TYPE_GET(grid_type, root_off_background));
2626 PNANOVDB_DEREF(level) = 4u;
2630 ret = pnanovdb_address_offset(tile.
address, PNANOVDB_GRID_TYPE_GET(grid_type, root_tile_off_value));
2631 PNANOVDB_DEREF(level) = 3u;
2636 PNANOVDB_DEREF(acc).upper = child;
2637 PNANOVDB_DEREF(acc).key = PNANOVDB_DEREF(ijk);
2645 pnanovdb_uint32_t level;
2653 pnanovdb_address_t value_address;
2657 PNANOVDB_DEREF(level) = 0u;
2671 return value_address;
2676 pnanovdb_uint32_t level;
2682 pnanovdb_uint32_t level;
2684 PNANOVDB_DEREF(bit_index) = level == 0u ? pnanovdb_int32_as_uint32(PNANOVDB_DEREF(ijk).x & 7) : 0u;
2698 pnanovdb_uint32_t ret;
2702 PNANOVDB_DEREF(acc).leaf = child;
2703 PNANOVDB_DEREF(acc).key = PNANOVDB_DEREF(ijk);
2716 pnanovdb_uint32_t ret;
2720 PNANOVDB_DEREF(acc).lower = child;
2721 PNANOVDB_DEREF(acc).key = PNANOVDB_DEREF(ijk);
2726 ret = (1u << (4u + 3u));
2734 pnanovdb_uint32_t ret;
2735 if (pnanovdb_address_is_null(tile.
address))
2737 ret = 1u << (5u + 4u + 3u);
2741 ret = 1u << (5u + 4u + 3u);
2746 PNANOVDB_DEREF(acc).upper = child;
2747 PNANOVDB_DEREF(acc).key = PNANOVDB_DEREF(ijk);
2757 pnanovdb_uint32_t dim;
2788 pnanovdb_bool_t is_active;
2792 PNANOVDB_DEREF(acc).leaf = child;
2793 PNANOVDB_DEREF(acc).key = PNANOVDB_DEREF(ijk);
2806 pnanovdb_bool_t is_active;
2810 PNANOVDB_DEREF(acc).lower = child;
2811 PNANOVDB_DEREF(acc).key = PNANOVDB_DEREF(ijk);
2824 pnanovdb_bool_t is_active;
2825 if (pnanovdb_address_is_null(tile.
address))
2827 is_active = PNANOVDB_FALSE;
2832 is_active = state != 0u;
2837 PNANOVDB_DEREF(acc).upper = child;
2838 PNANOVDB_DEREF(acc).key = PNANOVDB_DEREF(ijk);
2848 pnanovdb_bool_t is_active;
2872 pnanovdb_vec3_t dst;
2873 float sx = PNANOVDB_DEREF(src).x;
2874 float sy = PNANOVDB_DEREF(src).y;
2875 float sz = PNANOVDB_DEREF(src).z;
2884 pnanovdb_vec3_t dst;
2896 pnanovdb_vec3_t dst;
2897 float sx = PNANOVDB_DEREF(src).x;
2898 float sy = PNANOVDB_DEREF(src).y;
2899 float sz = PNANOVDB_DEREF(src).z;
2908 pnanovdb_vec3_t dst;
2909 float sx = PNANOVDB_DEREF(src).x;
2910 float sy = PNANOVDB_DEREF(src).y;
2911 float sz = PNANOVDB_DEREF(src).z;
3027 0.14425f, 0.643275f, 0.830409f, 0.331384f, 0.105263f, 0.604289f, 0.167641f, 0.666667f,
3028 0.892788f, 0.393762f, 0.0818713f, 0.580897f, 0.853801f, 0.354776f, 0.916179f, 0.417154f,
3029 0.612086f, 0.11306f, 0.79922f, 0.300195f, 0.510721f, 0.0116959f, 0.947368f, 0.448343f,
3030 0.362573f, 0.861598f, 0.0506823f, 0.549708f, 0.261209f, 0.760234f, 0.19883f, 0.697856f,
3031 0.140351f, 0.639376f, 0.576998f, 0.0779727f, 0.522417f, 0.0233918f, 0.460039f, 0.959064f,
3032 0.888889f, 0.389864f, 0.327485f, 0.826511f, 0.272904f, 0.77193f, 0.709552f, 0.210526f,
3033 0.483431f, 0.982456f, 0.296296f, 0.795322f, 0.116959f, 0.615984f, 0.0545809f, 0.553606f,
3034 0.732943f, 0.233918f, 0.545809f, 0.0467836f, 0.865497f, 0.366472f, 0.803119f, 0.304094f,
3035 0.518519f, 0.0194932f, 0.45614f, 0.955166f, 0.729045f, 0.230019f, 0.54191f, 0.042885f,
3036 0.269006f, 0.768031f, 0.705653f, 0.206628f, 0.479532f, 0.978558f, 0.292398f, 0.791423f,
3037 0.237817f, 0.736842f, 0.424951f, 0.923977f, 0.136452f, 0.635478f, 0.323587f, 0.822612f,
3038 0.986355f, 0.487329f, 0.674464f, 0.175439f, 0.88499f, 0.385965f, 0.573099f, 0.0740741f,
3039 0.51462f, 0.0155945f, 0.202729f, 0.701754f, 0.148148f, 0.647174f, 0.834308f, 0.335283f,
3040 0.265107f, 0.764133f, 0.951267f, 0.452242f, 0.896686f, 0.397661f, 0.08577f, 0.584795f,
3041 0.8577f, 0.358674f, 0.920078f, 0.421053f, 0.740741f, 0.241715f, 0.678363f, 0.179337f,
3042 0.109162f, 0.608187f, 0.17154f, 0.670565f, 0.491228f, 0.990253f, 0.42885f, 0.927875f,
3043 0.0662768f, 0.565302f, 0.62768f, 0.128655f, 0.183236f, 0.682261f, 0.744639f, 0.245614f,
3044 0.814815f, 0.315789f, 0.378168f, 0.877193f, 0.931774f, 0.432749f, 0.495127f, 0.994152f,
3045 0.0350877f, 0.534113f, 0.97076f, 0.471735f, 0.214425f, 0.71345f, 0.526316f, 0.0272904f,
3046 0.783626f, 0.2846f, 0.222222f, 0.721248f, 0.962963f, 0.463938f, 0.276803f, 0.775828f,
3047 0.966862f, 0.467836f, 0.405458f, 0.904483f, 0.0701754f, 0.569201f, 0.881092f, 0.382066f,
3048 0.218324f, 0.717349f, 0.654971f, 0.155945f, 0.818713f, 0.319688f, 0.132554f, 0.631579f,
3049 0.0623782f, 0.561404f, 0.748538f, 0.249513f, 0.912281f, 0.413255f, 0.974659f, 0.475634f,
3050 0.810916f, 0.311891f, 0.499025f, 0.998051f, 0.163743f, 0.662768f, 0.226121f, 0.725146f,
3051 0.690058f, 0.191033f, 0.00389864f, 0.502924f, 0.557505f, 0.0584795f, 0.120858f, 0.619883f,
3052 0.440546f, 0.939571f, 0.752437f, 0.253411f, 0.307992f, 0.807018f, 0.869396f, 0.37037f,
3053 0.658869f, 0.159844f, 0.346979f, 0.846004f, 0.588694f, 0.0896686f, 0.152047f, 0.651072f,
3054 0.409357f, 0.908382f, 0.596491f, 0.0974659f, 0.339181f, 0.838207f, 0.900585f, 0.401559f,
3055 0.34308f, 0.842105f, 0.779727f, 0.280702f, 0.693957f, 0.194932f, 0.25731f, 0.756335f,
3056 0.592593f, 0.0935673f, 0.0311891f, 0.530214f, 0.444444f, 0.94347f, 0.506823f, 0.00779727f,
3057 0.68616f, 0.187135f, 0.124756f, 0.623782f, 0.288499f, 0.787524f, 0.350877f, 0.849903f,
3058 0.436647f, 0.935673f, 0.873294f, 0.374269f, 0.538012f, 0.0389864f, 0.60039f, 0.101365f,
3059 0.57115f, 0.0721248f, 0.758285f, 0.259259f, 0.719298f, 0.220273f, 0.532164f, 0.0331384f,
3060 0.321637f, 0.820663f, 0.00974659f, 0.508772f, 0.469786f, 0.968811f, 0.282651f, 0.781676f,
3061 0.539961f, 0.0409357f, 0.727096f, 0.22807f, 0.500975f, 0.00194932f, 0.563353f, 0.0643275f,
3062 0.290448f, 0.789474f, 0.477583f, 0.976608f, 0.251462f, 0.750487f, 0.31384f, 0.812865f,
3063 0.94152f, 0.442495f, 0.879142f, 0.380117f, 0.37232f, 0.871345f, 0.309942f, 0.808967f,
3064 0.192982f, 0.692008f, 0.130604f, 0.62963f, 0.621832f, 0.122807f, 0.559454f, 0.0604289f,
3065 0.660819f, 0.161793f, 0.723197f, 0.224172f, 0.403509f, 0.902534f, 0.840156f, 0.341131f,
3066 0.411306f, 0.910331f, 0.473684f, 0.97271f, 0.653021f, 0.153996f, 0.0916179f, 0.590643f,
3067 0.196881f, 0.695906f, 0.384016f, 0.883041f, 0.0955166f, 0.594542f, 0.157895f, 0.65692f,
3068 0.945419f, 0.446394f, 0.633528f, 0.134503f, 0.844055f, 0.345029f, 0.906433f, 0.407407f,
3069 0.165692f, 0.664717f, 0.103314f, 0.602339f, 0.126706f, 0.625731f, 0.189084f, 0.688109f,
3070 0.91423f, 0.415205f, 0.851852f, 0.352827f, 0.875244f, 0.376218f, 0.937622f, 0.438596f,
3071 0.317739f, 0.816764f, 0.255361f, 0.754386f, 0.996101f, 0.497076f, 0.933723f, 0.434698f,
3072 0.567251f, 0.0682261f, 0.504873f, 0.00584795f, 0.247563f, 0.746589f, 0.185185f, 0.684211f,
3073 0.037037f, 0.536062f, 0.0994152f, 0.598441f, 0.777778f, 0.278752f, 0.465887f, 0.964912f,
3074 0.785575f, 0.28655f, 0.847953f, 0.348928f, 0.0292398f, 0.528265f, 0.7154f, 0.216374f,
3075 0.39961f, 0.898636f, 0.961014f, 0.461988f, 0.0487329f, 0.547758f, 0.111111f, 0.610136f,
3076 0.649123f, 0.150097f, 0.212476f, 0.711501f, 0.797271f, 0.298246f, 0.859649f, 0.360624f,
3077 0.118908f, 0.617934f, 0.0565302f, 0.555556f, 0.329435f, 0.82846f, 0.516569f, 0.0175439f,
3078 0.867446f, 0.368421f, 0.805068f, 0.306043f, 0.578947f, 0.079922f, 0.267057f, 0.766082f,
3079 0.270955f, 0.76998f, 0.707602f, 0.208577f, 0.668616f, 0.169591f, 0.606238f, 0.107212f,
3080 0.520468f, 0.0214425f, 0.45809f, 0.957115f, 0.419103f, 0.918129f, 0.356725f, 0.855751f,
3081 0.988304f, 0.489279f, 0.426901f, 0.925926f, 0.450292f, 0.949318f, 0.512671f, 0.0136452f,
3082 0.239766f, 0.738791f, 0.676413f, 0.177388f, 0.699805f, 0.20078f, 0.263158f, 0.762183f,
3083 0.773879f, 0.274854f, 0.337232f, 0.836257f, 0.672515f, 0.173489f, 0.734893f, 0.235867f,
3084 0.0253411f, 0.524366f, 0.586745f, 0.0877193f, 0.423002f, 0.922027f, 0.48538f, 0.984405f,
3085 0.74269f, 0.243665f, 0.680312f, 0.181287f, 0.953216f, 0.454191f, 0.1423f, 0.641326f,
3086 0.493177f, 0.992203f, 0.430799f, 0.929825f, 0.204678f, 0.703704f, 0.890838f, 0.391813f,
3087 0.894737f, 0.395712f, 0.0838207f, 0.582846f, 0.0448343f, 0.54386f, 0.231969f, 0.730994f,
3088 0.146199f, 0.645224f, 0.832359f, 0.333333f, 0.793372f, 0.294347f, 0.980507f, 0.481481f,
3089 0.364522f, 0.863548f, 0.80117f, 0.302144f, 0.824561f, 0.325536f, 0.138402f, 0.637427f,
3090 0.614035f, 0.11501f, 0.0526316f, 0.551657f, 0.0760234f, 0.575049f, 0.88694f, 0.387914f,
3095 return enabled ? pnanovdb_dither_lut[offset & 511] : 0.5f;
3100 #ifdef PNANOVDB_HDDA 3103 #define PNANOVDB_ENFORCE_FORWARD_STEPPING 3105 #define PNANOVDB_HDDA_FLOAT_MAX 1e38f 3107 struct pnanovdb_hdda_t
3109 pnanovdb_int32_t dim;
3112 pnanovdb_coord_t voxel;
3113 pnanovdb_coord_t step;
3114 pnanovdb_vec3_t delta;
3115 pnanovdb_vec3_t next;
3117 PNANOVDB_STRUCT_TYPEDEF(pnanovdb_hdda_t)
3119 PNANOVDB_FORCE_INLINE pnanovdb_coord_t pnanovdb_hdda_pos_to_ijk(PNANOVDB_IN(pnanovdb_vec3_t) pos)
3121 pnanovdb_coord_t voxel;
3122 voxel.x = pnanovdb_float_to_int32(pnanovdb_floor(PNANOVDB_DEREF(pos).x));
3123 voxel.y = pnanovdb_float_to_int32(pnanovdb_floor(PNANOVDB_DEREF(pos).y));
3124 voxel.z = pnanovdb_float_to_int32(pnanovdb_floor(PNANOVDB_DEREF(pos).z));
3128 PNANOVDB_FORCE_INLINE pnanovdb_coord_t pnanovdb_hdda_pos_to_voxel(PNANOVDB_IN(pnanovdb_vec3_t) pos,
int dim)
3130 pnanovdb_coord_t voxel;
3131 voxel.x = pnanovdb_float_to_int32(pnanovdb_floor(PNANOVDB_DEREF(pos).x)) & (~(dim - 1));
3132 voxel.y = pnanovdb_float_to_int32(pnanovdb_floor(PNANOVDB_DEREF(pos).y)) & (~(dim - 1));
3133 voxel.z = pnanovdb_float_to_int32(pnanovdb_floor(PNANOVDB_DEREF(pos).z)) & (~(dim - 1));
3137 PNANOVDB_FORCE_INLINE pnanovdb_vec3_t pnanovdb_hdda_ray_start(PNANOVDB_IN(pnanovdb_vec3_t) origin,
float tmin, PNANOVDB_IN(pnanovdb_vec3_t) direction)
3139 pnanovdb_vec3_t pos = pnanovdb_vec3_add(
3140 pnanovdb_vec3_mul(PNANOVDB_DEREF(direction), pnanovdb_vec3_uniform(tmin)),
3141 PNANOVDB_DEREF(origin)
3146 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)
3148 PNANOVDB_DEREF(hdda).dim = dim;
3149 PNANOVDB_DEREF(hdda).tmin = tmin;
3150 PNANOVDB_DEREF(hdda).tmax = tmax;
3152 pnanovdb_vec3_t pos = pnanovdb_hdda_ray_start(origin, tmin, direction);
3153 pnanovdb_vec3_t dir_inv = pnanovdb_vec3_div(pnanovdb_vec3_uniform(1.f), PNANOVDB_DEREF(direction));
3155 PNANOVDB_DEREF(hdda).voxel = pnanovdb_hdda_pos_to_voxel(PNANOVDB_REF(pos), dim);
3158 if (PNANOVDB_DEREF(direction).x == 0.f)
3160 PNANOVDB_DEREF(hdda).next.x = PNANOVDB_HDDA_FLOAT_MAX;
3161 PNANOVDB_DEREF(hdda).step.x = 0;
3162 PNANOVDB_DEREF(hdda).delta.x = 0.f;
3164 else if (dir_inv.x > 0.f)
3166 PNANOVDB_DEREF(hdda).step.x = 1;
3167 PNANOVDB_DEREF(hdda).next.x = PNANOVDB_DEREF(hdda).tmin + (PNANOVDB_DEREF(hdda).voxel.x + dim - pos.x) * dir_inv.x;
3168 PNANOVDB_DEREF(hdda).delta.x = dir_inv.x;
3172 PNANOVDB_DEREF(hdda).step.x = -1;
3173 PNANOVDB_DEREF(hdda).next.x = PNANOVDB_DEREF(hdda).tmin + (PNANOVDB_DEREF(hdda).voxel.x - pos.x) * dir_inv.x;
3174 PNANOVDB_DEREF(hdda).delta.x = -dir_inv.x;
3178 if (PNANOVDB_DEREF(direction).y == 0.f)
3180 PNANOVDB_DEREF(hdda).next.y = PNANOVDB_HDDA_FLOAT_MAX;
3181 PNANOVDB_DEREF(hdda).step.y = 0;
3182 PNANOVDB_DEREF(hdda).delta.y = 0.f;
3184 else if (dir_inv.y > 0.f)
3186 PNANOVDB_DEREF(hdda).step.y = 1;
3187 PNANOVDB_DEREF(hdda).next.y = PNANOVDB_DEREF(hdda).tmin + (PNANOVDB_DEREF(hdda).voxel.y + dim - pos.y) * dir_inv.y;
3188 PNANOVDB_DEREF(hdda).delta.y = dir_inv.y;
3192 PNANOVDB_DEREF(hdda).step.y = -1;
3193 PNANOVDB_DEREF(hdda).next.y = PNANOVDB_DEREF(hdda).tmin + (PNANOVDB_DEREF(hdda).voxel.y - pos.y) * dir_inv.y;
3194 PNANOVDB_DEREF(hdda).delta.y = -dir_inv.y;
3198 if (PNANOVDB_DEREF(direction).z == 0.f)
3200 PNANOVDB_DEREF(hdda).next.z = PNANOVDB_HDDA_FLOAT_MAX;
3201 PNANOVDB_DEREF(hdda).step.z = 0;
3202 PNANOVDB_DEREF(hdda).delta.z = 0.f;
3204 else if (dir_inv.z > 0.f)
3206 PNANOVDB_DEREF(hdda).step.z = 1;
3207 PNANOVDB_DEREF(hdda).next.z = PNANOVDB_DEREF(hdda).tmin + (PNANOVDB_DEREF(hdda).voxel.z + dim - pos.z) * dir_inv.z;
3208 PNANOVDB_DEREF(hdda).delta.z = dir_inv.z;
3212 PNANOVDB_DEREF(hdda).step.z = -1;
3213 PNANOVDB_DEREF(hdda).next.z = PNANOVDB_DEREF(hdda).tmin + (PNANOVDB_DEREF(hdda).voxel.z - pos.z) * dir_inv.z;
3214 PNANOVDB_DEREF(hdda).delta.z = -dir_inv.z;
3218 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)
3220 if (PNANOVDB_DEREF(hdda).dim == dim)
3222 return PNANOVDB_FALSE;
3224 PNANOVDB_DEREF(hdda).dim = dim;
3226 pnanovdb_vec3_t pos = pnanovdb_vec3_add(
3227 pnanovdb_vec3_mul(PNANOVDB_DEREF(direction), pnanovdb_vec3_uniform(PNANOVDB_DEREF(hdda).tmin)),
3228 PNANOVDB_DEREF(origin)
3230 pnanovdb_vec3_t dir_inv = pnanovdb_vec3_div(pnanovdb_vec3_uniform(1.f), PNANOVDB_DEREF(direction));
3232 PNANOVDB_DEREF(hdda).voxel = pnanovdb_hdda_pos_to_voxel(PNANOVDB_REF(pos), dim);
3234 if (PNANOVDB_DEREF(hdda).step.x != 0)
3236 PNANOVDB_DEREF(hdda).next.x = PNANOVDB_DEREF(hdda).tmin + (PNANOVDB_DEREF(hdda).voxel.x - pos.x) * dir_inv.x;
3237 if (PNANOVDB_DEREF(hdda).step.x > 0)
3239 PNANOVDB_DEREF(hdda).next.x += dim * dir_inv.x;
3242 if (PNANOVDB_DEREF(hdda).step.y != 0)
3244 PNANOVDB_DEREF(hdda).next.y = PNANOVDB_DEREF(hdda).tmin + (PNANOVDB_DEREF(hdda).voxel.y - pos.y) * dir_inv.y;
3245 if (PNANOVDB_DEREF(hdda).step.y > 0)
3247 PNANOVDB_DEREF(hdda).next.y += dim * dir_inv.y;
3250 if (PNANOVDB_DEREF(hdda).step.z != 0)
3252 PNANOVDB_DEREF(hdda).next.z = PNANOVDB_DEREF(hdda).tmin + (PNANOVDB_DEREF(hdda).voxel.z - pos.z) * dir_inv.z;
3253 if (PNANOVDB_DEREF(hdda).step.z > 0)
3255 PNANOVDB_DEREF(hdda).next.z += dim * dir_inv.z;
3259 return PNANOVDB_TRUE;
3262 PNANOVDB_FORCE_INLINE pnanovdb_bool_t pnanovdb_hdda_step(PNANOVDB_INOUT(pnanovdb_hdda_t) hdda)
3264 pnanovdb_bool_t ret;
3265 if (PNANOVDB_DEREF(hdda).next.x < PNANOVDB_DEREF(hdda).next.y && PNANOVDB_DEREF(hdda).next.x < PNANOVDB_DEREF(hdda).next.z)
3267 #ifdef PNANOVDB_ENFORCE_FORWARD_STEPPING 3268 if (PNANOVDB_DEREF(hdda).next.x <= PNANOVDB_DEREF(hdda).tmin)
3270 PNANOVDB_DEREF(hdda).next.x += PNANOVDB_DEREF(hdda).tmin - 0.999999f * PNANOVDB_DEREF(hdda).next.x + 1.0e-6f;
3273 PNANOVDB_DEREF(hdda).tmin = PNANOVDB_DEREF(hdda).next.x;
3274 PNANOVDB_DEREF(hdda).next.x += PNANOVDB_DEREF(hdda).dim * PNANOVDB_DEREF(hdda).delta.x;
3275 PNANOVDB_DEREF(hdda).voxel.x += PNANOVDB_DEREF(hdda).dim * PNANOVDB_DEREF(hdda).step.x;
3276 ret = PNANOVDB_DEREF(hdda).tmin <= PNANOVDB_DEREF(hdda).tmax;
3278 else if (PNANOVDB_DEREF(hdda).next.y < PNANOVDB_DEREF(hdda).next.z)
3280 #ifdef PNANOVDB_ENFORCE_FORWARD_STEPPING 3281 if (PNANOVDB_DEREF(hdda).next.y <= PNANOVDB_DEREF(hdda).tmin)
3283 PNANOVDB_DEREF(hdda).next.y += PNANOVDB_DEREF(hdda).tmin - 0.999999f * PNANOVDB_DEREF(hdda).next.y + 1.0e-6f;
3286 PNANOVDB_DEREF(hdda).tmin = PNANOVDB_DEREF(hdda).next.y;
3287 PNANOVDB_DEREF(hdda).next.y += PNANOVDB_DEREF(hdda).dim * PNANOVDB_DEREF(hdda).delta.y;
3288 PNANOVDB_DEREF(hdda).voxel.y += PNANOVDB_DEREF(hdda).dim * PNANOVDB_DEREF(hdda).step.y;
3289 ret = PNANOVDB_DEREF(hdda).tmin <= PNANOVDB_DEREF(hdda).tmax;
3293 #ifdef PNANOVDB_ENFORCE_FORWARD_STEPPING 3294 if (PNANOVDB_DEREF(hdda).next.z <= PNANOVDB_DEREF(hdda).tmin)
3296 PNANOVDB_DEREF(hdda).next.z += PNANOVDB_DEREF(hdda).tmin - 0.999999f * PNANOVDB_DEREF(hdda).next.z + 1.0e-6f;
3299 PNANOVDB_DEREF(hdda).tmin = PNANOVDB_DEREF(hdda).next.z;
3300 PNANOVDB_DEREF(hdda).next.z += PNANOVDB_DEREF(hdda).dim * PNANOVDB_DEREF(hdda).delta.z;
3301 PNANOVDB_DEREF(hdda).voxel.z += PNANOVDB_DEREF(hdda).dim * PNANOVDB_DEREF(hdda).step.z;
3302 ret = PNANOVDB_DEREF(hdda).tmin <= PNANOVDB_DEREF(hdda).tmax;
3307 PNANOVDB_FORCE_INLINE pnanovdb_bool_t pnanovdb_hdda_ray_clip(
3308 PNANOVDB_IN(pnanovdb_vec3_t) bbox_min,
3309 PNANOVDB_IN(pnanovdb_vec3_t) bbox_max,
3310 PNANOVDB_IN(pnanovdb_vec3_t) origin, PNANOVDB_INOUT(
float) tmin,
3311 PNANOVDB_IN(pnanovdb_vec3_t) direction, PNANOVDB_INOUT(
float) tmax
3314 pnanovdb_vec3_t dir_inv = pnanovdb_vec3_div(pnanovdb_vec3_uniform(1.f), PNANOVDB_DEREF(direction));
3315 pnanovdb_vec3_t t0 = pnanovdb_vec3_mul(pnanovdb_vec3_sub(PNANOVDB_DEREF(bbox_min), PNANOVDB_DEREF(origin)), dir_inv);
3316 pnanovdb_vec3_t t1 = pnanovdb_vec3_mul(pnanovdb_vec3_sub(PNANOVDB_DEREF(bbox_max), PNANOVDB_DEREF(origin)), dir_inv);
3317 pnanovdb_vec3_t tmin3 = pnanovdb_vec3_min(t0, t1);
3318 pnanovdb_vec3_t tmax3 = pnanovdb_vec3_max(t0, t1);
3319 float tnear = pnanovdb_max(tmin3.x, pnanovdb_max(tmin3.y, tmin3.z));
3320 float tfar = pnanovdb_min(tmax3.x, pnanovdb_min(tmax3.y, tmax3.z));
3321 pnanovdb_bool_t hit = tnear <= tfar;
3322 PNANOVDB_DEREF(tmin) = pnanovdb_max(PNANOVDB_DEREF(tmin), tnear);
3323 PNANOVDB_DEREF(tmax) = pnanovdb_min(PNANOVDB_DEREF(tmax), tfar);
3327 PNANOVDB_FORCE_INLINE pnanovdb_bool_t pnanovdb_hdda_zero_crossing(
3328 pnanovdb_grid_type_t grid_type,
3331 PNANOVDB_IN(pnanovdb_vec3_t) origin,
float tmin,
3332 PNANOVDB_IN(pnanovdb_vec3_t) direction,
float tmax,
3333 PNANOVDB_INOUT(
float) thit,
3334 PNANOVDB_INOUT(
float) v
3339 pnanovdb_vec3_t bbox_minf = pnanovdb_coord_to_vec3(bbox_min);
3340 pnanovdb_vec3_t bbox_maxf = pnanovdb_coord_to_vec3(pnanovdb_coord_add(bbox_max, pnanovdb_coord_uniform(1)));
3342 pnanovdb_bool_t hit = pnanovdb_hdda_ray_clip(PNANOVDB_REF(bbox_minf), PNANOVDB_REF(bbox_maxf), origin, PNANOVDB_REF(tmin), direction, PNANOVDB_REF(tmax));
3343 if (!hit || tmax > 1.0e20f)
3345 return PNANOVDB_FALSE;
3348 pnanovdb_vec3_t pos = pnanovdb_hdda_ray_start(origin, tmin, direction);
3349 pnanovdb_coord_t ijk = pnanovdb_hdda_pos_to_ijk(PNANOVDB_REF(pos));
3355 pnanovdb_hdda_t hdda;
3356 pnanovdb_hdda_init(PNANOVDB_REF(hdda), origin, tmin, direction, tmax, dim);
3357 while (pnanovdb_hdda_step(PNANOVDB_REF(hdda)))
3359 pnanovdb_vec3_t pos_start = pnanovdb_hdda_ray_start(origin, hdda.tmin + 1.0001f, direction);
3360 ijk = pnanovdb_hdda_pos_to_ijk(PNANOVDB_REF(pos_start));
3362 pnanovdb_hdda_update(PNANOVDB_REF(hdda), origin, direction, dim);
3372 if (PNANOVDB_DEREF(v) * v0 < 0.f)
3374 PNANOVDB_DEREF(thit) = hdda.tmin;
3375 return PNANOVDB_TRUE;
3379 return PNANOVDB_FALSE;
3384 #endif // end of NANOVDB_PNANOVDB_H_HAS_BEEN_INCLUDED pnanovdb_map_t map
Definition: PNanoVDB.h:1090
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:2356
#define PNANOVDB_GRID_TYPE_END
Definition: PNanoVDB.h:961
pnanovdb_uint32_t node_count_lower
Definition: PNanoVDB.h:1283
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:2930
PNANOVDB_FORCE_INLINE double pnanovdb_map_get_taperd(pnanovdb_buf_t buf, pnanovdb_map_handle_t p, pnanovdb_uint32_t index)
Definition: PNanoVDB.h:1051
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:1820
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:2384
PNANOVDB_FORCE_INLINE pnanovdb_uint32_t pnanovdb_tree_get_tile_count_leaf(pnanovdb_buf_t buf, pnanovdb_tree_handle_t p)
Definition: PNanoVDB.h:1329
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:2234
pnanovdb_coord_t bbox_max
Definition: PNanoVDB.h:1510
PNANOVDB_FORCE_INLINE pnanovdb_uint32_t pnanovdb_tree_get_node_count_lower(pnanovdb_buf_t buf, pnanovdb_tree_handle_t p)
Definition: PNanoVDB.h:1323
PNANOVDB_FORCE_INLINE pnanovdb_vec3_t pnanovdb_read_vec3u16(pnanovdb_buf_t buf, pnanovdb_address_t address)
Definition: PNanoVDB.h:839
PNANOVDB_FORCE_INLINE pnanovdb_uint64_t pnanovdb_leaf_pointindex_get_offset(pnanovdb_buf_t buf, pnanovdb_leaf_handle_t leaf)
Definition: PNanoVDB.h:2080
#define PNANOVDB_ROOT_TILE_OFF_KEY
Definition: PNanoVDB.h:1428
PNANOVDB_FORCE_INLINE pnanovdb_uint64_t pnanovdb_leaf_onindexmask_get_last_offset(pnanovdb_buf_t buf, pnanovdb_leaf_handle_t leaf)
Definition: PNanoVDB.h:2025
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:1551
#define PNANOVDB_GRIDBLINDMETADATA_OFF_BYTE_OFFSET
Definition: PNanoVDB.h:1246
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:2844
#define PNANOVDB_GRID_SIZE
Definition: PNanoVDB.h:1103
PNANOVDB_FORCE_INLINE pnanovdb_root_handle_t pnanovdb_tree_get_root(pnanovdb_buf_t buf, pnanovdb_tree_handle_t tree)
Definition: PNanoVDB.h:1693
pnanovdb_uint32_t grid_type
Definition: PNanoVDB.h:1094
pnanovdb_uint32_t root_tile_size
Definition: PNanoVDB.h:1614
PNANOVDB_FORCE_INLINE pnanovdb_uint32_t pnanovdb_gridblindmetadata_get_data_type(pnanovdb_buf_t buf, pnanovdb_gridblindmetadata_handle_t p)
Definition: PNanoVDB.h:1269
PNANOVDB_STATIC_CONST pnanovdb_uint32_t pnanovdb_grid_type_minmax_strides_bits[26]
Definition: PNanoVDB.h:996
#define PNANOVDB_GRID_TYPE_VEC3U16
Definition: PNanoVDB.h:960
PNANOVDB_FORCE_INLINE pnanovdb_uint32_t pnanovdb_read_uint32(pnanovdb_buf_t buf, pnanovdb_address_t address)
Definition: PNanoVDB.h:788
PNANOVDB_FORCE_INLINE pnanovdb_uint64_t pnanovdb_leaf_index_get_min_index(pnanovdb_buf_t buf, pnanovdb_address_t min_address)
Definition: PNanoVDB.h:1850
Definition: PNanoVDB.h:1603
pnanovdb_lower_handle_t lower
Definition: PNanoVDB.h:2504
#define PNANOVDB_LEAF_OFF_BBOX_MIN
Definition: PNanoVDB.h:1577
#define PNANOVDB_UPPER_OFF_FLAGS
Definition: PNanoVDB.h:1471
PNANOVDB_FORCE_INLINE void pnanovdb_write_int32(pnanovdb_buf_t buf, pnanovdb_address_t address, pnanovdb_int32_t value)
Definition: PNanoVDB.h:896
Definition: PNanoVDB.h:1291
Definition: PNanoVDB.h:1080
#define PNANOVDB_MAP_OFF_MATF
Definition: PNanoVDB.h:1021
#define PNANOVDB_UPPER_OFF_BBOX_MAX
Definition: PNanoVDB.h:1470
pnanovdb_upper_handle_t upper
Definition: PNanoVDB.h:2505
#define PNANOVDB_LOWER_OFF_BBOX_MAX
Definition: PNanoVDB.h:1525
Definition: PNanoVDB.h:1518
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:1448
PNANOVDB_FORCE_INLINE pnanovdb_uint64_t pnanovdb_leaf_indexmask_get_ave_index(pnanovdb_buf_t buf, pnanovdb_address_t ave_address)
Definition: PNanoVDB.h:1891
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:2125
#define PNANOVDB_GRID_OFF_MAGIC
Definition: PNanoVDB.h:1105
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:2308
PNANOVDB_FORCE_INLINE pnanovdb_uint64_t pnanovdb_leaf_index_get_ave_index(pnanovdb_buf_t buf, pnanovdb_address_t ave_address)
Definition: PNanoVDB.h:1860
PNANOVDB_FORCE_INLINE pnanovdb_bool_t pnanovdb_uint64_any_bit(pnanovdb_uint64_t a)
Definition: PNanoVDB.h:655
pnanovdb_uint32_t lower_off_max
Definition: PNanoVDB.h:1622
pnanovdb_coord_t key
Definition: PNanoVDB.h:2502
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:2588
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:1404
pnanovdb_address_t address
Definition: PNanoVDB.h:1423
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:2252
PNANOVDB_FORCE_INLINE pnanovdb_uint64_t pnanovdb_read_uint64(pnanovdb_buf_t buf, pnanovdb_address_t address)
Definition: PNanoVDB.h:792
#define PNANOVDB_UPPER_OFF_VALUE_MASK
Definition: PNanoVDB.h:1472
PNANOVDB_FORCE_INLINE pnanovdb_tree_handle_t pnanovdb_grid_get_tree(pnanovdb_buf_t buf, pnanovdb_grid_handle_t grid)
Definition: PNanoVDB.h:1686
PNANOVDB_FORCE_INLINE pnanovdb_uint32_t pnanovdb_leaf_onindexmask_get_value_count(pnanovdb_buf_t buf, pnanovdb_leaf_handle_t leaf)
Definition: PNanoVDB.h:2021
PNANOVDB_FORCE_INLINE pnanovdb_uint64_t pnanovdb_tree_get_node_offset_upper(pnanovdb_buf_t buf, pnanovdb_tree_handle_t p)
Definition: PNanoVDB.h:1314
#define PNANOVDB_MAP_OFF_INVMATD
Definition: PNanoVDB.h:1026
PNANOVDB_FORCE_INLINE void pnanovdb_grid_set_checksum(pnanovdb_buf_t buf, pnanovdb_grid_handle_t p, pnanovdb_uint64_t checksum)
Definition: PNanoVDB.h:1172
PNANOVDB_FORCE_INLINE pnanovdb_uint32_t pnanovdb_grid_get_grid_count(pnanovdb_buf_t buf, pnanovdb_grid_handle_t p)
Definition: PNanoVDB.h:1136
pnanovdb_uint32_t value_stride_bits
Definition: PNanoVDB.h:1611
pnanovdb_uint32_t root_off_max
Definition: PNanoVDB.h:1607
PNANOVDB_FORCE_INLINE pnanovdb_bool_t pnanovdb_readaccessor_iscached2(PNANOVDB_INOUT(pnanovdb_readaccessor_t) acc, int dirty)
Definition: PNanoVDB.h:2541
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:1825
pnanovdb_uint32_t root_size
Definition: PNanoVDB.h:1610
pnanovdb_uint32_t lower_off_min
Definition: PNanoVDB.h:1621
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:1442
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:2594
#define PNANOVDB_UPPER_OFF_CHILD_MASK
Definition: PNanoVDB.h:1473
PNANOVDB_FORCE_INLINE pnanovdb_uint64_t pnanovdb_leaf_index_get_dev_index(pnanovdb_buf_t buf, pnanovdb_address_t dev_address)
Definition: PNanoVDB.h:1865
PNANOVDB_FORCE_INLINE pnanovdb_uint64_t pnanovdb_upper_get_flags(pnanovdb_buf_t buf, pnanovdb_upper_handle_t p)
Definition: PNanoVDB.h:1481
pnanovdb_address_t address
Definition: PNanoVDB.h:1385
pnanovdb_uint64_t voxel_count
Definition: PNanoVDB.h:1288
#define PNANOVDB_TREE_OFF_TILE_COUNT_LOWER
Definition: PNanoVDB.h:1304
PNANOVDB_FORCE_INLINE pnanovdb_uint32_t pnanovdb_grid_get_grid_index(pnanovdb_buf_t buf, pnanovdb_grid_handle_t p)
Definition: PNanoVDB.h:1133
PNANOVDB_FORCE_INLINE pnanovdb_coord_t pnanovdb_upper_get_bbox_min(pnanovdb_buf_t buf, pnanovdb_upper_handle_t p)
Definition: PNanoVDB.h:1475
pnanovdb_uint32_t leaf_off_max
Definition: PNanoVDB.h:1628
PNANOVDB_FORCE_INLINE void pnanovdb_write_double(pnanovdb_buf_t buf, pnanovdb_address_t address, double value)
Definition: PNanoVDB.h:908
pnanovdb_address_t address
Definition: PNanoVDB.h:1518
PNANOVDB_FORCE_INLINE int pnanovdb_readaccessor_computedirty(PNANOVDB_INOUT(pnanovdb_readaccessor_t) acc, PNANOVDB_IN(pnanovdb_coord_t) ijk)
Definition: PNanoVDB.h:2551
PNANOVDB_FORCE_INLINE pnanovdb_uint64_t pnanovdb_leaf_onindex_get_dev_index(pnanovdb_buf_t buf, pnanovdb_address_t dev_address)
Definition: PNanoVDB.h:1983
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:2753
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:1342
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:2803
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:2170
Definition: PNanoVDB.h:1276
PNANOVDB_FORCE_INLINE pnanovdb_bool_t pnanovdb_readaccessor_iscached0(PNANOVDB_INOUT(pnanovdb_readaccessor_t) acc, int dirty)
Definition: PNanoVDB.h:2521
PNANOVDB_FORCE_INLINE pnanovdb_vec3_t pnanovdb_read_vec3u8(pnanovdb_buf_t buf, pnanovdb_address_t address)
Definition: PNanoVDB.h:848
#define PNANOVDB_ROOT_OFF_BBOX_MIN
Definition: PNanoVDB.h:1390
#define PNANOVDB_GRID_OFF_VOXEL_SIZE
Definition: PNanoVDB.h:1115
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:1790
MatType scale(const Vec3< typename MatType::value_type > &s)
Return a matrix that scales by s.
Definition: Mat.h:615
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:2201
#define PNANOVDB_GRID_TYPE_VEC3U8
Definition: PNanoVDB.h:959
PNANOVDB_FORCE_INLINE pnanovdb_int64_t pnanovdb_gridblindmetadata_get_byte_offset(pnanovdb_buf_t buf, pnanovdb_gridblindmetadata_handle_t p)
Definition: PNanoVDB.h:1254
pnanovdb_uint32_t upper_off_table
Definition: PNanoVDB.h:1619
pnanovdb_uint64_t grid_size
Definition: PNanoVDB.h:1088
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:2440
#define PNANOVDB_ROOT_OFF_BBOX_MAX
Definition: PNanoVDB.h:1391
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:2053
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:1445
#define PNANOVDB_GRIDBLINDMETADATA_OFF_DATA_CLASS
Definition: PNanoVDB.h:1250
pnanovdb_uint32_t leaf_size
Definition: PNanoVDB.h:1632
#define PNANOVDB_GRID_OFF_FLAGS
Definition: PNanoVDB.h:1108
PNANOVDB_FORCE_INLINE pnanovdb_uint64_t pnanovdb_tree_get_voxel_count(pnanovdb_buf_t buf, pnanovdb_tree_handle_t p)
Definition: PNanoVDB.h:1338
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:1366
#define PNANOVDB_GRIDBLINDMETADATA_OFF_ELEMENT_COUNT
Definition: PNanoVDB.h:1247
pnanovdb_uint32_t upper_size
Definition: PNanoVDB.h:1620
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:2061
PNANOVDB_FORCE_INLINE pnanovdb_coord_t pnanovdb_read_coord(pnanovdb_buf_t buf, pnanovdb_address_t address)
Definition: PNanoVDB.h:812
pnanovdb_uint32_t root_off_stddev
Definition: PNanoVDB.h:1609
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:1543
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:1554
#define PNANOVDB_MAP_OFF_VECF
Definition: PNanoVDB.h:1023
pnanovdb_int64_t blind_metadata_offset
Definition: PNanoVDB.h:1095
PNANOVDB_FORCE_INLINE double pnanovdb_map_get_vecd(pnanovdb_buf_t buf, pnanovdb_map_handle_t p, pnanovdb_uint32_t index)
Definition: PNanoVDB.h:1048
PNANOVDB_FORCE_INLINE pnanovdb_uint64_t pnanovdb_leaf_onindex_get_min_index(pnanovdb_buf_t buf, pnanovdb_address_t min_address)
Definition: PNanoVDB.h:1950
PNANOVDB_FORCE_INLINE pnanovdb_uint64_t pnanovdb_leaf_onindexmask_get_ave_index(pnanovdb_buf_t buf, pnanovdb_address_t ave_address)
Definition: PNanoVDB.h:2041
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:1669
PNANOVDB_FORCE_INLINE pnanovdb_uint32_t pnanovdb_tree_get_node_count_leaf(pnanovdb_buf_t buf, pnanovdb_tree_handle_t p)
Definition: PNanoVDB.h:1320
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:2049
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:1351
PNANOVDB_FORCE_INLINE pnanovdb_uint32_t pnanovdb_uint32_countbits(pnanovdb_uint32_t value)
Definition: PNanoVDB.h:550
PNANOVDB_FORCE_INLINE pnanovdb_int64_t pnanovdb_grid_get_blind_metadata_offset(pnanovdb_buf_t buf, pnanovdb_grid_handle_t p)
Definition: PNanoVDB.h:1162
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:1150
pnanovdb_coord_t bbox_min
Definition: PNanoVDB.h:1509
pnanovdb_uint32_t version
Definition: PNanoVDB.h:1084
#define PNANOVDB_LOWER_OFF_FLAGS
Definition: PNanoVDB.h:1526
#define PNANOVDB_TREE_OFF_NODE_OFFSET_LOWER
Definition: PNanoVDB.h:1297
PNANOVDB_FORCE_INLINE pnanovdb_uint32_t pnanovdb_version_get_minor(pnanovdb_uint32_t version)
Definition: PNanoVDB.h:1221
Definition: PNanoVDB.h:1562
PNANOVDB_FORCE_INLINE double pnanovdb_map_get_invmatd(pnanovdb_buf_t buf, pnanovdb_map_handle_t p, pnanovdb_uint32_t index)
Definition: PNanoVDB.h:1045
PNANOVDB_FORCE_INLINE pnanovdb_uint32_t pnanovdb_uint64_countbits(pnanovdb_uint64_t value)
Definition: PNanoVDB.h:570
#define PNANOVDB_UPPER_OFF_BBOX_MIN
Definition: PNanoVDB.h:1469
Definition: PNanoVDB.h:1414
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:2158
#define PNANOVDB_TREE_OFF_TILE_COUNT_UPPER
Definition: PNanoVDB.h:1305
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:1499
#define PNANOVDB_TREE_OFF_NODE_OFFSET_ROOT
Definition: PNanoVDB.h:1299
#define PNANOVDB_ROOT_TILE_OFF_STATE
Definition: PNanoVDB.h:1430
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:2098
PNANOVDB_FORCE_INLINE pnanovdb_uint32_t pnanovdb_gridblindmetadata_get_flags(pnanovdb_buf_t buf, pnanovdb_gridblindmetadata_handle_t p)
Definition: PNanoVDB.h:1260
#define PNANOVDB_MAP_OFF_TAPERF
Definition: PNanoVDB.h:1024
#define PNANOVDB_GRIDBLINDMETADATA_OFF_FLAGS
Definition: PNanoVDB.h:1248
pnanovdb_uint32_t grid_index
Definition: PNanoVDB.h:1086
pnanovdb_uint64_t node_offset_lower
Definition: PNanoVDB.h:1279
PNANOVDB_FORCE_INLINE pnanovdb_uint32_t pnanovdb_tree_get_tile_count_upper(pnanovdb_buf_t buf, pnanovdb_tree_handle_t p)
Definition: PNanoVDB.h:1335
pnanovdb_uint32_t node_count_leaf
Definition: PNanoVDB.h:1282
#define PNANOVDB_LOWER_OFF_VALUE_MASK
Definition: PNanoVDB.h:1527
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:1142
pnanovdb_uint64_t checksum
Definition: PNanoVDB.h:1083
PNANOVDB_FORCE_INLINE pnanovdb_coord_t pnanovdb_upper_get_bbox_max(pnanovdb_buf_t buf, pnanovdb_upper_handle_t p)
Definition: PNanoVDB.h:1478
#define PNANOVDB_TREE_OFF_TILE_COUNT_LEAF
Definition: PNanoVDB.h:1303
pnanovdb_uint32_t pad1
Definition: PNanoVDB.h:1419
pnanovdb_uint32_t grid_count
Definition: PNanoVDB.h:1087
float taperf
Definition: PNanoVDB.h:1009
pnanovdb_uint64_t flags
Definition: PNanoVDB.h:1511
PNANOVDB_FORCE_INLINE void pnanovdb_write_vec3(pnanovdb_buf_t buf, pnanovdb_address_t address, PNANOVDB_IN(pnanovdb_vec3_t) value)
Definition: PNanoVDB.h:918
#define PNANOVDB_LOWER_OFF_CHILD_MASK
Definition: PNanoVDB.h:1528
PNANOVDB_FORCE_INLINE pnanovdb_uint32_t pnanovdb_tree_get_tile_count_lower(pnanovdb_buf_t buf, pnanovdb_tree_handle_t p)
Definition: PNanoVDB.h:1332
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:2276
PNANOVDB_FORCE_INLINE pnanovdb_uint64_t pnanovdb_leaf_onindex_get_ave_index(pnanovdb_buf_t buf, pnanovdb_address_t ave_address)
Definition: PNanoVDB.h:1972
pnanovdb_uint32_t lower_off_ave
Definition: PNanoVDB.h:1623
pnanovdb_uint32_t bbox_dif_and_flags
Definition: PNanoVDB.h:1565
PNANOVDB_FORCE_INLINE pnanovdb_coord_t pnanovdb_lower_get_bbox_max(pnanovdb_buf_t buf, pnanovdb_lower_handle_t p)
Definition: PNanoVDB.h:1533
pnanovdb_address_t address
Definition: PNanoVDB.h:1100
PNANOVDB_STATIC_CONST pnanovdb_uint32_t pnanovdb_grid_type_value_strides_bits[26]
Definition: PNanoVDB.h:992
PNANOVDB_FORCE_INLINE float pnanovdb_dither_lookup(pnanovdb_bool_t enabled, int offset)
Definition: PNanoVDB.h:3093
pnanovdb_coord_t bbox_min
Definition: PNanoVDB.h:1564
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:2398
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:2183
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:1870
PNANOVDB_FORCE_INLINE pnanovdb_coord_t pnanovdb_leaf_get_bbox_min(pnanovdb_buf_t buf, pnanovdb_leaf_handle_t p)
Definition: PNanoVDB.h:1585
pnanovdb_uint32_t blind_metadata_count
Definition: PNanoVDB.h:1096
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:1076
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:2613
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:1360
pnanovdb_uint32_t leaf_off_min
Definition: PNanoVDB.h:1627
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:2690
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:2296
PNANOVDB_STATIC_CONST pnanovdb_uint32_t pnanovdb_grid_type_stat_strides_bits[26]
Definition: PNanoVDB.h:1000
#define PNANOVDB_TREE_OFF_NODE_COUNT_LEAF
Definition: PNanoVDB.h:1300
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:1181
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:2785
pnanovdb_uint32_t upper_off_min
Definition: PNanoVDB.h:1615
PNANOVDB_FORCE_INLINE void pnanovdb_grid_set_flags(pnanovdb_buf_t buf, pnanovdb_grid_handle_t p, pnanovdb_uint32_t flags)
Definition: PNanoVDB.h:1178
PNANOVDB_FORCE_INLINE pnanovdb_bool_t pnanovdb_readaccessor_iscached1(PNANOVDB_INOUT(pnanovdb_readaccessor_t) acc, int dirty)
Definition: PNanoVDB.h:2531
pnanovdb_uint32_t table_stride
Definition: PNanoVDB.h:1612
#define PNANOVDB_GRID_OFF_GRID_COUNT
Definition: PNanoVDB.h:1110
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:2680
pnanovdb_uint32_t upper_off_max
Definition: PNanoVDB.h:1616
PNANOVDB_FORCE_INLINE pnanovdb_coord_t pnanovdb_root_get_bbox_max(pnanovdb_buf_t buf, pnanovdb_root_handle_t p)
Definition: PNanoVDB.h:1397
#define PNANOVDB_GRIDBLINDMETADATA_OFF_DATA_TYPE
Definition: PNanoVDB.h:1251
Definition: PNanoVDB.h:1376
PNANOVDB_FORCE_INLINE pnanovdb_uint64_t pnanovdb_grid_get_magic(pnanovdb_buf_t buf, pnanovdb_grid_handle_t p)
Definition: PNanoVDB.h:1121
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:2731
PNANOVDB_FORCE_INLINE pnanovdb_uint32_t pnanovdb_version_get_major(pnanovdb_uint32_t version)
Definition: PNanoVDB.h:1217
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:2302
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:2469
PNANOVDB_FORCE_INLINE pnanovdb_uint64_t pnanovdb_lower_get_flags(pnanovdb_buf_t buf, pnanovdb_lower_handle_t p)
Definition: PNanoVDB.h:1536
PNANOVDB_FORCE_INLINE pnanovdb_uint64_t pnanovdb_tree_get_node_offset_leaf(pnanovdb_buf_t buf, pnanovdb_tree_handle_t p)
Definition: PNanoVDB.h:1308
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:2176
#define PNANOVDB_LEAF_OFF_BBOX_DIF_AND_FLAGS
Definition: PNanoVDB.h:1578
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:1064
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:1070
PNANOVDB_FORCE_INLINE pnanovdb_uint64_t pnanovdb_root_tile_get_key(pnanovdb_buf_t buf, pnanovdb_root_tile_handle_t p)
Definition: PNanoVDB.h:1432
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:2216
PNANOVDB_FORCE_INLINE pnanovdb_uint64_t pnanovdb_leaf_onindexmask_get_max_index(pnanovdb_buf_t buf, pnanovdb_address_t max_address)
Definition: PNanoVDB.h:2037
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:2282
pnanovdb_leaf_handle_t leaf
Definition: PNanoVDB.h:2503
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:1772
pnanovdb_address_t address
Definition: PNanoVDB.h:1016
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:2674
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:1701
Definition: PNanoVDB.h:1571
PNANOVDB_FORCE_INLINE pnanovdb_bool_t pnanovdb_leaf_indexmask_has_stats(pnanovdb_buf_t buf, pnanovdb_leaf_handle_t leaf)
Definition: PNanoVDB.h:1879
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:2882
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:2894
#define PNANOVDB_GRID_TYPE_FLOAT
Definition: PNanoVDB.h:936
pnanovdb_uint32_t lower_off_table
Definition: PNanoVDB.h:1625
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:1193
#define PNANOVDB_GRIDBLINDMETADATA_OFF_NAME
Definition: PNanoVDB.h:1252
#define PNANOVDB_GRIDBLINDMETADATA_SIZE
Definition: PNanoVDB.h:1244
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:1804
pnanovdb_uint32_t table_size
Definition: PNanoVDB.h:1380
PNANOVDB_FORCE_INLINE float pnanovdb_map_get_matf(pnanovdb_buf_t buf, pnanovdb_map_handle_t p, pnanovdb_uint32_t index)
Definition: PNanoVDB.h:1030
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:1488
PNANOVDB_FORCE_INLINE void pnanovdb_write_uint64(pnanovdb_buf_t buf, pnanovdb_address_t address, pnanovdb_uint64_t value)
Definition: PNanoVDB.h:892
PNANOVDB_FORCE_INLINE void pnanovdb_write_uint32(pnanovdb_buf_t buf, pnanovdb_address_t address, pnanovdb_uint32_t value)
Definition: PNanoVDB.h:888
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:1354
PNANOVDB_STATIC_CONST pnanovdb_uint32_t pnanovdb_grid_type_leaf_type[26]
Definition: PNanoVDB.h:1002
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:1196
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:1548
PNANOVDB_FORCE_INLINE pnanovdb_uint64_t pnanovdb_grid_get_checksum(pnanovdb_buf_t buf, pnanovdb_grid_handle_t p)
Definition: PNanoVDB.h:1124
#define PNANOVDB_LEAF_TABLE_NEG_OFF_BBOX_DIF_AND_FLAGS
Definition: PNanoVDB.h:1581
#define PNANOVDB_GRID_OFF_GRID_TYPE
Definition: PNanoVDB.h:1117
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:2093
#define PNANOVDB_LOWER_OFF_BBOX_MIN
Definition: PNanoVDB.h:1524
Definition: PNanoVDB.h:1385
pnanovdb_address_t address
Definition: PNanoVDB.h:1463
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:2152
PNANOVDB_FORCE_INLINE pnanovdb_uint64_t pnanovdb_leaf_onindex_get_max_index(pnanovdb_buf_t buf, pnanovdb_address_t max_address)
Definition: PNanoVDB.h:1961
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:1372
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:2649
PNANOVDB_FORCE_INLINE void pnanovdb_write_int64(pnanovdb_buf_t buf, pnanovdb_address_t address, pnanovdb_int64_t value)
Definition: PNanoVDB.h:900
PNANOVDB_FORCE_INLINE void pnanovdb_grid_set_version(pnanovdb_buf_t buf, pnanovdb_grid_handle_t p, pnanovdb_uint32_t version)
Definition: PNanoVDB.h:1175
#define PNANOVDB_LEAF_TABLE_NEG_OFF_MINIMUM
Definition: PNanoVDB.h:1582
PNANOVDB_FORCE_INLINE pnanovdb_uint64_t pnanovdb_leaf_onindexmask_get_dev_index(pnanovdb_buf_t buf, pnanovdb_address_t dev_address)
Definition: PNanoVDB.h:2045
PNANOVDB_FORCE_INLINE pnanovdb_uint32_t pnanovdb_uint64_to_uint32_lsr(pnanovdb_uint64_t a, pnanovdb_uint32_t b)
Definition: PNanoVDB.h:640
#define PNANOVDB_GRID_OFF_VERSION
Definition: PNanoVDB.h:1107
pnanovdb_uint32_t leaf_off_table
Definition: PNanoVDB.h:1631
pnanovdb_coord_t bbox_min
Definition: PNanoVDB.h:1454
PNANOVDB_FORCE_INLINE pnanovdb_uint32_t pnanovdb_root_tile_get_state(pnanovdb_buf_t buf, pnanovdb_root_tile_handle_t p)
Definition: PNanoVDB.h:1438
pnanovdb_uint32_t root_off_background
Definition: PNanoVDB.h:1605
uint64_t checksum(const NanoGrid< BuildT > &grid, ChecksumMode mode=ChecksumMode::Default)
Return the (2 x CRC32) checksum of the specified grid.
PNANOVDB_FORCE_INLINE pnanovdb_coord_t pnanovdb_lower_get_bbox_min(pnanovdb_buf_t buf, pnanovdb_lower_handle_t p)
Definition: PNanoVDB.h:1530
PNANOVDB_FORCE_INLINE pnanovdb_int32_t pnanovdb_read_int32(pnanovdb_buf_t buf, pnanovdb_address_t address)
Definition: PNanoVDB.h:796
PNANOVDB_FORCE_INLINE pnanovdb_uint32_t pnanovdb_grid_get_version(pnanovdb_buf_t buf, pnanovdb_grid_handle_t p)
Definition: PNanoVDB.h:1127
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:2222
Definition: PNanoVDB.h:1100
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:2779
Definition: PNanoVDB.h:1016
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:2370
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:1348
PNANOVDB_FORCE_INLINE pnanovdb_uint32_t pnanovdb_tree_get_node_count_upper(pnanovdb_buf_t buf, pnanovdb_tree_handle_t p)
Definition: PNanoVDB.h:1326
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:1484
PNANOVDB_FORCE_INLINE pnanovdb_bool_t pnanovdb_leaf_index_has_stats(pnanovdb_buf_t buf, pnanovdb_leaf_handle_t leaf)
Definition: PNanoVDB.h:1845
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:2290
pnanovdb_uint32_t upper_off_stddev
Definition: PNanoVDB.h:1618
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:2228
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:1058
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:2088
#define PNANOVDB_ROOT_TILE_OFF_CHILD
Definition: PNanoVDB.h:1429
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:1496
PNANOVDB_FORCE_INLINE pnanovdb_vec3_t pnanovdb_read_vec3(pnanovdb_buf_t buf, pnanovdb_address_t address)
Definition: PNanoVDB.h:820
PNANOVDB_STATIC_CONST pnanovdb_uint32_t pnanovdb_grid_type_minmax_aligns_bits[26]
Definition: PNanoVDB.h:998
PNANOVDB_FORCE_INLINE pnanovdb_uint64_t pnanovdb_leaf_indexmask_get_dev_index(pnanovdb_buf_t buf, pnanovdb_address_t dev_address)
Definition: PNanoVDB.h:1895
pnanovdb_uint32_t root_tile_off_value
Definition: PNanoVDB.h:1613
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:1153
PNANOVDB_FORCE_INLINE pnanovdb_uint64_t pnanovdb_leaf_indexmask_get_max_index(pnanovdb_buf_t buf, pnanovdb_address_t max_address)
Definition: PNanoVDB.h:1887
PNANOVDB_STATIC_CONST pnanovdb_grid_type_constants_t pnanovdb_grid_type_constants[26]
Definition: PNanoVDB.h:1637
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:2102
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:1357
PNANOVDB_FORCE_INLINE pnanovdb_bool_t pnanovdb_leaf_onindexmask_has_stats(pnanovdb_buf_t buf, pnanovdb_leaf_handle_t leaf)
Definition: PNanoVDB.h:2029
#define PNANOVDB_LEAF_OFF_VALUE_MASK
Definition: PNanoVDB.h:1579
PNANOVDB_FORCE_INLINE pnanovdb_uint64_t pnanovdb_gridblindmetadata_get_element_count(pnanovdb_buf_t buf, pnanovdb_gridblindmetadata_handle_t p)
Definition: PNanoVDB.h:1257
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:1599
PNANOVDB_FORCE_INLINE pnanovdb_uint32_t pnanovdb_read_uint16(pnanovdb_buf_t buf, pnanovdb_address_t address)
Definition: PNanoVDB.h:829
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:1994
#define PNANOVDB_GRID_OFF_BLIND_METADATA_OFFSET
Definition: PNanoVDB.h:1118
PNANOVDB_FORCE_INLINE pnanovdb_uint64_t pnanovdb_tree_get_node_offset_root(pnanovdb_buf_t buf, pnanovdb_tree_handle_t p)
Definition: PNanoVDB.h:1317
pnanovdb_uint32_t tile_count_upper
Definition: PNanoVDB.h:1287
Definition: PNanoVDB.h:1452
PNANOVDB_FORCE_INLINE pnanovdb_uint64_t pnanovdb_leaf_pointindex_get_point_count(pnanovdb_buf_t buf, pnanovdb_leaf_handle_t leaf)
Definition: PNanoVDB.h:2084
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:1830
PNANOVDB_FORCE_INLINE pnanovdb_uint32_t pnanovdb_leaf_onindex_get_value_count(pnanovdb_buf_t buf, pnanovdb_leaf_handle_t leaf)
Definition: PNanoVDB.h:1930
pnanovdb_uint64_t node_offset_leaf
Definition: PNanoVDB.h:1278
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:2348
PNANOVDB_FORCE_INLINE pnanovdb_uint64_t pnanovdb_uint64_offset(pnanovdb_uint64_t a, pnanovdb_uint32_t b)
Definition: PNanoVDB.h:630
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:2246
pnanovdb_uint32_t tile_count_leaf
Definition: PNanoVDB.h:1285
#define PNANOVDB_MAP_OFF_VECD
Definition: PNanoVDB.h:1027
#define PNANOVDB_ROOT_OFF_TABLE_SIZE
Definition: PNanoVDB.h:1392
pnanovdb_uint64_t node_offset_root
Definition: PNanoVDB.h:1281
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:1591
#define PNANOVDB_TREE_OFF_NODE_COUNT_LOWER
Definition: PNanoVDB.h:1301
PNANOVDB_FORCE_INLINE void pnanovdb_grid_set_magic(pnanovdb_buf_t buf, pnanovdb_grid_handle_t p, pnanovdb_uint64_t magic)
Definition: PNanoVDB.h:1169
PNANOVDB_FORCE_INLINE pnanovdb_uint32_t pnanovdb_gridblindmetadata_get_data_class(pnanovdb_buf_t buf, pnanovdb_gridblindmetadata_handle_t p)
Definition: PNanoVDB.h:1266
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:2259
PNANOVDB_FORCE_INLINE pnanovdb_uint64_t pnanovdb_uint64_bit_mask(pnanovdb_uint32_t bit_idx)
Definition: PNanoVDB.h:645
PNANOVDB_FORCE_INLINE pnanovdb_bool_t pnanovdb_leaf_onindex_has_stats(pnanovdb_buf_t buf, pnanovdb_leaf_handle_t leaf)
Definition: PNanoVDB.h:1945
Definition: PNanoVDB.h:1463
PNANOVDB_FORCE_INLINE pnanovdb_coord_t pnanovdb_root_get_bbox_min(pnanovdb_buf_t buf, pnanovdb_root_handle_t p)
Definition: PNanoVDB.h:1394
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:2619
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:2821
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:2412
pnanovdb_uint32_t upper_off_ave
Definition: PNanoVDB.h:1617
#define PNANOVDB_LEAF_TABLE_NEG_OFF_QUANTUM
Definition: PNanoVDB.h:1583
pnanovdb_uint32_t root_off_min
Definition: PNanoVDB.h:1606
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:1899
PNANOVDB_FORCE_INLINE pnanovdb_uint32_t pnanovdb_upper_coord_to_offset(PNANOVDB_IN(pnanovdb_coord_t) ijk)
Definition: PNanoVDB.h:2209
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:2240
pnanovdb_coord_t bbox_min
Definition: PNanoVDB.h:1378
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:1061
#define PNANOVDB_TREE_OFF_NODE_COUNT_UPPER
Definition: PNanoVDB.h:1302
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:2426
PNANOVDB_FORCE_INLINE float pnanovdb_map_get_taperf(pnanovdb_buf_t buf, pnanovdb_map_handle_t p, pnanovdb_uint32_t index)
Definition: PNanoVDB.h:1039
pnanovdb_address_t address
Definition: PNanoVDB.h:1571
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:1493
#define PNANOVDB_GRID_OFF_GRID_CLASS
Definition: PNanoVDB.h:1116
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:1187
#define PNANOVDB_GRID_TYPE_ONINDEX
Definition: PNanoVDB.h:955
PNANOVDB_FORCE_INLINE void pnanovdb_write_float(pnanovdb_buf_t buf, pnanovdb_address_t address, float value)
Definition: PNanoVDB.h:904
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:1272
#define PNANOVDB_MAP_OFF_MATD
Definition: PNanoVDB.h:1025
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:2116
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:2936
#define PNANOVDB_GRID_OFF_GRID_NAME
Definition: PNanoVDB.h:1112
PNANOVDB_FORCE_INLINE void pnanovdb_tree_set_tile_count_leaf(pnanovdb_buf_t buf, pnanovdb_tree_handle_t p, pnanovdb_uint32_t tile_count_leaf)
Definition: PNanoVDB.h:1363
PNANOVDB_FORCE_INLINE pnanovdb_uint32_t pnanovdb_grid_get_blind_metadata_count(pnanovdb_buf_t buf, pnanovdb_grid_handle_t p)
Definition: PNanoVDB.h:1165
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:1073
PNANOVDB_FORCE_INLINE pnanovdb_uint64_t pnanovdb_leaf_onindex_get_last_offset(pnanovdb_buf_t buf, pnanovdb_leaf_handle_t leaf)
Definition: PNanoVDB.h:1938
PNANOVDB_FORCE_INLINE pnanovdb_uint32_t pnanovdb_gridblindmetadata_get_semantic(pnanovdb_buf_t buf, pnanovdb_gridblindmetadata_handle_t p)
Definition: PNanoVDB.h:1263
PNANOVDB_FORCE_INLINE float pnanovdb_map_get_invmatf(pnanovdb_buf_t buf, pnanovdb_map_handle_t p, pnanovdb_uint32_t index)
Definition: PNanoVDB.h:1033
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:1539
pnanovdb_uint32_t leaf_off_stddev
Definition: PNanoVDB.h:1630
PNANOVDB_FORCE_INLINE pnanovdb_int64_t pnanovdb_root_tile_get_child(pnanovdb_buf_t buf, pnanovdb_root_tile_handle_t p)
Definition: PNanoVDB.h:1435
pnanovdb_uint32_t tile_count_lower
Definition: PNanoVDB.h:1286
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:1766
#define PNANOVDB_GRID_OFF_MAP
Definition: PNanoVDB.h:1113
PNANOVDB_FORCE_INLINE pnanovdb_uint64_t pnanovdb_uint64_and(pnanovdb_uint64_t a, pnanovdb_uint64_t b)
Definition: PNanoVDB.h:650
PNANOVDB_FORCE_INLINE double pnanovdb_read_double(pnanovdb_buf_t buf, pnanovdb_address_t address)
Definition: PNanoVDB.h:808
#define PNANOVDB_TREE_OFF_NODE_OFFSET_UPPER
Definition: PNanoVDB.h:1298
pnanovdb_coord_t bbox_max
Definition: PNanoVDB.h:1379
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:2643
PNANOVDB_FORCE_INLINE pnanovdb_uint64_t pnanovdb_grid_get_grid_size(pnanovdb_buf_t buf, pnanovdb_grid_handle_t p)
Definition: PNanoVDB.h:1139
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:2342
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:1588
Definition: PNanoVDB.h:1004
PNANOVDB_FORCE_INLINE void pnanovdb_write_coord(pnanovdb_buf_t buf, pnanovdb_address_t address, PNANOVDB_IN(pnanovdb_coord_t) value)
Definition: PNanoVDB.h:912
pnanovdb_uint64_t magic
Definition: PNanoVDB.h:1082
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:1784
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:1208
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:1202
pnanovdb_uint32_t node_count_upper
Definition: PNanoVDB.h:1284
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:1184
PNANOVDB_FORCE_INLINE pnanovdb_uint32_t pnanovdb_root_get_tile_count(pnanovdb_buf_t buf, pnanovdb_root_handle_t p)
Definition: PNanoVDB.h:1400
pnanovdb_uint32_t lower_off_stddev
Definition: PNanoVDB.h:1624
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:1212
#define PNANOVDB_GRID_OFF_CHECKSUM
Definition: PNanoVDB.h:1106
PNANOVDB_FORCE_INLINE pnanovdb_uint64_t pnanovdb_leaf_index_get_max_index(pnanovdb_buf_t buf, pnanovdb_address_t max_address)
Definition: PNanoVDB.h:1855
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:1835
Definition: PNanoVDB.h:1507
PNANOVDB_FORCE_INLINE pnanovdb_uint64_t pnanovdb_tree_get_node_offset_lower(pnanovdb_buf_t buf, pnanovdb_tree_handle_t p)
Definition: PNanoVDB.h:1311
PNANOVDB_FORCE_INLINE pnanovdb_uint32_t pnanovdb_grid_get_grid_type(pnanovdb_buf_t buf, pnanovdb_grid_handle_t p)
Definition: PNanoVDB.h:1159
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:2695
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:2562
#define PNANOVDB_GRID_TYPE_POINTINDEX
Definition: PNanoVDB.h:958
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:1596
pnanovdb_uint64_t flags
Definition: PNanoVDB.h:1456
PNANOVDB_FORCE_INLINE pnanovdb_map_handle_t pnanovdb_grid_get_map(pnanovdb_buf_t buf, pnanovdb_grid_handle_t p)
Definition: PNanoVDB.h:1145
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:2146
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:1678
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:1205
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:1410
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:2164
PNANOVDB_STATIC_CONST float pnanovdb_dither_lut[512]
Definition: PNanoVDB.h:3025
PNANOVDB_FORCE_INLINE pnanovdb_uint64_t pnanovdb_leaf_onindexmask_get_min_index(pnanovdb_buf_t buf, pnanovdb_address_t min_address)
Definition: PNanoVDB.h:2033
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:2713
PNANOVDB_FORCE_INLINE void pnanovdb_readaccessor_init(PNANOVDB_INOUT(pnanovdb_readaccessor_t) acc, pnanovdb_root_handle_t root)
Definition: PNanoVDB.h:2510
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:2924
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:1407
pnanovdb_uint32_t pad1
Definition: PNanoVDB.h:1381
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:1716
pnanovdb_uint64_t node_offset_upper
Definition: PNanoVDB.h:1280
PNANOVDB_FORCE_INLINE pnanovdb_uint32_t pnanovdb_lower_coord_to_offset(PNANOVDB_IN(pnanovdb_coord_t) ijk)
Definition: PNanoVDB.h:2133
#define PNANOVDB_GRIDBLINDMETADATA_OFF_SEMANTIC
Definition: PNanoVDB.h:1249
#define PNANOVDB_TREE_OFF_VOXEL_COUNT
Definition: PNanoVDB.h:1306
pnanovdb_coord_t bbox_max
Definition: PNanoVDB.h:1455
#define PNANOVDB_GRID_OFF_GRID_SIZE
Definition: PNanoVDB.h:1111
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:1067
PNANOVDB_FORCE_INLINE double pnanovdb_map_get_matd(pnanovdb_buf_t buf, pnanovdb_map_handle_t p, pnanovdb_uint32_t index)
Definition: PNanoVDB.h:1042
Definition: PNanoVDB.h:1423
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:1709
pnanovdb_uint32_t flags
Definition: PNanoVDB.h:1085
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:1796
pnanovdb_uint32_t grid_class
Definition: PNanoVDB.h:1093
Definition: PNanoVDB.h:2500
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:1190
#define PNANOVDB_GRID_OFF_GRID_INDEX
Definition: PNanoVDB.h:1109
#define PNANOVDB_TREE_OFF_NODE_OFFSET_LEAF
Definition: PNanoVDB.h:1296
PNANOVDB_FORCE_INLINE pnanovdb_uint32_t pnanovdb_grid_get_flags(pnanovdb_buf_t buf, pnanovdb_grid_handle_t p)
Definition: PNanoVDB.h:1130
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:1778
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:2870
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:1199
#define PNANOVDB_GRID_OFF_BLIND_METADATA_COUNT
Definition: PNanoVDB.h:1119
#define PNANOVDB_MAP_OFF_TAPERD
Definition: PNanoVDB.h:1028
#define PNANOVDB_GRID_OFF_WORLD_BBOX
Definition: PNanoVDB.h:1114
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:2320
pnanovdb_uint64_t key
Definition: PNanoVDB.h:1416
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:1055
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:2906
PNANOVDB_FORCE_INLINE pnanovdb_int64_t pnanovdb_read_int64(pnanovdb_buf_t buf, pnanovdb_address_t address)
Definition: PNanoVDB.h:804
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:1911
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:1740
pnanovdb_uint32_t leaf_off_ave
Definition: PNanoVDB.h:1629
PNANOVDB_FORCE_INLINE float pnanovdb_map_get_vecf(pnanovdb_buf_t buf, pnanovdb_map_handle_t p, pnanovdb_uint32_t index)
Definition: PNanoVDB.h:1036
pnanovdb_uint32_t root_off_ave
Definition: PNanoVDB.h:1608
pnanovdb_uint32_t lower_size
Definition: PNanoVDB.h:1626
pnanovdb_int64_t child
Definition: PNanoVDB.h:1417
PNANOVDB_FORCE_INLINE pnanovdb_uint64_t pnanovdb_leaf_indexmask_get_min_index(pnanovdb_buf_t buf, pnanovdb_address_t min_address)
Definition: PNanoVDB.h:1883
PNANOVDB_FORCE_INLINE pnanovdb_uint32_t pnanovdb_version_get_patch(pnanovdb_uint32_t version)
Definition: PNanoVDB.h:1225
PNANOVDB_FORCE_INLINE pnanovdb_uint32_t pnanovdb_leaf_coord_to_offset(PNANOVDB_IN(pnanovdb_coord_t) ijk)
Definition: PNanoVDB.h:1759
PNANOVDB_STATIC_CONST pnanovdb_uint32_t pnanovdb_grid_type_table_strides_bits[26]
Definition: PNanoVDB.h:994
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:2140
PNANOVDB_FORCE_INLINE pnanovdb_uint32_t pnanovdb_grid_get_grid_class(pnanovdb_buf_t buf, pnanovdb_grid_handle_t p)
Definition: PNanoVDB.h:1156
PNANOVDB_FORCE_INLINE pnanovdb_uint64_t pnanovdb_coord_to_key(PNANOVDB_IN(pnanovdb_coord_t) ijk)
Definition: PNanoVDB.h:1723
#define PNANOVDB_MAP_OFF_INVMATF
Definition: PNanoVDB.h:1022
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:2582
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:1345
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:858
pnanovdb_uint32_t state
Definition: PNanoVDB.h:1418
double taperd
Definition: PNanoVDB.h:1013
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:1903
PNANOVDB_FORCE_INLINE pnanovdb_uint64_t pnanovdb_uint64_dec(pnanovdb_uint64_t a)
Definition: PNanoVDB.h:635
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:2556
pnanovdb_root_handle_t root
Definition: PNanoVDB.h:2506
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:2314
PNANOVDB_FORCE_INLINE float pnanovdb_read_float(pnanovdb_buf_t buf, pnanovdb_address_t address)
Definition: PNanoVDB.h:800
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:2918
PNANOVDB_FORCE_INLINE pnanovdb_uint32_t pnanovdb_read_uint8(pnanovdb_buf_t buf, pnanovdb_address_t address)
Definition: PNanoVDB.h:834
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:1369
pnanovdb_address_t address
Definition: PNanoVDB.h:1291