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)
52#elif defined(PNANOVDB_HLSL)
54#elif defined(PNANOVDB_GLSL)
66#if defined(PNANOVDB_BUF_CUSTOM)
68#elif defined(PNANOVDB_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)
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))
87typedef struct pnanovdb_buf_t
90#ifdef PNANOVDB_BUF_BOUNDS_CHECK
91 uint64_t size_in_words;
94PNANOVDB_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)
104PNANOVDB_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];
113PNANOVDB_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];
124PNANOVDB_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;
136PNANOVDB_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)
151PNANOVDB_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];
160PNANOVDB_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];
171PNANOVDB_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;
183PNANOVDB_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;
198typedef 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>
203uint pnanovdb_buf_read_uint32(pnanovdb_buf_t buf, uint byte_offset)
205 return buf[(byte_offset >> 2u)];
207uint2 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);
214void pnanovdb_buf_write_uint32(pnanovdb_buf_t buf, uint byte_offset, uint value)
218void 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>
224uint pnanovdb_buf_read_uint32(pnanovdb_buf_t buf, uint64_t byte_offset)
226 return buf[uint(byte_offset >> 2u)];
228uint64_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);
235void pnanovdb_buf_write_uint32(pnanovdb_buf_t buf, uint64_t byte_offset, uint value)
239void 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)
251uint pnanovdb_buf_read_uint32(pnanovdb_buf_t buf, uint byte_offset)
253 return pnanovdb_buf_data[(byte_offset >> 2u)];
255uvec2 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);
262void pnanovdb_buf_write_uint32(pnanovdb_buf_t buf, uint byte_offset, uint value)
266void 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__
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#if defined(__CUDA_ARCH__)
295#define PNANOVDB_STATIC_CONST constexpr __constant__
297#define PNANOVDB_STATIC_CONST static const
299#define PNANOVDB_INOUT(X) X*
300#define PNANOVDB_IN(X) const X*
301#define PNANOVDB_DEREF(X) (*X)
302#define PNANOVDB_REF(X) &X
303#elif defined(PNANOVDB_HLSL)
304#define PNANOVDB_STRUCT_TYPEDEF(X)
305#define PNANOVDB_STATIC_CONST static const
306#define PNANOVDB_INOUT(X) inout X
307#define PNANOVDB_IN(X) X
308#define PNANOVDB_DEREF(X) X
309#define PNANOVDB_REF(X) X
310#elif defined(PNANOVDB_GLSL)
311#define PNANOVDB_STRUCT_TYPEDEF(X)
312#define PNANOVDB_STATIC_CONST const
313#define PNANOVDB_INOUT(X) inout X
314#define PNANOVDB_IN(X) X
315#define PNANOVDB_DEREF(X) X
316#define PNANOVDB_REF(X) X
320#if defined(PNANOVDB_C)
321#define PNANOVDB_NATIVE_64
322#ifndef __CUDACC_RTC__
325#if !defined(PNANOVDB_MEMCPY_CUSTOM)
326#ifndef __CUDACC_RTC__
329#define pnanovdb_memcpy memcpy
331typedef uint32_t pnanovdb_uint32_t;
332typedef int32_t pnanovdb_int32_t;
333typedef int32_t pnanovdb_bool_t;
334#define PNANOVDB_FALSE 0
335#define PNANOVDB_TRUE 1
336typedef uint64_t pnanovdb_uint64_t;
337typedef int64_t pnanovdb_int64_t;
338typedef struct pnanovdb_coord_t
340 pnanovdb_int32_t x, y, z;
342typedef struct pnanovdb_vec3_t
346PNANOVDB_FORCE_INLINE pnanovdb_int32_t pnanovdb_uint32_as_int32(pnanovdb_uint32_t v) {
return (pnanovdb_int32_t)v; }
347PNANOVDB_FORCE_INLINE pnanovdb_int64_t pnanovdb_uint64_as_int64(pnanovdb_uint64_t v) {
return (pnanovdb_int64_t)v; }
348PNANOVDB_FORCE_INLINE pnanovdb_uint64_t pnanovdb_int64_as_uint64(pnanovdb_int64_t v) {
return (pnanovdb_uint64_t)v; }
349PNANOVDB_FORCE_INLINE pnanovdb_uint32_t pnanovdb_int32_as_uint32(pnanovdb_int32_t v) {
return (pnanovdb_uint32_t)v; }
350PNANOVDB_FORCE_INLINE
float pnanovdb_uint32_as_float(pnanovdb_uint32_t v) {
float vf; pnanovdb_memcpy(&vf, &v,
sizeof(vf));
return vf; }
351PNANOVDB_FORCE_INLINE pnanovdb_uint32_t pnanovdb_float_as_uint32(
float v) {
return *((pnanovdb_uint32_t*)(&v)); }
352PNANOVDB_FORCE_INLINE
double pnanovdb_uint64_as_double(pnanovdb_uint64_t v) {
double vf; pnanovdb_memcpy(&vf, &v,
sizeof(vf));
return vf; }
353PNANOVDB_FORCE_INLINE pnanovdb_uint64_t pnanovdb_double_as_uint64(
double v) {
return *((pnanovdb_uint64_t*)(&v)); }
354PNANOVDB_FORCE_INLINE pnanovdb_uint32_t pnanovdb_uint64_low(pnanovdb_uint64_t v) {
return (pnanovdb_uint32_t)v; }
355PNANOVDB_FORCE_INLINE pnanovdb_uint32_t pnanovdb_uint64_high(pnanovdb_uint64_t v) {
return (pnanovdb_uint32_t)(v >> 32u); }
356PNANOVDB_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); }
357PNANOVDB_FORCE_INLINE pnanovdb_uint64_t pnanovdb_uint32_as_uint64_low(pnanovdb_uint32_t x) {
return ((pnanovdb_uint64_t)x); }
358PNANOVDB_FORCE_INLINE pnanovdb_int32_t pnanovdb_uint64_is_equal(pnanovdb_uint64_t a, pnanovdb_uint64_t b) {
return a == b; }
359PNANOVDB_FORCE_INLINE pnanovdb_int32_t pnanovdb_int64_is_zero(pnanovdb_int64_t a) {
return a == 0; }
361PNANOVDB_FORCE_INLINE
float pnanovdb_floor(
float v) {
return floorf(v); }
363PNANOVDB_FORCE_INLINE pnanovdb_int32_t pnanovdb_float_to_int32(
float v) {
return (pnanovdb_int32_t)v; }
364PNANOVDB_FORCE_INLINE
float pnanovdb_int32_to_float(pnanovdb_int32_t v) {
return (
float)v; }
365PNANOVDB_FORCE_INLINE
float pnanovdb_uint32_to_float(pnanovdb_uint32_t v) {
return (
float)v; }
366PNANOVDB_FORCE_INLINE
float pnanovdb_min(
float a,
float b) {
return a < b ? a : b; }
367PNANOVDB_FORCE_INLINE
float pnanovdb_max(
float a,
float b) {
return a > b ? a : b; }
368#elif defined(PNANOVDB_HLSL)
369typedef uint pnanovdb_uint32_t;
370typedef int pnanovdb_int32_t;
371typedef bool pnanovdb_bool_t;
372#define PNANOVDB_FALSE false
373#define PNANOVDB_TRUE true
374typedef int3 pnanovdb_coord_t;
375typedef float3 pnanovdb_vec3_t;
376pnanovdb_int32_t pnanovdb_uint32_as_int32(pnanovdb_uint32_t v) {
return int(v); }
377pnanovdb_uint32_t pnanovdb_int32_as_uint32(pnanovdb_int32_t v) {
return uint(v); }
378float pnanovdb_uint32_as_float(pnanovdb_uint32_t v) {
return asfloat(v); }
379pnanovdb_uint32_t pnanovdb_float_as_uint32(
float v) {
return asuint(v); }
380float pnanovdb_floor(
float v) {
return floor(v); }
381pnanovdb_int32_t pnanovdb_float_to_int32(
float v) {
return int(v); }
382float pnanovdb_int32_to_float(pnanovdb_int32_t v) {
return float(v); }
383float pnanovdb_uint32_to_float(pnanovdb_uint32_t v) {
return float(v); }
384float pnanovdb_min(
float a,
float b) {
return min(a, b); }
385float pnanovdb_max(
float a,
float b) {
return max(a, b); }
386#if defined(PNANOVDB_ADDRESS_32)
387typedef uint2 pnanovdb_uint64_t;
388typedef int2 pnanovdb_int64_t;
389pnanovdb_int64_t pnanovdb_uint64_as_int64(pnanovdb_uint64_t v) {
return int2(v); }
390pnanovdb_uint64_t pnanovdb_int64_as_uint64(pnanovdb_int64_t v) {
return uint2(v); }
391double pnanovdb_uint64_as_double(pnanovdb_uint64_t v) {
return asdouble(v.x, v.y); }
392pnanovdb_uint64_t pnanovdb_double_as_uint64(
double v) { uint2 ret; asuint(v, ret.x, ret.y);
return ret; }
393pnanovdb_uint32_t pnanovdb_uint64_low(pnanovdb_uint64_t v) {
return v.x; }
394pnanovdb_uint32_t pnanovdb_uint64_high(pnanovdb_uint64_t v) {
return v.y; }
395pnanovdb_uint64_t pnanovdb_uint32_as_uint64(pnanovdb_uint32_t x, pnanovdb_uint32_t y) {
return uint2(x, y); }
396pnanovdb_uint64_t pnanovdb_uint32_as_uint64_low(pnanovdb_uint32_t x) {
return uint2(x, 0); }
397bool pnanovdb_uint64_is_equal(pnanovdb_uint64_t a, pnanovdb_uint64_t b) {
return (a.x == b.x) && (a.y == b.y); }
398bool pnanovdb_int64_is_zero(pnanovdb_int64_t a) {
return a.x == 0 && a.y == 0; }
400typedef uint64_t pnanovdb_uint64_t;
401typedef int64_t pnanovdb_int64_t;
402pnanovdb_int64_t pnanovdb_uint64_as_int64(pnanovdb_uint64_t v) {
return int64_t(v); }
403pnanovdb_uint64_t pnanovdb_int64_as_uint64(pnanovdb_int64_t v) {
return uint64_t(v); }
404double pnanovdb_uint64_as_double(pnanovdb_uint64_t v) {
return asdouble(uint(v), uint(v >> 32u)); }
405pnanovdb_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); }
406pnanovdb_uint32_t pnanovdb_uint64_low(pnanovdb_uint64_t v) {
return uint(v); }
407pnanovdb_uint32_t pnanovdb_uint64_high(pnanovdb_uint64_t v) {
return uint(v >> 32u); }
408pnanovdb_uint64_t pnanovdb_uint32_as_uint64(pnanovdb_uint32_t x, pnanovdb_uint32_t y) {
return uint64_t(x) + (uint64_t(y) << 32u); }
409pnanovdb_uint64_t pnanovdb_uint32_as_uint64_low(pnanovdb_uint32_t x) {
return uint64_t(x); }
410bool pnanovdb_uint64_is_equal(pnanovdb_uint64_t a, pnanovdb_uint64_t b) {
return a == b; }
411bool pnanovdb_int64_is_zero(pnanovdb_int64_t a) {
return a == 0; }
413#elif defined(PNANOVDB_GLSL)
414#define pnanovdb_uint32_t uint
415#define pnanovdb_int32_t int
416#define pnanovdb_bool_t bool
417#define PNANOVDB_FALSE false
418#define PNANOVDB_TRUE true
419#define pnanovdb_uint64_t uvec2
420#define pnanovdb_int64_t ivec2
421#define pnanovdb_coord_t ivec3
422#define pnanovdb_vec3_t vec3
423pnanovdb_int32_t pnanovdb_uint32_as_int32(pnanovdb_uint32_t v) {
return int(v); }
424pnanovdb_int64_t pnanovdb_uint64_as_int64(pnanovdb_uint64_t v) {
return ivec2(v); }
425pnanovdb_uint64_t pnanovdb_int64_as_uint64(pnanovdb_int64_t v) {
return uvec2(v); }
426pnanovdb_uint32_t pnanovdb_int32_as_uint32(pnanovdb_int32_t v) {
return uint(v); }
427float pnanovdb_uint32_as_float(pnanovdb_uint32_t v) {
return uintBitsToFloat(v); }
428pnanovdb_uint32_t pnanovdb_float_as_uint32(
float v) {
return floatBitsToUint(v); }
429double pnanovdb_uint64_as_double(pnanovdb_uint64_t v) {
return packDouble2x32(uvec2(v.x, v.y)); }
430pnanovdb_uint64_t pnanovdb_double_as_uint64(
double v) {
return unpackDouble2x32(v); }
431pnanovdb_uint32_t pnanovdb_uint64_low(pnanovdb_uint64_t v) {
return v.x; }
432pnanovdb_uint32_t pnanovdb_uint64_high(pnanovdb_uint64_t v) {
return v.y; }
433pnanovdb_uint64_t pnanovdb_uint32_as_uint64(pnanovdb_uint32_t x, pnanovdb_uint32_t y) {
return uvec2(x, y); }
434pnanovdb_uint64_t pnanovdb_uint32_as_uint64_low(pnanovdb_uint32_t x) {
return uvec2(x, 0); }
435bool pnanovdb_uint64_is_equal(pnanovdb_uint64_t a, pnanovdb_uint64_t b) {
return (a.x == b.x) && (a.y == b.y); }
436bool pnanovdb_int64_is_zero(pnanovdb_int64_t a) {
return a.x == 0 && a.y == 0; }
437float pnanovdb_floor(
float v) {
return floor(v); }
438pnanovdb_int32_t pnanovdb_float_to_int32(
float v) {
return int(v); }
439float pnanovdb_int32_to_float(pnanovdb_int32_t v) {
return float(v); }
440float pnanovdb_uint32_to_float(pnanovdb_uint32_t v) {
return float(v); }
441float pnanovdb_min(
float a,
float b) {
return min(a, b); }
442float pnanovdb_max(
float a,
float b) {
return max(a, b); }
447#if defined(PNANOVDB_C)
448PNANOVDB_FORCE_INLINE pnanovdb_vec3_t pnanovdb_vec3_uniform(
float a)
456PNANOVDB_FORCE_INLINE pnanovdb_vec3_t pnanovdb_vec3_add(
const pnanovdb_vec3_t a,
const pnanovdb_vec3_t b)
464PNANOVDB_FORCE_INLINE pnanovdb_vec3_t pnanovdb_vec3_sub(
const pnanovdb_vec3_t a,
const pnanovdb_vec3_t b)
472PNANOVDB_FORCE_INLINE pnanovdb_vec3_t pnanovdb_vec3_mul(
const pnanovdb_vec3_t a,
const pnanovdb_vec3_t b)
480PNANOVDB_FORCE_INLINE pnanovdb_vec3_t pnanovdb_vec3_div(
const pnanovdb_vec3_t a,
const pnanovdb_vec3_t b)
488PNANOVDB_FORCE_INLINE pnanovdb_vec3_t pnanovdb_vec3_min(
const pnanovdb_vec3_t a,
const pnanovdb_vec3_t b)
491 v.x = a.x < b.x ? a.x : b.x;
492 v.y = a.y < b.y ? a.y : b.y;
493 v.z = a.z < b.z ? a.z : b.z;
496PNANOVDB_FORCE_INLINE pnanovdb_vec3_t pnanovdb_vec3_max(
const pnanovdb_vec3_t a,
const pnanovdb_vec3_t b)
499 v.x = a.x > b.x ? a.x : b.x;
500 v.y = a.y > b.y ? a.y : b.y;
501 v.z = a.z > b.z ? a.z : b.z;
504PNANOVDB_FORCE_INLINE pnanovdb_vec3_t pnanovdb_coord_to_vec3(
const pnanovdb_coord_t coord)
507 v.x = pnanovdb_int32_to_float(coord.x);
508 v.y = pnanovdb_int32_to_float(coord.y);
509 v.z = pnanovdb_int32_to_float(coord.z);
512PNANOVDB_FORCE_INLINE pnanovdb_coord_t pnanovdb_coord_uniform(
const pnanovdb_int32_t a)
520PNANOVDB_FORCE_INLINE pnanovdb_coord_t pnanovdb_coord_add(pnanovdb_coord_t a, pnanovdb_coord_t b)
528#elif defined(PNANOVDB_HLSL)
529pnanovdb_vec3_t pnanovdb_vec3_uniform(
float a) {
return float3(a, a, a); }
530pnanovdb_vec3_t pnanovdb_vec3_add(pnanovdb_vec3_t a, pnanovdb_vec3_t b) {
return a + b; }
531pnanovdb_vec3_t pnanovdb_vec3_sub(pnanovdb_vec3_t a, pnanovdb_vec3_t b) {
return a - b; }
532pnanovdb_vec3_t pnanovdb_vec3_mul(pnanovdb_vec3_t a, pnanovdb_vec3_t b) {
return a * b; }
533pnanovdb_vec3_t pnanovdb_vec3_div(pnanovdb_vec3_t a, pnanovdb_vec3_t b) {
return a / b; }
534pnanovdb_vec3_t pnanovdb_vec3_min(pnanovdb_vec3_t a, pnanovdb_vec3_t b) {
return min(a, b); }
535pnanovdb_vec3_t pnanovdb_vec3_max(pnanovdb_vec3_t a, pnanovdb_vec3_t b) {
return max(a, b); }
536pnanovdb_vec3_t pnanovdb_coord_to_vec3(pnanovdb_coord_t coord) {
return float3(coord); }
537pnanovdb_coord_t pnanovdb_coord_uniform(pnanovdb_int32_t a) {
return int3(a, a, a); }
538pnanovdb_coord_t pnanovdb_coord_add(pnanovdb_coord_t a, pnanovdb_coord_t b) {
return a + b; }
539#elif defined(PNANOVDB_GLSL)
540pnanovdb_vec3_t pnanovdb_vec3_uniform(
float a) {
return vec3(a, a, a); }
541pnanovdb_vec3_t pnanovdb_vec3_add(pnanovdb_vec3_t a, pnanovdb_vec3_t b) {
return a + b; }
542pnanovdb_vec3_t pnanovdb_vec3_sub(pnanovdb_vec3_t a, pnanovdb_vec3_t b) {
return a - b; }
543pnanovdb_vec3_t pnanovdb_vec3_mul(pnanovdb_vec3_t a, pnanovdb_vec3_t b) {
return a * b; }
544pnanovdb_vec3_t pnanovdb_vec3_div(pnanovdb_vec3_t a, pnanovdb_vec3_t b) {
return a / b; }
545pnanovdb_vec3_t pnanovdb_vec3_min(pnanovdb_vec3_t a, pnanovdb_vec3_t b) {
return min(a, b); }
546pnanovdb_vec3_t pnanovdb_vec3_max(pnanovdb_vec3_t a, pnanovdb_vec3_t b) {
return max(a, b); }
547pnanovdb_vec3_t pnanovdb_coord_to_vec3(
const pnanovdb_coord_t coord) {
return vec3(coord); }
548pnanovdb_coord_t pnanovdb_coord_uniform(pnanovdb_int32_t a) {
return ivec3(a, a, a); }
549pnanovdb_coord_t pnanovdb_coord_add(pnanovdb_coord_t a, pnanovdb_coord_t b) {
return a + b; }
556#if defined(PNANOVDB_C)
557#if defined(_MSC_VER) && (_MSC_VER >= 1928) && defined(PNANOVDB_USE_INTRINSICS)
558 return __popcnt(value);
559#elif (defined(__GNUC__) || defined(__clang__)) && defined(PNANOVDB_USE_INTRINSICS)
560 return __builtin_popcount(value);
562 value = value - ((value >> 1) & 0x55555555);
563 value = (value & 0x33333333) + ((value >> 2) & 0x33333333);
564 value = (value + (value >> 4)) & 0x0F0F0F0F;
565 return (value * 0x01010101) >> 24;
567#elif defined(PNANOVDB_HLSL)
568 return countbits(value);
569#elif defined(PNANOVDB_GLSL)
570 return bitCount(value);
579#if defined(PNANOVDB_ADDRESS_32)
582 pnanovdb_uint32_t low = pnanovdb_uint64_low(a);
583 pnanovdb_uint32_t high = pnanovdb_uint64_high(a);
589 return pnanovdb_uint32_as_uint64(low, high);
594 pnanovdb_uint32_t low = pnanovdb_uint64_low(a);
595 pnanovdb_uint32_t high = pnanovdb_uint64_high(a);
601 return pnanovdb_uint32_as_uint64(low, high);
606 pnanovdb_uint32_t low = pnanovdb_uint64_low(a);
607 pnanovdb_uint32_t high = pnanovdb_uint64_high(a);
610 ((low >> b) | ((b > 0) ? (high << (32u - b)) : 0u));
615 pnanovdb_uint32_t mask_low = bit_idx < 32u ? 1u << bit_idx : 0u;
616 pnanovdb_uint32_t mask_high = bit_idx >= 32u ? 1u << (bit_idx - 32u) : 0u;
617 return pnanovdb_uint32_as_uint64(mask_low, mask_high);
620PNANOVDB_FORCE_INLINE pnanovdb_uint64_t
pnanovdb_uint64_and(pnanovdb_uint64_t a, pnanovdb_uint64_t b)
622 return pnanovdb_uint32_as_uint64(
623 pnanovdb_uint64_low(a) & pnanovdb_uint64_low(b),
624 pnanovdb_uint64_high(a) & pnanovdb_uint64_high(b)
630 return pnanovdb_uint64_low(a) != 0u || pnanovdb_uint64_high(a) != 0u;
646 return pnanovdb_uint64_low(a >> b);
651 return 1llu << bit_idx;
667#if defined(PNANOVDB_ADDRESS_32)
668struct pnanovdb_address_t
670 pnanovdb_uint32_t byte_offset;
672PNANOVDB_STRUCT_TYPEDEF(pnanovdb_address_t)
674PNANOVDB_FORCE_INLINE pnanovdb_address_t pnanovdb_address_offset(pnanovdb_address_t address, pnanovdb_uint32_t byte_offset)
676 pnanovdb_address_t ret = address;
677 ret.byte_offset += byte_offset;
680PNANOVDB_FORCE_INLINE pnanovdb_address_t pnanovdb_address_offset_neg(pnanovdb_address_t address, pnanovdb_uint32_t byte_offset)
682 pnanovdb_address_t ret = address;
683 ret.byte_offset -= byte_offset;
686PNANOVDB_FORCE_INLINE pnanovdb_address_t pnanovdb_address_offset_product(pnanovdb_address_t address, pnanovdb_uint32_t byte_offset, pnanovdb_uint32_t multiplier)
688 pnanovdb_address_t ret = address;
689 ret.byte_offset += byte_offset * multiplier;
692PNANOVDB_FORCE_INLINE pnanovdb_address_t pnanovdb_address_offset64(pnanovdb_address_t address, pnanovdb_uint64_t byte_offset)
694 pnanovdb_address_t ret = address;
696 ret.byte_offset += pnanovdb_uint64_low(byte_offset);
699PNANOVDB_FORCE_INLINE pnanovdb_address_t pnanovdb_address_offset64_product(pnanovdb_address_t address, pnanovdb_uint64_t byte_offset, pnanovdb_uint32_t multiplier)
701 pnanovdb_address_t ret = address;
702 ret.byte_offset += pnanovdb_uint64_low(byte_offset) * multiplier;
705PNANOVDB_FORCE_INLINE pnanovdb_uint32_t pnanovdb_address_mask(pnanovdb_address_t address, pnanovdb_uint32_t mask)
707 return address.byte_offset & mask;
709PNANOVDB_FORCE_INLINE pnanovdb_address_t pnanovdb_address_mask_inv(pnanovdb_address_t address, pnanovdb_uint32_t mask)
711 pnanovdb_address_t ret = address;
712 ret.byte_offset &= (~mask);
715PNANOVDB_FORCE_INLINE pnanovdb_address_t pnanovdb_address_null()
717 pnanovdb_address_t ret = { 0 };
720PNANOVDB_FORCE_INLINE pnanovdb_bool_t pnanovdb_address_is_null(pnanovdb_address_t address)
722 return address.byte_offset == 0u;
724PNANOVDB_FORCE_INLINE pnanovdb_bool_t pnanovdb_address_in_interval(pnanovdb_address_t address, pnanovdb_address_t min_address, pnanovdb_address_t max_address)
726 return address.byte_offset >= min_address.byte_offset && address.byte_offset < max_address.byte_offset;
728#elif defined(PNANOVDB_ADDRESS_64)
729struct pnanovdb_address_t
731 pnanovdb_uint64_t byte_offset;
733PNANOVDB_STRUCT_TYPEDEF(pnanovdb_address_t)
735PNANOVDB_FORCE_INLINE pnanovdb_address_t pnanovdb_address_offset(pnanovdb_address_t address, pnanovdb_uint32_t byte_offset)
737 pnanovdb_address_t ret = address;
738 ret.byte_offset += byte_offset;
741PNANOVDB_FORCE_INLINE pnanovdb_address_t pnanovdb_address_offset_neg(pnanovdb_address_t address, pnanovdb_uint32_t byte_offset)
743 pnanovdb_address_t ret = address;
744 ret.byte_offset -= byte_offset;
747PNANOVDB_FORCE_INLINE pnanovdb_address_t pnanovdb_address_offset_product(pnanovdb_address_t address, pnanovdb_uint32_t byte_offset, pnanovdb_uint32_t multiplier)
749 pnanovdb_address_t ret = address;
750 ret.byte_offset += pnanovdb_uint32_as_uint64_low(byte_offset) * pnanovdb_uint32_as_uint64_low(multiplier);
753PNANOVDB_FORCE_INLINE pnanovdb_address_t pnanovdb_address_offset64(pnanovdb_address_t address, pnanovdb_uint64_t byte_offset)
755 pnanovdb_address_t ret = address;
756 ret.byte_offset += byte_offset;
759PNANOVDB_FORCE_INLINE pnanovdb_address_t pnanovdb_address_offset64_product(pnanovdb_address_t address, pnanovdb_uint64_t byte_offset, pnanovdb_uint32_t multiplier)
761 pnanovdb_address_t ret = address;
762 ret.byte_offset += byte_offset * pnanovdb_uint32_as_uint64_low(multiplier);
765PNANOVDB_FORCE_INLINE pnanovdb_uint32_t pnanovdb_address_mask(pnanovdb_address_t address, pnanovdb_uint32_t mask)
767 return pnanovdb_uint64_low(address.byte_offset) & mask;
769PNANOVDB_FORCE_INLINE pnanovdb_address_t pnanovdb_address_mask_inv(pnanovdb_address_t address, pnanovdb_uint32_t mask)
771 pnanovdb_address_t ret = address;
772 ret.byte_offset &= (~pnanovdb_uint32_as_uint64_low(mask));
775PNANOVDB_FORCE_INLINE pnanovdb_address_t pnanovdb_address_null()
777 pnanovdb_address_t ret = { 0 };
780PNANOVDB_FORCE_INLINE pnanovdb_bool_t pnanovdb_address_is_null(pnanovdb_address_t address)
782 return address.byte_offset == 0llu;
784PNANOVDB_FORCE_INLINE pnanovdb_bool_t pnanovdb_address_in_interval(pnanovdb_address_t address, pnanovdb_address_t min_address, pnanovdb_address_t max_address)
786 return address.byte_offset >= min_address.byte_offset && address.byte_offset < max_address.byte_offset;
794 return pnanovdb_buf_read_uint32(buf, address.byte_offset);
798 return pnanovdb_buf_read_uint64(buf, address.byte_offset);
818 pnanovdb_coord_t ret;
819 ret.x = pnanovdb_uint32_as_int32(
pnanovdb_read_uint32(buf, pnanovdb_address_offset(address, 0u)));
820 ret.y = pnanovdb_uint32_as_int32(
pnanovdb_read_uint32(buf, pnanovdb_address_offset(address, 4u)));
821 ret.z = pnanovdb_uint32_as_int32(
pnanovdb_read_uint32(buf, pnanovdb_address_offset(address, 8u)));
824PNANOVDB_FORCE_INLINE pnanovdb_vec3_t
pnanovdb_read_vec3(pnanovdb_buf_t buf, pnanovdb_address_t address)
836 return (raw >> (pnanovdb_address_mask(address, 2) << 3));
838PNANOVDB_FORCE_INLINE pnanovdb_uint32_t
pnanovdb_read_uint8(pnanovdb_buf_t buf, pnanovdb_address_t address)
841 return (raw >> (pnanovdb_address_mask(address, 3) << 3)) & 255;
846 const float scale = 1.f / 65535.f;
847 ret.x = scale * pnanovdb_uint32_to_float(
pnanovdb_read_uint16(buf, pnanovdb_address_offset(address, 0u))) - 0.5f;
848 ret.y = scale * pnanovdb_uint32_to_float(
pnanovdb_read_uint16(buf, pnanovdb_address_offset(address, 2u))) - 0.5f;
849 ret.z = scale * pnanovdb_uint32_to_float(
pnanovdb_read_uint16(buf, pnanovdb_address_offset(address, 4u))) - 0.5f;
855 const float scale = 1.f / 255.f;
856 ret.x = scale * pnanovdb_uint32_to_float(
pnanovdb_read_uint8(buf, pnanovdb_address_offset(address, 0u))) - 0.5f;
857 ret.y = scale * pnanovdb_uint32_to_float(
pnanovdb_read_uint8(buf, pnanovdb_address_offset(address, 1u))) - 0.5f;
858 ret.z = scale * pnanovdb_uint32_to_float(
pnanovdb_read_uint8(buf, pnanovdb_address_offset(address, 2u))) - 0.5f;
862PNANOVDB_FORCE_INLINE pnanovdb_bool_t
pnanovdb_read_bit(pnanovdb_buf_t buf, pnanovdb_address_t address, pnanovdb_uint32_t bit_offset)
864 pnanovdb_address_t word_address = pnanovdb_address_mask_inv(address, 3u);
865 pnanovdb_uint32_t bit_index = (pnanovdb_address_mask(address, 3u) << 3u) + bit_offset;
866 pnanovdb_uint32_t value_word = pnanovdb_buf_read_uint32(buf, word_address.byte_offset);
867 return ((value_word >> bit_index) & 1) != 0u;
870#if defined(PNANOVDB_C)
871PNANOVDB_FORCE_INLINE
short pnanovdb_read_half(pnanovdb_buf_t buf, pnanovdb_address_t address)
874 return (
short)(raw >> (pnanovdb_address_mask(address, 2) << 3));
876#elif defined(PNANOVDB_HLSL)
877PNANOVDB_FORCE_INLINE
float pnanovdb_read_half(pnanovdb_buf_t buf, pnanovdb_address_t address)
880 return f16tof32(raw >> (pnanovdb_address_mask(address, 2) << 3));
882#elif defined(PNANOVDB_GLSL)
883PNANOVDB_FORCE_INLINE
float pnanovdb_read_half(pnanovdb_buf_t buf, pnanovdb_address_t address)
886 return unpackHalf2x16(raw >> (pnanovdb_address_mask(address, 2) << 3)).x;
892PNANOVDB_FORCE_INLINE
void pnanovdb_write_uint32(pnanovdb_buf_t buf, pnanovdb_address_t address, pnanovdb_uint32_t value)
894 pnanovdb_buf_write_uint32(buf, address.byte_offset, value);
896PNANOVDB_FORCE_INLINE
void pnanovdb_write_uint64(pnanovdb_buf_t buf, pnanovdb_address_t address, pnanovdb_uint64_t value)
898 pnanovdb_buf_write_uint64(buf, address.byte_offset, value);
900PNANOVDB_FORCE_INLINE
void pnanovdb_write_int32(pnanovdb_buf_t buf, pnanovdb_address_t address, pnanovdb_int32_t value)
904PNANOVDB_FORCE_INLINE
void pnanovdb_write_int64(pnanovdb_buf_t buf, pnanovdb_address_t address, pnanovdb_int64_t value)
906 pnanovdb_buf_write_uint64(buf, address.byte_offset, pnanovdb_int64_as_uint64(value));
916PNANOVDB_FORCE_INLINE
void pnanovdb_write_coord(pnanovdb_buf_t buf, pnanovdb_address_t address, PNANOVDB_IN(pnanovdb_coord_t) value)
918 pnanovdb_write_uint32(buf, pnanovdb_address_offset(address, 0u), pnanovdb_int32_as_uint32(PNANOVDB_DEREF(value).x));
919 pnanovdb_write_uint32(buf, pnanovdb_address_offset(address, 4u), pnanovdb_int32_as_uint32(PNANOVDB_DEREF(value).y));
920 pnanovdb_write_uint32(buf, pnanovdb_address_offset(address, 8u), pnanovdb_int32_as_uint32(PNANOVDB_DEREF(value).z));
922PNANOVDB_FORCE_INLINE
void pnanovdb_write_vec3(pnanovdb_buf_t buf, pnanovdb_address_t address, PNANOVDB_IN(pnanovdb_vec3_t) value)
931#define PNANOVDB_MAGIC_NUMBER 0x304244566f6e614eUL
932#define PNANOVDB_MAGIC_GRID 0x314244566f6e614eUL
933#define PNANOVDB_MAGIC_FILE 0x324244566f6e614eUL
935#define PNANOVDB_MAJOR_VERSION_NUMBER 32
936#define PNANOVDB_MINOR_VERSION_NUMBER 7
937#define PNANOVDB_PATCH_VERSION_NUMBER 0
939#define PNANOVDB_GRID_TYPE_UNKNOWN 0
940#define PNANOVDB_GRID_TYPE_FLOAT 1
941#define PNANOVDB_GRID_TYPE_DOUBLE 2
942#define PNANOVDB_GRID_TYPE_INT16 3
943#define PNANOVDB_GRID_TYPE_INT32 4
944#define PNANOVDB_GRID_TYPE_INT64 5
945#define PNANOVDB_GRID_TYPE_VEC3F 6
946#define PNANOVDB_GRID_TYPE_VEC3D 7
947#define PNANOVDB_GRID_TYPE_MASK 8
948#define PNANOVDB_GRID_TYPE_HALF 9
949#define PNANOVDB_GRID_TYPE_UINT32 10
950#define PNANOVDB_GRID_TYPE_BOOLEAN 11
951#define PNANOVDB_GRID_TYPE_RGBA8 12
952#define PNANOVDB_GRID_TYPE_FP4 13
953#define PNANOVDB_GRID_TYPE_FP8 14
954#define PNANOVDB_GRID_TYPE_FP16 15
955#define PNANOVDB_GRID_TYPE_FPN 16
956#define PNANOVDB_GRID_TYPE_VEC4F 17
957#define PNANOVDB_GRID_TYPE_VEC4D 18
958#define PNANOVDB_GRID_TYPE_INDEX 19
959#define PNANOVDB_GRID_TYPE_ONINDEX 20
960#define PNANOVDB_GRID_TYPE_INDEXMASK 21
961#define PNANOVDB_GRID_TYPE_ONINDEXMASK 22
962#define PNANOVDB_GRID_TYPE_POINTINDEX 23
963#define PNANOVDB_GRID_TYPE_VEC3U8 24
964#define PNANOVDB_GRID_TYPE_VEC3U16 25
965#define PNANOVDB_GRID_TYPE_UINT8 26
966#define PNANOVDB_GRID_TYPE_END 27
968#define PNANOVDB_GRID_CLASS_UNKNOWN 0
969#define PNANOVDB_GRID_CLASS_LEVEL_SET 1
970#define PNANOVDB_GRID_CLASS_FOG_VOLUME 2
971#define PNANOVDB_GRID_CLASS_STAGGERED 3
972#define PNANOVDB_GRID_CLASS_POINT_INDEX 4
973#define PNANOVDB_GRID_CLASS_POINT_DATA 5
974#define PNANOVDB_GRID_CLASS_TOPOLOGY 6
975#define PNANOVDB_GRID_CLASS_VOXEL_VOLUME 7
976#define PNANOVDB_GRID_CLASS_INDEX_GRID 8
977#define PNANOVDB_GRID_CLASS_TENSOR_GRID 9
978#define PNANOVDB_GRID_CLASS_END 10
980#define PNANOVDB_GRID_FLAGS_HAS_LONG_GRID_NAME (1 << 0)
981#define PNANOVDB_GRID_FLAGS_HAS_BBOX (1 << 1)
982#define PNANOVDB_GRID_FLAGS_HAS_MIN_MAX (1 << 2)
983#define PNANOVDB_GRID_FLAGS_HAS_AVERAGE (1 << 3)
984#define PNANOVDB_GRID_FLAGS_HAS_STD_DEVIATION (1 << 4)
985#define PNANOVDB_GRID_FLAGS_IS_BREADTH_FIRST (1 << 5)
986#define PNANOVDB_GRID_FLAGS_END (1 << 6)
988#define PNANOVDB_LEAF_TYPE_DEFAULT 0
989#define PNANOVDB_LEAF_TYPE_LITE 1
990#define PNANOVDB_LEAF_TYPE_FP 2
991#define PNANOVDB_LEAF_TYPE_INDEX 3
992#define PNANOVDB_LEAF_TYPE_INDEXMASK 4
993#define PNANOVDB_LEAF_TYPE_POINTINDEX 5
997PNANOVDB_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, 8 };
999PNANOVDB_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, 64 };
1001PNANOVDB_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, 8 };
1003PNANOVDB_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, 8 };
1005PNANOVDB_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, 32 };
1007PNANOVDB_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, 0 };
1024#define PNANOVDB_MAP_SIZE 264
1026#define PNANOVDB_MAP_OFF_MATF 0
1027#define PNANOVDB_MAP_OFF_INVMATF 36
1028#define PNANOVDB_MAP_OFF_VECF 72
1029#define PNANOVDB_MAP_OFF_TAPERF 84
1030#define PNANOVDB_MAP_OFF_MATD 88
1031#define PNANOVDB_MAP_OFF_INVMATD 160
1032#define PNANOVDB_MAP_OFF_VECD 232
1033#define PNANOVDB_MAP_OFF_TAPERD 256
1108#define PNANOVDB_GRID_SIZE 672
1110#define PNANOVDB_GRID_OFF_MAGIC 0
1111#define PNANOVDB_GRID_OFF_CHECKSUM 8
1112#define PNANOVDB_GRID_OFF_VERSION 16
1113#define PNANOVDB_GRID_OFF_FLAGS 20
1114#define PNANOVDB_GRID_OFF_GRID_INDEX 24
1115#define PNANOVDB_GRID_OFF_GRID_COUNT 28
1116#define PNANOVDB_GRID_OFF_GRID_SIZE 32
1117#define PNANOVDB_GRID_OFF_GRID_NAME 40
1118#define PNANOVDB_GRID_OFF_MAP 296
1119#define PNANOVDB_GRID_OFF_WORLD_BBOX 560
1120#define PNANOVDB_GRID_OFF_VOXEL_SIZE 608
1121#define PNANOVDB_GRID_OFF_GRID_CLASS 632
1122#define PNANOVDB_GRID_OFF_GRID_TYPE 636
1123#define PNANOVDB_GRID_OFF_BLIND_METADATA_OFFSET 640
1124#define PNANOVDB_GRID_OFF_BLIND_METADATA_COUNT 648
1217PNANOVDB_FORCE_INLINE pnanovdb_uint32_t
pnanovdb_make_version(pnanovdb_uint32_t major, pnanovdb_uint32_t minor, pnanovdb_uint32_t patch_num)
1219 return (major << 21u) | (minor << 10u) | patch_num;
1224 return (version >> 21u) & ((1u << 11u) - 1u);
1228 return (version >> 10u) & ((1u << 11u) - 1u);
1232 return version & ((1u << 10u) - 1u);
1249#define PNANOVDB_GRIDBLINDMETADATA_SIZE 288
1251#define PNANOVDB_GRIDBLINDMETADATA_OFF_DATA_OFFSET 0
1252#define PNANOVDB_GRIDBLINDMETADATA_OFF_VALUE_COUNT 8
1253#define PNANOVDB_GRIDBLINDMETADATA_OFF_VALUE_SIZE 16
1254#define PNANOVDB_GRIDBLINDMETADATA_OFF_SEMANTIC 20
1255#define PNANOVDB_GRIDBLINDMETADATA_OFF_DATA_CLASS 24
1256#define PNANOVDB_GRIDBLINDMETADATA_OFF_DATA_TYPE 28
1257#define PNANOVDB_GRIDBLINDMETADATA_OFF_NAME 32
1299#define PNANOVDB_TREE_SIZE 64
1301#define PNANOVDB_TREE_OFF_NODE_OFFSET_LEAF 0
1302#define PNANOVDB_TREE_OFF_NODE_OFFSET_LOWER 8
1303#define PNANOVDB_TREE_OFF_NODE_OFFSET_UPPER 16
1304#define PNANOVDB_TREE_OFF_NODE_OFFSET_ROOT 24
1305#define PNANOVDB_TREE_OFF_NODE_COUNT_LEAF 32
1306#define PNANOVDB_TREE_OFF_NODE_COUNT_LOWER 36
1307#define PNANOVDB_TREE_OFF_NODE_COUNT_UPPER 40
1308#define PNANOVDB_TREE_OFF_TILE_COUNT_LEAF 44
1309#define PNANOVDB_TREE_OFF_TILE_COUNT_LOWER 48
1310#define PNANOVDB_TREE_OFF_TILE_COUNT_UPPER 52
1311#define PNANOVDB_TREE_OFF_VOXEL_COUNT 56
1393#define PNANOVDB_ROOT_BASE_SIZE 28
1395#define PNANOVDB_ROOT_OFF_BBOX_MIN 0
1396#define PNANOVDB_ROOT_OFF_BBOX_MAX 12
1397#define PNANOVDB_ROOT_OFF_TABLE_SIZE 24
1431#define PNANOVDB_ROOT_TILE_BASE_SIZE 20
1433#define PNANOVDB_ROOT_TILE_OFF_KEY 0
1434#define PNANOVDB_ROOT_TILE_OFF_CHILD 8
1435#define PNANOVDB_ROOT_TILE_OFF_STATE 16
1471#define PNANOVDB_UPPER_TABLE_COUNT 32768
1472#define PNANOVDB_UPPER_BASE_SIZE 8224
1474#define PNANOVDB_UPPER_OFF_BBOX_MIN 0
1475#define PNANOVDB_UPPER_OFF_BBOX_MAX 12
1476#define PNANOVDB_UPPER_OFF_FLAGS 24
1477#define PNANOVDB_UPPER_OFF_VALUE_MASK 32
1478#define PNANOVDB_UPPER_OFF_CHILD_MASK 4128
1491 return ((value >> (bit_index & 31u)) & 1) != 0u;
1495 return ((value >> (bit_index & 31u)) & 1) != 0u;
1507 if (!value) { valueMask &= ~(1u << (bit_index & 31u)); }
1508 if (value) valueMask |= (1u << (bit_index & 31u));
1526#define PNANOVDB_LOWER_TABLE_COUNT 4096
1527#define PNANOVDB_LOWER_BASE_SIZE 1056
1529#define PNANOVDB_LOWER_OFF_BBOX_MIN 0
1530#define PNANOVDB_LOWER_OFF_BBOX_MAX 12
1531#define PNANOVDB_LOWER_OFF_FLAGS 24
1532#define PNANOVDB_LOWER_OFF_VALUE_MASK 32
1533#define PNANOVDB_LOWER_OFF_CHILD_MASK 544
1546 return ((value >> (bit_index & 31u)) & 1) != 0u;
1550 return ((value >> (bit_index & 31u)) & 1) != 0u;
1562 if (!value) { valueMask &= ~(1u << (bit_index & 31u)); }
1563 if (value) valueMask |= (1u << (bit_index & 31u));
1579#define PNANOVDB_LEAF_TABLE_COUNT 512
1580#define PNANOVDB_LEAF_BASE_SIZE 80
1582#define PNANOVDB_LEAF_OFF_BBOX_MIN 0
1583#define PNANOVDB_LEAF_OFF_BBOX_DIF_AND_FLAGS 12
1584#define PNANOVDB_LEAF_OFF_VALUE_MASK 16
1586#define PNANOVDB_LEAF_TABLE_NEG_OFF_BBOX_DIF_AND_FLAGS 84
1587#define PNANOVDB_LEAF_TABLE_NEG_OFF_MINIMUM 16
1588#define PNANOVDB_LEAF_TABLE_NEG_OFF_QUANTUM 12
1598 return ((value >> (bit_index & 31u)) & 1) != 0u;
1644{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},
1645{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},
1646{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},
1647{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},
1648{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},
1649{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},
1650{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},
1651{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},
1652{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},
1653{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},
1654{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},
1655{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},
1656{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},
1657{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},
1658{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},
1659{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},
1660{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},
1661{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},
1662{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},
1663{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},
1664{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},
1665{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},
1666{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},
1667{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},
1668{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},
1669{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},
1670{28, 29, 30, 32, 36, 64, 8, 8, 20, 32, 8224, 8225, 8228, 8232, 8256, 270400, 1056, 1057, 1060, 1064, 1088, 33856, 80, 81, 84, 88, 96, 608},
1679 meta.
address = pnanovdb_address_offset64(meta.
address, byte_offset);
1688 pnanovdb_address_t address = pnanovdb_address_offset64(meta.
address, pnanovdb_int64_as_uint64(byte_offset));
1703 root.
address = pnanovdb_address_offset64(root.
address, byte_offset);
1710 tile.
address = pnanovdb_address_offset(tile.
address, PNANOVDB_GRID_TYPE_GET(grid_type, root_size));
1711 tile.
address = pnanovdb_address_offset_product(tile.
address, PNANOVDB_GRID_TYPE_GET(grid_type, root_tile_size), n);
1718 tile.
address = pnanovdb_address_offset(tile.
address, PNANOVDB_GRID_TYPE_GET(grid_type, root_size));
1731#if defined(PNANOVDB_NATIVE_64)
1732 pnanovdb_uint64_t iu = pnanovdb_int32_as_uint32(PNANOVDB_DEREF(ijk).x) >> 12u;
1733 pnanovdb_uint64_t ju = pnanovdb_int32_as_uint32(PNANOVDB_DEREF(ijk).y) >> 12u;
1734 pnanovdb_uint64_t ku = pnanovdb_int32_as_uint32(PNANOVDB_DEREF(ijk).z) >> 12u;
1735 return (ku) | (ju << 21u) | (iu << 42u);
1737 pnanovdb_uint32_t iu = pnanovdb_int32_as_uint32(PNANOVDB_DEREF(ijk).x) >> 12u;
1738 pnanovdb_uint32_t ju = pnanovdb_int32_as_uint32(PNANOVDB_DEREF(ijk).y) >> 12u;
1739 pnanovdb_uint32_t ku = pnanovdb_int32_as_uint32(PNANOVDB_DEREF(ijk).z) >> 12u;
1740 pnanovdb_uint32_t key_x = ku | (ju << 21);
1741 pnanovdb_uint32_t key_y = (iu << 10) | (ju >> 11);
1742 return pnanovdb_uint32_as_uint64(key_x, key_y);
1751 for (pnanovdb_uint32_t i = 0u; i < tile_count; i++)
1757 tile.
address = pnanovdb_address_offset(tile.
address, PNANOVDB_GRID_TYPE_GET(grid_type, root_tile_size));
1767 return (((PNANOVDB_DEREF(ijk).x & 7) >> 0) << (2 * 3)) +
1768 (((PNANOVDB_DEREF(ijk).y & 7) >> 0) << (3)) +
1769 ((PNANOVDB_DEREF(ijk).z & 7) >> 0);
1774 pnanovdb_uint32_t byte_offset = PNANOVDB_GRID_TYPE_GET(grid_type, leaf_off_min);
1775 return pnanovdb_address_offset(node.
address, byte_offset);
1780 pnanovdb_uint32_t byte_offset = PNANOVDB_GRID_TYPE_GET(grid_type, leaf_off_max);
1781 return pnanovdb_address_offset(node.
address, byte_offset);
1786 pnanovdb_uint32_t byte_offset = PNANOVDB_GRID_TYPE_GET(grid_type, leaf_off_ave);
1787 return pnanovdb_address_offset(node.
address, byte_offset);
1792 pnanovdb_uint32_t byte_offset = PNANOVDB_GRID_TYPE_GET(grid_type, leaf_off_stddev);
1793 return pnanovdb_address_offset(node.
address, byte_offset);
1798 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);
1799 return pnanovdb_address_offset(node.
address, byte_offset);
1810PNANOVDB_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)
1813 pnanovdb_uint32_t value_bits = 1u << value_log_bits;
1814 pnanovdb_uint32_t value_mask = (1u << value_bits) - 1u;
1815 pnanovdb_uint32_t values_per_word_bits = 5u - value_log_bits;
1816 pnanovdb_uint32_t values_per_word_mask = (1u << values_per_word_bits) - 1u;
1821 pnanovdb_uint32_t raw =
pnanovdb_read_uint32(buf, pnanovdb_address_offset(address, ((n >> values_per_word_bits) << 2u)));
1822 pnanovdb_uint32_t value_compressed = (raw >> ((n & values_per_word_mask) << value_log_bits)) & value_mask;
1823 return pnanovdb_uint32_to_float(value_compressed) * quantum + minimum;
1844 pnanovdb_uint32_t flags = bbox_dif_and_flags >> 24u;
1845 pnanovdb_uint32_t value_log_bits = flags >> 5;
1911 pnanovdb_uint32_t word_idx = n >> 5;
1912 pnanovdb_uint32_t bit_idx = n & 31;
1913 pnanovdb_uint32_t val_mask =
1915 return (val_mask & (1u << bit_idx)) != 0u;
1919 pnanovdb_uint32_t word_idx = n >> 5;
1920 pnanovdb_uint32_t bit_idx = n & 31;
1921 pnanovdb_uint32_t val_mask =
1925 val_mask = val_mask | (1u << bit_idx);
1929 val_mask = val_mask & ~(1u << bit_idx);
1959 pnanovdb_uint64_t idx = pnanovdb_uint32_as_uint64_low(0u);
1970 pnanovdb_uint64_t idx = pnanovdb_uint32_as_uint64_low(0u);
1981 pnanovdb_uint64_t idx = pnanovdb_uint32_as_uint64_low(0u);
1992 pnanovdb_uint64_t idx = pnanovdb_uint32_as_uint64_low(0u);
2005 pnanovdb_uint32_t word_idx = n >> 6u;
2006 pnanovdb_uint32_t bit_idx = n & 63u;
2009 pnanovdb_uint64_t value_index = pnanovdb_uint32_as_uint64_low(0u);
2012 pnanovdb_uint32_t sum = 0u;
2016 pnanovdb_uint64_t prefix_sum =
pnanovdb_read_uint64(buf, pnanovdb_address_offset(value_address, 8u));
2061 pnanovdb_uint32_t word_idx = n >> 5;
2062 pnanovdb_uint32_t bit_idx = n & 31;
2063 pnanovdb_uint32_t val_mask =
2065 return (val_mask & (1u << bit_idx)) != 0u;
2069 pnanovdb_uint32_t word_idx = n >> 5;
2070 pnanovdb_uint32_t bit_idx = n & 31;
2071 pnanovdb_uint32_t val_mask =
2075 val_mask = val_mask | (1u << bit_idx);
2079 val_mask = val_mask & ~(1u << bit_idx);
2114 raw32 = (raw32 & 0xFFFF0000) | (value & 0x0000FFFF);
2118 raw32 = (raw32 & 0x0000FFFF) | (value << 16u);
2124 pnanovdb_uint32_t word_idx = i >> 5;
2125 pnanovdb_uint32_t bit_idx = i & 31;
2128 val_mask = val_mask | (1u << bit_idx);
2141 return (((PNANOVDB_DEREF(ijk).x & 127) >> 3) << (2 * 4)) +
2142 (((PNANOVDB_DEREF(ijk).y & 127) >> 3) << (4)) +
2143 ((PNANOVDB_DEREF(ijk).z & 127) >> 3);
2148 pnanovdb_uint32_t byte_offset = PNANOVDB_GRID_TYPE_GET(grid_type, lower_off_min);
2149 return pnanovdb_address_offset(node.
address, byte_offset);
2154 pnanovdb_uint32_t byte_offset = PNANOVDB_GRID_TYPE_GET(grid_type, lower_off_max);
2155 return pnanovdb_address_offset(node.
address, byte_offset);
2160 pnanovdb_uint32_t byte_offset = PNANOVDB_GRID_TYPE_GET(grid_type, lower_off_ave);
2161 return pnanovdb_address_offset(node.
address, byte_offset);
2166 pnanovdb_uint32_t byte_offset = PNANOVDB_GRID_TYPE_GET(grid_type, lower_off_stddev);
2167 return pnanovdb_address_offset(node.
address, byte_offset);
2172 pnanovdb_uint32_t byte_offset = PNANOVDB_GRID_TYPE_GET(grid_type, lower_off_table) + PNANOVDB_GRID_TYPE_GET(grid_type, table_stride) * n;
2173 return pnanovdb_address_offset(node.
address, byte_offset);
2192 pnanovdb_address_t value_address;
2197 PNANOVDB_DEREF(level) = 0u;
2202 PNANOVDB_DEREF(level) = 1u;
2204 return value_address;
2209 pnanovdb_uint32_t level;
2217 return (((PNANOVDB_DEREF(ijk).x & 4095) >> 7) << (2 * 5)) +
2218 (((PNANOVDB_DEREF(ijk).y & 4095) >> 7) << (5)) +
2219 ((PNANOVDB_DEREF(ijk).z & 4095) >> 7);
2224 pnanovdb_uint32_t byte_offset = PNANOVDB_GRID_TYPE_GET(grid_type, upper_off_min);
2225 return pnanovdb_address_offset(node.
address, byte_offset);
2230 pnanovdb_uint32_t byte_offset = PNANOVDB_GRID_TYPE_GET(grid_type, upper_off_max);
2231 return pnanovdb_address_offset(node.
address, byte_offset);
2236 pnanovdb_uint32_t byte_offset = PNANOVDB_GRID_TYPE_GET(grid_type, upper_off_ave);
2237 return pnanovdb_address_offset(node.
address, byte_offset);
2242 pnanovdb_uint32_t byte_offset = PNANOVDB_GRID_TYPE_GET(grid_type, upper_off_stddev);
2243 return pnanovdb_address_offset(node.
address, byte_offset);
2248 pnanovdb_uint32_t byte_offset = PNANOVDB_GRID_TYPE_GET(grid_type, upper_off_table) + PNANOVDB_GRID_TYPE_GET(grid_type, table_stride) * n;
2249 return pnanovdb_address_offset(node.
address, byte_offset);
2268 pnanovdb_address_t value_address;
2277 PNANOVDB_DEREF(level) = 2u;
2279 return value_address;
2284 pnanovdb_uint32_t level;
2298 pnanovdb_uint32_t byte_offset = PNANOVDB_GRID_TYPE_GET(grid_type, root_off_min);
2299 return pnanovdb_address_offset(root.
address, byte_offset);
2304 pnanovdb_uint32_t byte_offset = PNANOVDB_GRID_TYPE_GET(grid_type, root_off_max);
2305 return pnanovdb_address_offset(root.
address, byte_offset);
2310 pnanovdb_uint32_t byte_offset = PNANOVDB_GRID_TYPE_GET(grid_type, root_off_ave);
2311 return pnanovdb_address_offset(root.
address, byte_offset);
2316 pnanovdb_uint32_t byte_offset = PNANOVDB_GRID_TYPE_GET(grid_type, root_off_stddev);
2317 return pnanovdb_address_offset(root.
address, byte_offset);
2322 pnanovdb_uint32_t byte_offset = PNANOVDB_GRID_TYPE_GET(grid_type, root_tile_off_value);
2323 return pnanovdb_address_offset(root_tile.
address, byte_offset);
2329 pnanovdb_address_t ret;
2330 if (pnanovdb_address_is_null(tile.
address))
2332 ret = pnanovdb_address_offset(root.
address, PNANOVDB_GRID_TYPE_GET(grid_type, root_off_background));
2333 PNANOVDB_DEREF(level) = 4u;
2337 ret = pnanovdb_address_offset(tile.
address, PNANOVDB_GRID_TYPE_GET(grid_type, root_tile_off_value));
2338 PNANOVDB_DEREF(level) = 3u;
2350 pnanovdb_uint32_t level;
2356 pnanovdb_uint32_t level;
2358 PNANOVDB_DEREF(bit_index) = level == 0u ? pnanovdb_int32_as_uint32(PNANOVDB_DEREF(ijk).x & 7) : 0u;
2362PNANOVDB_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)
2376PNANOVDB_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)
2390PNANOVDB_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)
2404PNANOVDB_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)
2420 pnanovdb_uint64_t ret;
2434 pnanovdb_uint64_t ret;
2448 pnanovdb_address_t value_address,
2449 PNANOVDB_IN(pnanovdb_coord_t) ijk,
2450 pnanovdb_uint32_t level,
2451 PNANOVDB_INOUT(pnanovdb_uint64_t)range_begin,
2452 PNANOVDB_INOUT(pnanovdb_uint64_t)range_end
2455 pnanovdb_uint32_t local_range_begin = 0u;
2456 pnanovdb_uint32_t local_range_end = 0u;
2457 pnanovdb_uint64_t offset = pnanovdb_uint32_as_uint64_low(0u);
2472 return pnanovdb_uint32_as_uint64_low(local_range_end - local_range_begin);
2477 pnanovdb_grid_type_t value_type,
2478 pnanovdb_address_t value_address,
2479 pnanovdb_address_t blindmetadata_value_address,
2480 PNANOVDB_IN(pnanovdb_coord_t) ijk,
2481 pnanovdb_uint32_t level,
2482 PNANOVDB_INOUT(pnanovdb_address_t)address_begin,
2483 PNANOVDB_INOUT(pnanovdb_address_t)address_end
2486 pnanovdb_uint64_t range_begin;
2487 pnanovdb_uint64_t range_end;
2490 pnanovdb_uint32_t stride = 12u;
2499 PNANOVDB_DEREF(address_begin) = pnanovdb_address_offset64_product(blindmetadata_value_address, range_begin, stride);
2500 PNANOVDB_DEREF(address_end) = pnanovdb_address_offset64_product(blindmetadata_value_address, range_end, stride);
2518 PNANOVDB_DEREF(acc).key.x = 0x7FFFFFFF;
2519 PNANOVDB_DEREF(acc).key.y = 0x7FFFFFFF;
2520 PNANOVDB_DEREF(acc).key.z = 0x7FFFFFFF;
2521 PNANOVDB_DEREF(acc).leaf.address = pnanovdb_address_null();
2522 PNANOVDB_DEREF(acc).lower.address = pnanovdb_address_null();
2523 PNANOVDB_DEREF(acc).upper.address = pnanovdb_address_null();
2524 PNANOVDB_DEREF(acc).root = root;
2529 if (pnanovdb_address_is_null(PNANOVDB_DEREF(acc).leaf.
address)) {
return PNANOVDB_FALSE; }
2530 if ((dirty & ~((1u << 3) - 1u)) != 0)
2532 PNANOVDB_DEREF(acc).leaf.address = pnanovdb_address_null();
2533 return PNANOVDB_FALSE;
2535 return PNANOVDB_TRUE;
2539 if (pnanovdb_address_is_null(PNANOVDB_DEREF(acc).lower.
address)) {
return PNANOVDB_FALSE; }
2540 if ((dirty & ~((1u << 7) - 1u)) != 0)
2542 PNANOVDB_DEREF(acc).lower.address = pnanovdb_address_null();
2543 return PNANOVDB_FALSE;
2545 return PNANOVDB_TRUE;
2549 if (pnanovdb_address_is_null(PNANOVDB_DEREF(acc).upper.
address)) {
return PNANOVDB_FALSE; }
2550 if ((dirty & ~((1u << 12) - 1u)) != 0)
2552 PNANOVDB_DEREF(acc).upper.address = pnanovdb_address_null();
2553 return PNANOVDB_FALSE;
2555 return PNANOVDB_TRUE;
2559 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);
2571 pnanovdb_address_t value_address;
2575 PNANOVDB_DEREF(acc).leaf = child;
2576 PNANOVDB_DEREF(acc).key = PNANOVDB_DEREF(ijk);
2578 PNANOVDB_DEREF(level) = 0u;
2583 PNANOVDB_DEREF(level) = 1u;
2585 return value_address;
2590 pnanovdb_uint32_t level;
2603 pnanovdb_address_t value_address;
2607 PNANOVDB_DEREF(acc).lower = child;
2608 PNANOVDB_DEREF(acc).key = PNANOVDB_DEREF(ijk);
2614 PNANOVDB_DEREF(level) = 2u;
2616 return value_address;
2621 pnanovdb_uint32_t level;
2628 pnanovdb_address_t ret;
2629 if (pnanovdb_address_is_null(tile.
address))
2631 ret = pnanovdb_address_offset(root.
address, PNANOVDB_GRID_TYPE_GET(grid_type, root_off_background));
2632 PNANOVDB_DEREF(level) = 4u;
2636 ret = pnanovdb_address_offset(tile.
address, PNANOVDB_GRID_TYPE_GET(grid_type, root_tile_off_value));
2637 PNANOVDB_DEREF(level) = 3u;
2642 PNANOVDB_DEREF(acc).upper = child;
2643 PNANOVDB_DEREF(acc).key = PNANOVDB_DEREF(ijk);
2651 pnanovdb_uint32_t level;
2659 pnanovdb_address_t value_address;
2663 PNANOVDB_DEREF(level) = 0u;
2677 return value_address;
2682 pnanovdb_uint32_t level;
2688 pnanovdb_uint32_t level;
2690 PNANOVDB_DEREF(bit_index) = level == 0u ? pnanovdb_int32_as_uint32(PNANOVDB_DEREF(ijk).x & 7) : 0u;
2704 pnanovdb_uint32_t ret;
2708 PNANOVDB_DEREF(acc).leaf = child;
2709 PNANOVDB_DEREF(acc).key = PNANOVDB_DEREF(ijk);
2722 pnanovdb_uint32_t ret;
2726 PNANOVDB_DEREF(acc).lower = child;
2727 PNANOVDB_DEREF(acc).key = PNANOVDB_DEREF(ijk);
2732 ret = (1u << (4u + 3u));
2740 pnanovdb_uint32_t ret;
2741 if (pnanovdb_address_is_null(tile.
address))
2743 ret = 1u << (5u + 4u + 3u);
2747 ret = 1u << (5u + 4u + 3u);
2752 PNANOVDB_DEREF(acc).upper = child;
2753 PNANOVDB_DEREF(acc).key = PNANOVDB_DEREF(ijk);
2763 pnanovdb_uint32_t dim;
2794 pnanovdb_bool_t is_active;
2798 PNANOVDB_DEREF(acc).leaf = child;
2799 PNANOVDB_DEREF(acc).key = PNANOVDB_DEREF(ijk);
2812 pnanovdb_bool_t is_active;
2816 PNANOVDB_DEREF(acc).lower = child;
2817 PNANOVDB_DEREF(acc).key = PNANOVDB_DEREF(ijk);
2830 pnanovdb_bool_t is_active;
2831 if (pnanovdb_address_is_null(tile.
address))
2833 is_active = PNANOVDB_FALSE;
2838 is_active = state != 0u;
2843 PNANOVDB_DEREF(acc).upper = child;
2844 PNANOVDB_DEREF(acc).key = PNANOVDB_DEREF(ijk);
2854 pnanovdb_bool_t is_active;
2878 pnanovdb_vec3_t dst;
2879 float sx = PNANOVDB_DEREF(src).x;
2880 float sy = PNANOVDB_DEREF(src).y;
2881 float sz = PNANOVDB_DEREF(src).z;
2890 pnanovdb_vec3_t dst;
2902 pnanovdb_vec3_t dst;
2903 float sx = PNANOVDB_DEREF(src).x;
2904 float sy = PNANOVDB_DEREF(src).y;
2905 float sz = PNANOVDB_DEREF(src).z;
2914 pnanovdb_vec3_t dst;
2915 float sx = PNANOVDB_DEREF(src).x;
2916 float sy = PNANOVDB_DEREF(src).y;
2917 float sz = PNANOVDB_DEREF(src).z;
3033 0.14425f, 0.643275f, 0.830409f, 0.331384f, 0.105263f, 0.604289f, 0.167641f, 0.666667f,
3034 0.892788f, 0.393762f, 0.0818713f, 0.580897f, 0.853801f, 0.354776f, 0.916179f, 0.417154f,
3035 0.612086f, 0.11306f, 0.79922f, 0.300195f, 0.510721f, 0.0116959f, 0.947368f, 0.448343f,
3036 0.362573f, 0.861598f, 0.0506823f, 0.549708f, 0.261209f, 0.760234f, 0.19883f, 0.697856f,
3037 0.140351f, 0.639376f, 0.576998f, 0.0779727f, 0.522417f, 0.0233918f, 0.460039f, 0.959064f,
3038 0.888889f, 0.389864f, 0.327485f, 0.826511f, 0.272904f, 0.77193f, 0.709552f, 0.210526f,
3039 0.483431f, 0.982456f, 0.296296f, 0.795322f, 0.116959f, 0.615984f, 0.0545809f, 0.553606f,
3040 0.732943f, 0.233918f, 0.545809f, 0.0467836f, 0.865497f, 0.366472f, 0.803119f, 0.304094f,
3041 0.518519f, 0.0194932f, 0.45614f, 0.955166f, 0.729045f, 0.230019f, 0.54191f, 0.042885f,
3042 0.269006f, 0.768031f, 0.705653f, 0.206628f, 0.479532f, 0.978558f, 0.292398f, 0.791423f,
3043 0.237817f, 0.736842f, 0.424951f, 0.923977f, 0.136452f, 0.635478f, 0.323587f, 0.822612f,
3044 0.986355f, 0.487329f, 0.674464f, 0.175439f, 0.88499f, 0.385965f, 0.573099f, 0.0740741f,
3045 0.51462f, 0.0155945f, 0.202729f, 0.701754f, 0.148148f, 0.647174f, 0.834308f, 0.335283f,
3046 0.265107f, 0.764133f, 0.951267f, 0.452242f, 0.896686f, 0.397661f, 0.08577f, 0.584795f,
3047 0.8577f, 0.358674f, 0.920078f, 0.421053f, 0.740741f, 0.241715f, 0.678363f, 0.179337f,
3048 0.109162f, 0.608187f, 0.17154f, 0.670565f, 0.491228f, 0.990253f, 0.42885f, 0.927875f,
3049 0.0662768f, 0.565302f, 0.62768f, 0.128655f, 0.183236f, 0.682261f, 0.744639f, 0.245614f,
3050 0.814815f, 0.315789f, 0.378168f, 0.877193f, 0.931774f, 0.432749f, 0.495127f, 0.994152f,
3051 0.0350877f, 0.534113f, 0.97076f, 0.471735f, 0.214425f, 0.71345f, 0.526316f, 0.0272904f,
3052 0.783626f, 0.2846f, 0.222222f, 0.721248f, 0.962963f, 0.463938f, 0.276803f, 0.775828f,
3053 0.966862f, 0.467836f, 0.405458f, 0.904483f, 0.0701754f, 0.569201f, 0.881092f, 0.382066f,
3054 0.218324f, 0.717349f, 0.654971f, 0.155945f, 0.818713f, 0.319688f, 0.132554f, 0.631579f,
3055 0.0623782f, 0.561404f, 0.748538f, 0.249513f, 0.912281f, 0.413255f, 0.974659f, 0.475634f,
3056 0.810916f, 0.311891f, 0.499025f, 0.998051f, 0.163743f, 0.662768f, 0.226121f, 0.725146f,
3057 0.690058f, 0.191033f, 0.00389864f, 0.502924f, 0.557505f, 0.0584795f, 0.120858f, 0.619883f,
3058 0.440546f, 0.939571f, 0.752437f, 0.253411f, 0.307992f, 0.807018f, 0.869396f, 0.37037f,
3059 0.658869f, 0.159844f, 0.346979f, 0.846004f, 0.588694f, 0.0896686f, 0.152047f, 0.651072f,
3060 0.409357f, 0.908382f, 0.596491f, 0.0974659f, 0.339181f, 0.838207f, 0.900585f, 0.401559f,
3061 0.34308f, 0.842105f, 0.779727f, 0.280702f, 0.693957f, 0.194932f, 0.25731f, 0.756335f,
3062 0.592593f, 0.0935673f, 0.0311891f, 0.530214f, 0.444444f, 0.94347f, 0.506823f, 0.00779727f,
3063 0.68616f, 0.187135f, 0.124756f, 0.623782f, 0.288499f, 0.787524f, 0.350877f, 0.849903f,
3064 0.436647f, 0.935673f, 0.873294f, 0.374269f, 0.538012f, 0.0389864f, 0.60039f, 0.101365f,
3065 0.57115f, 0.0721248f, 0.758285f, 0.259259f, 0.719298f, 0.220273f, 0.532164f, 0.0331384f,
3066 0.321637f, 0.820663f, 0.00974659f, 0.508772f, 0.469786f, 0.968811f, 0.282651f, 0.781676f,
3067 0.539961f, 0.0409357f, 0.727096f, 0.22807f, 0.500975f, 0.00194932f, 0.563353f, 0.0643275f,
3068 0.290448f, 0.789474f, 0.477583f, 0.976608f, 0.251462f, 0.750487f, 0.31384f, 0.812865f,
3069 0.94152f, 0.442495f, 0.879142f, 0.380117f, 0.37232f, 0.871345f, 0.309942f, 0.808967f,
3070 0.192982f, 0.692008f, 0.130604f, 0.62963f, 0.621832f, 0.122807f, 0.559454f, 0.0604289f,
3071 0.660819f, 0.161793f, 0.723197f, 0.224172f, 0.403509f, 0.902534f, 0.840156f, 0.341131f,
3072 0.411306f, 0.910331f, 0.473684f, 0.97271f, 0.653021f, 0.153996f, 0.0916179f, 0.590643f,
3073 0.196881f, 0.695906f, 0.384016f, 0.883041f, 0.0955166f, 0.594542f, 0.157895f, 0.65692f,
3074 0.945419f, 0.446394f, 0.633528f, 0.134503f, 0.844055f, 0.345029f, 0.906433f, 0.407407f,
3075 0.165692f, 0.664717f, 0.103314f, 0.602339f, 0.126706f, 0.625731f, 0.189084f, 0.688109f,
3076 0.91423f, 0.415205f, 0.851852f, 0.352827f, 0.875244f, 0.376218f, 0.937622f, 0.438596f,
3077 0.317739f, 0.816764f, 0.255361f, 0.754386f, 0.996101f, 0.497076f, 0.933723f, 0.434698f,
3078 0.567251f, 0.0682261f, 0.504873f, 0.00584795f, 0.247563f, 0.746589f, 0.185185f, 0.684211f,
3079 0.037037f, 0.536062f, 0.0994152f, 0.598441f, 0.777778f, 0.278752f, 0.465887f, 0.964912f,
3080 0.785575f, 0.28655f, 0.847953f, 0.348928f, 0.0292398f, 0.528265f, 0.7154f, 0.216374f,
3081 0.39961f, 0.898636f, 0.961014f, 0.461988f, 0.0487329f, 0.547758f, 0.111111f, 0.610136f,
3082 0.649123f, 0.150097f, 0.212476f, 0.711501f, 0.797271f, 0.298246f, 0.859649f, 0.360624f,
3083 0.118908f, 0.617934f, 0.0565302f, 0.555556f, 0.329435f, 0.82846f, 0.516569f, 0.0175439f,
3084 0.867446f, 0.368421f, 0.805068f, 0.306043f, 0.578947f, 0.079922f, 0.267057f, 0.766082f,
3085 0.270955f, 0.76998f, 0.707602f, 0.208577f, 0.668616f, 0.169591f, 0.606238f, 0.107212f,
3086 0.520468f, 0.0214425f, 0.45809f, 0.957115f, 0.419103f, 0.918129f, 0.356725f, 0.855751f,
3087 0.988304f, 0.489279f, 0.426901f, 0.925926f, 0.450292f, 0.949318f, 0.512671f, 0.0136452f,
3088 0.239766f, 0.738791f, 0.676413f, 0.177388f, 0.699805f, 0.20078f, 0.263158f, 0.762183f,
3089 0.773879f, 0.274854f, 0.337232f, 0.836257f, 0.672515f, 0.173489f, 0.734893f, 0.235867f,
3090 0.0253411f, 0.524366f, 0.586745f, 0.0877193f, 0.423002f, 0.922027f, 0.48538f, 0.984405f,
3091 0.74269f, 0.243665f, 0.680312f, 0.181287f, 0.953216f, 0.454191f, 0.1423f, 0.641326f,
3092 0.493177f, 0.992203f, 0.430799f, 0.929825f, 0.204678f, 0.703704f, 0.890838f, 0.391813f,
3093 0.894737f, 0.395712f, 0.0838207f, 0.582846f, 0.0448343f, 0.54386f, 0.231969f, 0.730994f,
3094 0.146199f, 0.645224f, 0.832359f, 0.333333f, 0.793372f, 0.294347f, 0.980507f, 0.481481f,
3095 0.364522f, 0.863548f, 0.80117f, 0.302144f, 0.824561f, 0.325536f, 0.138402f, 0.637427f,
3096 0.614035f, 0.11501f, 0.0526316f, 0.551657f, 0.0760234f, 0.575049f, 0.88694f, 0.387914f,
3109#define PNANOVDB_ENFORCE_FORWARD_STEPPING
3111#define PNANOVDB_HDDA_FLOAT_MAX 1e38f
3113struct pnanovdb_hdda_t
3115 pnanovdb_int32_t dim;
3118 pnanovdb_coord_t voxel;
3119 pnanovdb_coord_t step;
3120 pnanovdb_vec3_t delta;
3121 pnanovdb_vec3_t next;
3123PNANOVDB_STRUCT_TYPEDEF(pnanovdb_hdda_t)
3125PNANOVDB_FORCE_INLINE pnanovdb_coord_t pnanovdb_hdda_pos_to_ijk(PNANOVDB_IN(pnanovdb_vec3_t) pos)
3127 pnanovdb_coord_t voxel;
3128 voxel.x = pnanovdb_float_to_int32(pnanovdb_floor(PNANOVDB_DEREF(pos).x));
3129 voxel.y = pnanovdb_float_to_int32(pnanovdb_floor(PNANOVDB_DEREF(pos).y));
3130 voxel.z = pnanovdb_float_to_int32(pnanovdb_floor(PNANOVDB_DEREF(pos).z));
3134PNANOVDB_FORCE_INLINE pnanovdb_coord_t pnanovdb_hdda_pos_to_voxel(PNANOVDB_IN(pnanovdb_vec3_t) pos,
int dim)
3136 pnanovdb_coord_t voxel;
3137 voxel.x = pnanovdb_float_to_int32(pnanovdb_floor(PNANOVDB_DEREF(pos).x)) & (~(dim - 1));
3138 voxel.y = pnanovdb_float_to_int32(pnanovdb_floor(PNANOVDB_DEREF(pos).y)) & (~(dim - 1));
3139 voxel.z = pnanovdb_float_to_int32(pnanovdb_floor(PNANOVDB_DEREF(pos).z)) & (~(dim - 1));
3143PNANOVDB_FORCE_INLINE pnanovdb_vec3_t pnanovdb_hdda_ray_start(PNANOVDB_IN(pnanovdb_vec3_t) origin,
float tmin, PNANOVDB_IN(pnanovdb_vec3_t) direction)
3145 pnanovdb_vec3_t pos = pnanovdb_vec3_add(
3146 pnanovdb_vec3_mul(PNANOVDB_DEREF(direction), pnanovdb_vec3_uniform(tmin)),
3147 PNANOVDB_DEREF(origin)
3152PNANOVDB_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)
3154 PNANOVDB_DEREF(hdda).dim = dim;
3155 PNANOVDB_DEREF(hdda).tmin = tmin;
3156 PNANOVDB_DEREF(hdda).tmax = tmax;
3158 pnanovdb_vec3_t pos = pnanovdb_hdda_ray_start(origin, tmin, direction);
3159 pnanovdb_vec3_t dir_inv = pnanovdb_vec3_div(pnanovdb_vec3_uniform(1.f), PNANOVDB_DEREF(direction));
3161 PNANOVDB_DEREF(hdda).voxel = pnanovdb_hdda_pos_to_voxel(PNANOVDB_REF(pos), dim);
3164 if (PNANOVDB_DEREF(direction).x == 0.f)
3166 PNANOVDB_DEREF(hdda).next.x = PNANOVDB_HDDA_FLOAT_MAX;
3167 PNANOVDB_DEREF(hdda).step.x = 0;
3168 PNANOVDB_DEREF(hdda).delta.x = 0.f;
3170 else if (dir_inv.x > 0.f)
3172 PNANOVDB_DEREF(hdda).step.x = 1;
3173 PNANOVDB_DEREF(hdda).next.x = PNANOVDB_DEREF(hdda).tmin + (PNANOVDB_DEREF(hdda).voxel.x + dim - pos.x) * dir_inv.x;
3174 PNANOVDB_DEREF(hdda).delta.x = dir_inv.x;
3178 PNANOVDB_DEREF(hdda).step.x = -1;
3179 PNANOVDB_DEREF(hdda).next.x = PNANOVDB_DEREF(hdda).tmin + (PNANOVDB_DEREF(hdda).voxel.x - pos.x) * dir_inv.x;
3180 PNANOVDB_DEREF(hdda).delta.x = -dir_inv.x;
3184 if (PNANOVDB_DEREF(direction).y == 0.f)
3186 PNANOVDB_DEREF(hdda).next.y = PNANOVDB_HDDA_FLOAT_MAX;
3187 PNANOVDB_DEREF(hdda).step.y = 0;
3188 PNANOVDB_DEREF(hdda).delta.y = 0.f;
3190 else if (dir_inv.y > 0.f)
3192 PNANOVDB_DEREF(hdda).step.y = 1;
3193 PNANOVDB_DEREF(hdda).next.y = PNANOVDB_DEREF(hdda).tmin + (PNANOVDB_DEREF(hdda).voxel.y + dim - pos.y) * dir_inv.y;
3194 PNANOVDB_DEREF(hdda).delta.y = dir_inv.y;
3198 PNANOVDB_DEREF(hdda).step.y = -1;
3199 PNANOVDB_DEREF(hdda).next.y = PNANOVDB_DEREF(hdda).tmin + (PNANOVDB_DEREF(hdda).voxel.y - pos.y) * dir_inv.y;
3200 PNANOVDB_DEREF(hdda).delta.y = -dir_inv.y;
3204 if (PNANOVDB_DEREF(direction).z == 0.f)
3206 PNANOVDB_DEREF(hdda).next.z = PNANOVDB_HDDA_FLOAT_MAX;
3207 PNANOVDB_DEREF(hdda).step.z = 0;
3208 PNANOVDB_DEREF(hdda).delta.z = 0.f;
3210 else if (dir_inv.z > 0.f)
3212 PNANOVDB_DEREF(hdda).step.z = 1;
3213 PNANOVDB_DEREF(hdda).next.z = PNANOVDB_DEREF(hdda).tmin + (PNANOVDB_DEREF(hdda).voxel.z + dim - pos.z) * dir_inv.z;
3214 PNANOVDB_DEREF(hdda).delta.z = dir_inv.z;
3218 PNANOVDB_DEREF(hdda).step.z = -1;
3219 PNANOVDB_DEREF(hdda).next.z = PNANOVDB_DEREF(hdda).tmin + (PNANOVDB_DEREF(hdda).voxel.z - pos.z) * dir_inv.z;
3220 PNANOVDB_DEREF(hdda).delta.z = -dir_inv.z;
3224PNANOVDB_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)
3226 if (PNANOVDB_DEREF(hdda).dim == dim)
3228 return PNANOVDB_FALSE;
3230 PNANOVDB_DEREF(hdda).dim = dim;
3232 pnanovdb_vec3_t pos = pnanovdb_vec3_add(
3233 pnanovdb_vec3_mul(PNANOVDB_DEREF(direction), pnanovdb_vec3_uniform(PNANOVDB_DEREF(hdda).tmin)),
3234 PNANOVDB_DEREF(origin)
3236 pnanovdb_vec3_t dir_inv = pnanovdb_vec3_div(pnanovdb_vec3_uniform(1.f), PNANOVDB_DEREF(direction));
3238 PNANOVDB_DEREF(hdda).voxel = pnanovdb_hdda_pos_to_voxel(PNANOVDB_REF(pos), dim);
3240 if (PNANOVDB_DEREF(hdda).step.x != 0)
3242 PNANOVDB_DEREF(hdda).next.x = PNANOVDB_DEREF(hdda).tmin + (PNANOVDB_DEREF(hdda).voxel.x - pos.x) * dir_inv.x;
3243 if (PNANOVDB_DEREF(hdda).step.x > 0)
3245 PNANOVDB_DEREF(hdda).next.x += dim * dir_inv.x;
3248 if (PNANOVDB_DEREF(hdda).step.y != 0)
3250 PNANOVDB_DEREF(hdda).next.y = PNANOVDB_DEREF(hdda).tmin + (PNANOVDB_DEREF(hdda).voxel.y - pos.y) * dir_inv.y;
3251 if (PNANOVDB_DEREF(hdda).step.y > 0)
3253 PNANOVDB_DEREF(hdda).next.y += dim * dir_inv.y;
3256 if (PNANOVDB_DEREF(hdda).step.z != 0)
3258 PNANOVDB_DEREF(hdda).next.z = PNANOVDB_DEREF(hdda).tmin + (PNANOVDB_DEREF(hdda).voxel.z - pos.z) * dir_inv.z;
3259 if (PNANOVDB_DEREF(hdda).step.z > 0)
3261 PNANOVDB_DEREF(hdda).next.z += dim * dir_inv.z;
3265 return PNANOVDB_TRUE;
3268PNANOVDB_FORCE_INLINE pnanovdb_bool_t pnanovdb_hdda_step(PNANOVDB_INOUT(pnanovdb_hdda_t) hdda)
3270 pnanovdb_bool_t ret;
3271 if (PNANOVDB_DEREF(hdda).next.x < PNANOVDB_DEREF(hdda).next.y && PNANOVDB_DEREF(hdda).next.x < PNANOVDB_DEREF(hdda).next.z)
3273#ifdef PNANOVDB_ENFORCE_FORWARD_STEPPING
3274 if (PNANOVDB_DEREF(hdda).next.x <= PNANOVDB_DEREF(hdda).tmin)
3276 PNANOVDB_DEREF(hdda).next.x += PNANOVDB_DEREF(hdda).tmin - 0.999999f * PNANOVDB_DEREF(hdda).next.x + 1.0e-6f;
3279 PNANOVDB_DEREF(hdda).tmin = PNANOVDB_DEREF(hdda).next.x;
3280 PNANOVDB_DEREF(hdda).next.x += PNANOVDB_DEREF(hdda).dim * PNANOVDB_DEREF(hdda).delta.x;
3281 PNANOVDB_DEREF(hdda).voxel.x += PNANOVDB_DEREF(hdda).dim * PNANOVDB_DEREF(hdda).step.x;
3282 ret = PNANOVDB_DEREF(hdda).tmin <= PNANOVDB_DEREF(hdda).tmax;
3284 else if (PNANOVDB_DEREF(hdda).next.y < PNANOVDB_DEREF(hdda).next.z)
3286#ifdef PNANOVDB_ENFORCE_FORWARD_STEPPING
3287 if (PNANOVDB_DEREF(hdda).next.y <= PNANOVDB_DEREF(hdda).tmin)
3289 PNANOVDB_DEREF(hdda).next.y += PNANOVDB_DEREF(hdda).tmin - 0.999999f * PNANOVDB_DEREF(hdda).next.y + 1.0e-6f;
3292 PNANOVDB_DEREF(hdda).tmin = PNANOVDB_DEREF(hdda).next.y;
3293 PNANOVDB_DEREF(hdda).next.y += PNANOVDB_DEREF(hdda).dim * PNANOVDB_DEREF(hdda).delta.y;
3294 PNANOVDB_DEREF(hdda).voxel.y += PNANOVDB_DEREF(hdda).dim * PNANOVDB_DEREF(hdda).step.y;
3295 ret = PNANOVDB_DEREF(hdda).tmin <= PNANOVDB_DEREF(hdda).tmax;
3299#ifdef PNANOVDB_ENFORCE_FORWARD_STEPPING
3300 if (PNANOVDB_DEREF(hdda).next.z <= PNANOVDB_DEREF(hdda).tmin)
3302 PNANOVDB_DEREF(hdda).next.z += PNANOVDB_DEREF(hdda).tmin - 0.999999f * PNANOVDB_DEREF(hdda).next.z + 1.0e-6f;
3305 PNANOVDB_DEREF(hdda).tmin = PNANOVDB_DEREF(hdda).next.z;
3306 PNANOVDB_DEREF(hdda).next.z += PNANOVDB_DEREF(hdda).dim * PNANOVDB_DEREF(hdda).delta.z;
3307 PNANOVDB_DEREF(hdda).voxel.z += PNANOVDB_DEREF(hdda).dim * PNANOVDB_DEREF(hdda).step.z;
3308 ret = PNANOVDB_DEREF(hdda).tmin <= PNANOVDB_DEREF(hdda).tmax;
3313PNANOVDB_FORCE_INLINE pnanovdb_bool_t pnanovdb_hdda_ray_clip(
3314 PNANOVDB_IN(pnanovdb_vec3_t) bbox_min,
3315 PNANOVDB_IN(pnanovdb_vec3_t) bbox_max,
3316 PNANOVDB_IN(pnanovdb_vec3_t) origin, PNANOVDB_INOUT(
float) tmin,
3317 PNANOVDB_IN(pnanovdb_vec3_t) direction, PNANOVDB_INOUT(
float) tmax
3320 pnanovdb_vec3_t dir_inv = pnanovdb_vec3_div(pnanovdb_vec3_uniform(1.f), PNANOVDB_DEREF(direction));
3321 pnanovdb_vec3_t t0 = pnanovdb_vec3_mul(pnanovdb_vec3_sub(PNANOVDB_DEREF(bbox_min), PNANOVDB_DEREF(origin)), dir_inv);
3322 pnanovdb_vec3_t t1 = pnanovdb_vec3_mul(pnanovdb_vec3_sub(PNANOVDB_DEREF(bbox_max), PNANOVDB_DEREF(origin)), dir_inv);
3323 pnanovdb_vec3_t tmin3 = pnanovdb_vec3_min(t0, t1);
3324 pnanovdb_vec3_t tmax3 = pnanovdb_vec3_max(t0, t1);
3325 float tnear = pnanovdb_max(tmin3.x, pnanovdb_max(tmin3.y, tmin3.z));
3326 float tfar = pnanovdb_min(tmax3.x, pnanovdb_min(tmax3.y, tmax3.z));
3327 pnanovdb_bool_t hit = tnear <= tfar;
3328 PNANOVDB_DEREF(tmin) = pnanovdb_max(PNANOVDB_DEREF(tmin), tnear);
3329 PNANOVDB_DEREF(tmax) = pnanovdb_min(PNANOVDB_DEREF(tmax), tfar);
3333PNANOVDB_FORCE_INLINE pnanovdb_bool_t pnanovdb_hdda_zero_crossing(
3334 pnanovdb_grid_type_t grid_type,
3337 PNANOVDB_IN(pnanovdb_vec3_t) origin,
float tmin,
3338 PNANOVDB_IN(pnanovdb_vec3_t) direction,
float tmax,
3339 PNANOVDB_INOUT(
float) thit,
3340 PNANOVDB_INOUT(
float) v
3345 pnanovdb_vec3_t bbox_minf = pnanovdb_coord_to_vec3(bbox_min);
3346 pnanovdb_vec3_t bbox_maxf = pnanovdb_coord_to_vec3(pnanovdb_coord_add(bbox_max, pnanovdb_coord_uniform(1)));
3348 pnanovdb_bool_t hit = pnanovdb_hdda_ray_clip(PNANOVDB_REF(bbox_minf), PNANOVDB_REF(bbox_maxf), origin, PNANOVDB_REF(tmin), direction, PNANOVDB_REF(tmax));
3349 if (!hit || tmax > 1.0e20f)
3351 return PNANOVDB_FALSE;
3354 pnanovdb_vec3_t pos = pnanovdb_hdda_ray_start(origin, tmin, direction);
3355 pnanovdb_coord_t ijk = pnanovdb_hdda_pos_to_ijk(PNANOVDB_REF(pos));
3361 pnanovdb_hdda_t hdda;
3362 pnanovdb_hdda_init(PNANOVDB_REF(hdda), origin, tmin, direction, tmax, dim);
3363 while (pnanovdb_hdda_step(PNANOVDB_REF(hdda)))
3365 pnanovdb_vec3_t pos_start = pnanovdb_hdda_ray_start(origin, hdda.tmin + 1.0001f, direction);
3366 ijk = pnanovdb_hdda_pos_to_ijk(PNANOVDB_REF(pos_start));
3368 pnanovdb_hdda_update(PNANOVDB_REF(hdda), origin, direction, dim);
3378 if (PNANOVDB_DEREF(v) * v0 < 0.f)
3380 PNANOVDB_DEREF(thit) = hdda.tmin;
3381 return PNANOVDB_TRUE;
3385 return PNANOVDB_FALSE;
PNANOVDB_FORCE_INLINE pnanovdb_uint32_t pnanovdb_version_get_minor(pnanovdb_uint32_t version)
Definition PNanoVDB.h:1226
#define PNANOVDB_GRID_OFF_VERSION
Definition PNanoVDB.h:1112
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:2655
PNANOVDB_FORCE_INLINE pnanovdb_uint32_t pnanovdb_gridblindmetadata_get_semantic(pnanovdb_buf_t buf, pnanovdb_gridblindmetadata_handle_t p)
Definition PNanoVDB.h:1268
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:2348
#define PNANOVDB_UPPER_OFF_VALUE_MASK
Definition PNanoVDB.h:1477
PNANOVDB_FORCE_INLINE float pnanovdb_map_get_matf(pnanovdb_buf_t buf, pnanovdb_map_handle_t p, pnanovdb_uint32_t index)
Definition PNanoVDB.h:1035
#define PNANOVDB_TREE_OFF_NODE_COUNT_LOWER
Definition PNanoVDB.h:1306
#define PNANOVDB_GRIDBLINDMETADATA_OFF_VALUE_COUNT
Definition PNanoVDB.h:1252
PNANOVDB_FORCE_INLINE pnanovdb_int64_t pnanovdb_gridblindmetadata_get_data_offset(pnanovdb_buf_t buf, pnanovdb_gridblindmetadata_handle_t p)
Definition PNanoVDB.h:1259
PNANOVDB_STATIC_CONST float pnanovdb_dither_lut[512]
Definition PNanoVDB.h:3031
PNANOVDB_FORCE_INLINE pnanovdb_uint32_t pnanovdb_gridblindmetadata_get_value_size(pnanovdb_buf_t buf, pnanovdb_gridblindmetadata_handle_t p)
Definition PNanoVDB.h:1265
PNANOVDB_FORCE_INLINE pnanovdb_uint32_t pnanovdb_root_tile_get_state(pnanovdb_buf_t buf, pnanovdb_root_tile_handle_t p)
Definition PNanoVDB.h:1443
PNANOVDB_FORCE_INLINE pnanovdb_uint32_t pnanovdb_root_get_tile_count(pnanovdb_buf_t buf, pnanovdb_root_handle_t p)
Definition PNanoVDB.h:1405
PNANOVDB_STATIC_CONST pnanovdb_uint32_t pnanovdb_grid_type_minmax_strides_bits[27]
Definition PNanoVDB.h:1001
#define PNANOVDB_TREE_OFF_TILE_COUNT_LEAF
Definition PNanoVDB.h:1308
PNANOVDB_FORCE_INLINE pnanovdb_coord_t pnanovdb_read_coord(pnanovdb_buf_t buf, pnanovdb_address_t address)
Definition PNanoVDB.h:816
#define PNANOVDB_UPPER_OFF_FLAGS
Definition PNanoVDB.h:1476
#define PNANOVDB_GRID_TYPE_FLOAT
Definition PNanoVDB.h:940
PNANOVDB_FORCE_INLINE float pnanovdb_map_get_invmatf(pnanovdb_buf_t buf, pnanovdb_map_handle_t p, pnanovdb_uint32_t index)
Definition PNanoVDB.h:1038
PNANOVDB_FORCE_INLINE float pnanovdb_dither_lookup(pnanovdb_bool_t enabled, int offset)
Definition PNanoVDB.h:3099
PNANOVDB_FORCE_INLINE pnanovdb_uint64_t pnanovdb_uint64_dec(pnanovdb_uint64_t a)
Definition PNanoVDB.h:639
PNANOVDB_FORCE_INLINE pnanovdb_uint64_t pnanovdb_leaf_indexmask_get_ave_index(pnanovdb_buf_t buf, pnanovdb_address_t ave_address)
Definition PNanoVDB.h:1897
PNANOVDB_FORCE_INLINE pnanovdb_uint64_t pnanovdb_leaf_indexmask_get_dev_index(pnanovdb_buf_t buf, pnanovdb_address_t dev_address)
Definition PNanoVDB.h:1901
PNANOVDB_FORCE_INLINE pnanovdb_uint64_t pnanovdb_leaf_index_get_max_index(pnanovdb_buf_t buf, pnanovdb_address_t max_address)
Definition PNanoVDB.h:1861
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:2432
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:1210
PNANOVDB_FORCE_INLINE pnanovdb_uint32_t pnanovdb_gridblindmetadata_get_data_type(pnanovdb_buf_t buf, pnanovdb_gridblindmetadata_handle_t p)
Definition PNanoVDB.h:1274
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:2314
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:1544
#define PNANOVDB_GRID_OFF_BLIND_METADATA_OFFSET
Definition PNanoVDB.h:1123
#define PNANOVDB_MAP_OFF_MATF
Definition PNanoVDB.h:1026
PNANOVDB_FORCE_INLINE pnanovdb_uint64_t pnanovdb_upper_get_flags(pnanovdb_buf_t buf, pnanovdb_upper_handle_t p)
Definition PNanoVDB.h:1486
PNANOVDB_FORCE_INLINE pnanovdb_uint32_t pnanovdb_leaf_coord_to_offset(PNANOVDB_IN(pnanovdb_coord_t) ijk)
Definition PNanoVDB.h:1765
#define PNANOVDB_ROOT_OFF_BBOX_MIN
Definition PNanoVDB.h:1395
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:2164
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:2055
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:2320
PNANOVDB_FORCE_INLINE void pnanovdb_grid_set_flags(pnanovdb_buf_t buf, pnanovdb_grid_handle_t p, pnanovdb_uint32_t flags)
Definition PNanoVDB.h:1183
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:2809
PNANOVDB_FORCE_INLINE pnanovdb_uint64_t pnanovdb_uint64_bit_mask(pnanovdb_uint32_t bit_idx)
Definition PNanoVDB.h:649
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:1277
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:2827
#define PNANOVDB_ROOT_TILE_OFF_CHILD
Definition PNanoVDB.h:1434
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:1362
PNANOVDB_FORCE_INLINE pnanovdb_uint32_t pnanovdb_uint64_to_uint32_lsr(pnanovdb_uint64_t a, pnanovdb_uint32_t b)
Definition PNanoVDB.h:644
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:2568
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:1192
#define PNANOVDB_GRID_OFF_GRID_COUNT
Definition PNanoVDB.h:1115
PNANOVDB_FORCE_INLINE pnanovdb_uint32_t pnanovdb_grid_get_grid_class(pnanovdb_buf_t buf, pnanovdb_grid_handle_t p)
Definition PNanoVDB.h:1161
PNANOVDB_FORCE_INLINE pnanovdb_uint64_t pnanovdb_tree_get_node_offset_lower(pnanovdb_buf_t buf, pnanovdb_tree_handle_t p)
Definition PNanoVDB.h:1316
PNANOVDB_FORCE_INLINE void pnanovdb_grid_set_checksum(pnanovdb_buf_t buf, pnanovdb_grid_handle_t p, pnanovdb_uint64_t checksum)
Definition PNanoVDB.h:1177
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:2207
PNANOVDB_FORCE_INLINE pnanovdb_bool_t pnanovdb_uint64_any_bit(pnanovdb_uint64_t a)
Definition PNanoVDB.h:659
#define PNANOVDB_LEAF_OFF_VALUE_MASK
Definition PNanoVDB.h:1584
PNANOVDB_FORCE_INLINE pnanovdb_coord_t pnanovdb_lower_get_bbox_max(pnanovdb_buf_t buf, pnanovdb_lower_handle_t p)
Definition PNanoVDB.h:1538
PNANOVDB_FORCE_INLINE pnanovdb_uint32_t pnanovdb_tree_get_tile_count_lower(pnanovdb_buf_t buf, pnanovdb_tree_handle_t p)
Definition PNanoVDB.h:1337
PNANOVDB_FORCE_INLINE pnanovdb_vec3_t pnanovdb_read_vec3u8(pnanovdb_buf_t buf, pnanovdb_address_t address)
Definition PNanoVDB.h:852
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:1347
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:1601
PNANOVDB_FORCE_INLINE pnanovdb_uint64_t pnanovdb_leaf_pointindex_get_point_count(pnanovdb_buf_t buf, pnanovdb_leaf_handle_t leaf)
Definition PNanoVDB.h:2090
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:2588
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:862
PNANOVDB_FORCE_INLINE pnanovdb_coord_t pnanovdb_root_get_bbox_max(pnanovdb_buf_t buf, pnanovdb_root_handle_t p)
Definition PNanoVDB.h:1402
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:2326
PNANOVDB_FORCE_INLINE void pnanovdb_write_float(pnanovdb_buf_t buf, pnanovdb_address_t address, float value)
Definition PNanoVDB.h:908
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:2122
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:1596
#define PNANOVDB_GRIDBLINDMETADATA_OFF_VALUE_SIZE
Definition PNanoVDB.h:1253
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:1213
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:1415
#define PNANOVDB_MAP_OFF_VECD
Definition PNanoVDB.h:1032
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:2189
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:1377
#define PNANOVDB_ROOT_OFF_TABLE_SIZE
Definition PNanoVDB.h:1397
PNANOVDB_FORCE_INLINE pnanovdb_coord_t pnanovdb_leaf_get_bbox_min(pnanovdb_buf_t buf, pnanovdb_leaf_handle_t p)
Definition PNanoVDB.h:1590
#define PNANOVDB_LEAF_OFF_BBOX_DIF_AND_FLAGS
Definition PNanoVDB.h:1583
PNANOVDB_FORCE_INLINE pnanovdb_uint64_t pnanovdb_uint64_offset(pnanovdb_uint64_t a, pnanovdb_uint32_t b)
Definition PNanoVDB.h:634
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:1368
PNANOVDB_FORCE_INLINE pnanovdb_uint64_t pnanovdb_gridblindmetadata_get_value_count(pnanovdb_buf_t buf, pnanovdb_gridblindmetadata_handle_t p)
Definition PNanoVDB.h:1262
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:1675
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:2737
PNANOVDB_FORCE_INLINE pnanovdb_coord_t pnanovdb_upper_get_bbox_max(pnanovdb_buf_t buf, pnanovdb_upper_handle_t p)
Definition PNanoVDB.h:1483
#define PNANOVDB_LOWER_OFF_FLAGS
Definition PNanoVDB.h:1531
PNANOVDB_FORCE_INLINE pnanovdb_uint32_t pnanovdb_grid_get_version(pnanovdb_buf_t buf, pnanovdb_grid_handle_t p)
Definition PNanoVDB.h:1132
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:2686
PNANOVDB_FORCE_INLINE float pnanovdb_map_get_taperf(pnanovdb_buf_t buf, pnanovdb_map_handle_t p, pnanovdb_uint32_t index)
Definition PNanoVDB.h:1044
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:2696
PNANOVDB_FORCE_INLINE pnanovdb_uint64_t pnanovdb_leaf_onindexmask_get_max_index(pnanovdb_buf_t buf, pnanovdb_address_t max_address)
Definition PNanoVDB.h:2043
PNANOVDB_FORCE_INLINE void pnanovdb_grid_set_version(pnanovdb_buf_t buf, pnanovdb_grid_handle_t p, pnanovdb_uint32_t version)
Definition PNanoVDB.h:1180
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:1081
PNANOVDB_FORCE_INLINE pnanovdb_uint64_t pnanovdb_tree_get_node_offset_root(pnanovdb_buf_t buf, pnanovdb_tree_handle_t p)
Definition PNanoVDB.h:1322
PNANOVDB_FORCE_INLINE pnanovdb_uint64_t pnanovdb_tree_get_node_offset_leaf(pnanovdb_buf_t buf, pnanovdb_tree_handle_t p)
Definition PNanoVDB.h:1313
PNANOVDB_FORCE_INLINE pnanovdb_uint64_t pnanovdb_uint64_and(pnanovdb_uint64_t a, pnanovdb_uint64_t b)
Definition PNanoVDB.h:654
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:2146
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:2876
PNANOVDB_FORCE_INLINE pnanovdb_uint64_t pnanovdb_leaf_onindex_get_ave_index(pnanovdb_buf_t buf, pnanovdb_address_t ave_address)
Definition PNanoVDB.h:1978
PNANOVDB_FORCE_INLINE pnanovdb_uint64_t pnanovdb_leaf_onindex_get_last_offset(pnanovdb_buf_t buf, pnanovdb_leaf_handle_t leaf)
Definition PNanoVDB.h:1944
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:2240
#define PNANOVDB_GRID_TYPE_ONINDEX
Definition PNanoVDB.h:959
PNANOVDB_FORCE_INLINE pnanovdb_uint32_t pnanovdb_uint32_countbits(pnanovdb_uint32_t value)
Definition PNanoVDB.h:554
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:2936
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:2170
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:1905
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:2099
PNANOVDB_FORCE_INLINE void pnanovdb_write_double(pnanovdb_buf_t buf, pnanovdb_address_t address, double value)
Definition PNanoVDB.h:912
PNANOVDB_FORCE_INLINE pnanovdb_uint64_t pnanovdb_lower_get_flags(pnanovdb_buf_t buf, pnanovdb_lower_handle_t p)
Definition PNanoVDB.h:1541
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:2930
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:1489
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:1371
PNANOVDB_FORCE_INLINE pnanovdb_uint64_t pnanovdb_leaf_onindexmask_get_min_index(pnanovdb_buf_t buf, pnanovdb_address_t min_address)
Definition PNanoVDB.h:2039
PNANOVDB_STATIC_CONST pnanovdb_uint32_t pnanovdb_grid_type_minmax_aligns_bits[27]
Definition PNanoVDB.h:1003
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:1075
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:1722
PNANOVDB_FORCE_INLINE pnanovdb_uint32_t pnanovdb_uint64_countbits(pnanovdb_uint64_t value)
Definition PNanoVDB.h:574
#define PNANOVDB_GRID_OFF_GRID_INDEX
Definition PNanoVDB.h:1114
PNANOVDB_FORCE_INLINE pnanovdb_uint32_t pnanovdb_grid_get_blind_metadata_count(pnanovdb_buf_t buf, pnanovdb_grid_handle_t p)
Definition PNanoVDB.h:1170
PNANOVDB_FORCE_INLINE pnanovdb_uint32_t pnanovdb_lower_coord_to_offset(PNANOVDB_IN(pnanovdb_coord_t) ijk)
Definition PNanoVDB.h:2139
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:2131
#define PNANOVDB_UPPER_OFF_BBOX_MIN
Definition PNanoVDB.h:1474
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:2176
#define PNANOVDB_GRID_OFF_MAP
Definition PNanoVDB.h:1118
#define PNANOVDB_LOWER_OFF_BBOX_MIN
Definition PNanoVDB.h:1529
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:1450
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:1356
PNANOVDB_STATIC_CONST pnanovdb_uint32_t pnanovdb_grid_type_stat_strides_bits[27]
Definition PNanoVDB.h:1005
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:1836
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:1207
PNANOVDB_FORCE_INLINE pnanovdb_bool_t pnanovdb_readaccessor_iscached2(PNANOVDB_INOUT(pnanovdb_readaccessor_t) acc, int dirty)
Definition PNanoVDB.h:2547
#define PNANOVDB_GRIDBLINDMETADATA_OFF_SEMANTIC
Definition PNanoVDB.h:1254
#define PNANOVDB_GRID_OFF_WORLD_BBOX
Definition PNanoVDB.h:1119
#define PNANOVDB_TREE_OFF_NODE_OFFSET_UPPER
Definition PNanoVDB.h:1303
PNANOVDB_FORCE_INLINE pnanovdb_uint64_t pnanovdb_tree_get_voxel_count(pnanovdb_buf_t buf, pnanovdb_tree_handle_t p)
Definition PNanoVDB.h:1343
PNANOVDB_FORCE_INLINE pnanovdb_map_handle_t pnanovdb_grid_get_map(pnanovdb_buf_t buf, pnanovdb_grid_handle_t p)
Definition PNanoVDB.h:1150
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:2562
#define PNANOVDB_LOWER_OFF_VALUE_MASK
Definition PNanoVDB.h:1532
PNANOVDB_FORCE_INLINE double pnanovdb_map_get_matd(pnanovdb_buf_t buf, pnanovdb_map_handle_t p, pnanovdb_uint32_t index)
Definition PNanoVDB.h:1047
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:1715
PNANOVDB_FORCE_INLINE void pnanovdb_write_int32(pnanovdb_buf_t buf, pnanovdb_address_t address, pnanovdb_int32_t value)
Definition PNanoVDB.h:900
#define PNANOVDB_ROOT_OFF_BBOX_MAX
Definition PNanoVDB.h:1396
PNANOVDB_FORCE_INLINE void pnanovdb_write_uint64(pnanovdb_buf_t buf, pnanovdb_address_t address, pnanovdb_uint64_t value)
Definition PNanoVDB.h:896
#define PNANOVDB_UPPER_OFF_CHILD_MASK
Definition PNanoVDB.h:1478
PNANOVDB_FORCE_INLINE pnanovdb_uint64_t pnanovdb_leaf_onindex_get_max_index(pnanovdb_buf_t buf, pnanovdb_address_t max_address)
Definition PNanoVDB.h:1967
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:1374
#define PNANOVDB_MAP_OFF_VECF
Definition PNanoVDB.h:1028
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:1556
#define PNANOVDB_GRID_TYPE_VEC3U16
Definition PNanoVDB.h:964
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:1409
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:1217
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:2619
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:1186
#define PNANOVDB_TREE_OFF_VOXEL_COUNT
Definition PNanoVDB.h:1311
PNANOVDB_FORCE_INLINE void pnanovdb_write_vec3(pnanovdb_buf_t buf, pnanovdb_address_t address, PNANOVDB_IN(pnanovdb_vec3_t) value)
Definition PNanoVDB.h:922
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:1063
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:2288
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:2594
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:1066
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:1826
PNANOVDB_FORCE_INLINE pnanovdb_uint32_t pnanovdb_tree_get_tile_count_leaf(pnanovdb_buf_t buf, pnanovdb_tree_handle_t p)
Definition PNanoVDB.h:1334
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:2649
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:2265
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:2104
#define PNANOVDB_GRID_TYPE_POINTINDEX
Definition PNanoVDB.h:962
#define PNANOVDB_LEAF_TABLE_NEG_OFF_QUANTUM
Definition PNanoVDB.h:1588
PNANOVDB_STATIC_CONST pnanovdb_uint32_t pnanovdb_grid_type_table_strides_bits[27]
Definition PNanoVDB.h:999
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:2719
PNANOVDB_FORCE_INLINE pnanovdb_bool_t pnanovdb_readaccessor_iscached1(PNANOVDB_INOUT(pnanovdb_readaccessor_t) acc, int dirty)
Definition PNanoVDB.h:2537
PNANOVDB_FORCE_INLINE pnanovdb_uint32_t pnanovdb_read_uint16(pnanovdb_buf_t buf, pnanovdb_address_t address)
Definition PNanoVDB.h:833
PNANOVDB_FORCE_INLINE pnanovdb_uint64_t pnanovdb_leaf_onindexmask_get_dev_index(pnanovdb_buf_t buf, pnanovdb_address_t dev_address)
Definition PNanoVDB.h:2051
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:2246
#define PNANOVDB_MAP_OFF_TAPERF
Definition PNanoVDB.h:1029
#define PNANOVDB_TREE_OFF_NODE_OFFSET_LEAF
Definition PNanoVDB.h:1301
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:2446
PNANOVDB_FORCE_INLINE pnanovdb_uint64_t pnanovdb_grid_get_magic(pnanovdb_buf_t buf, pnanovdb_grid_handle_t p)
Definition PNanoVDB.h:1126
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:1831
PNANOVDB_FORCE_INLINE pnanovdb_int64_t pnanovdb_grid_get_blind_metadata_offset(pnanovdb_buf_t buf, pnanovdb_grid_handle_t p)
Definition PNanoVDB.h:1167
PNANOVDB_FORCE_INLINE pnanovdb_uint32_t pnanovdb_tree_get_node_count_leaf(pnanovdb_buf_t buf, pnanovdb_tree_handle_t p)
Definition PNanoVDB.h:1325
PNANOVDB_FORCE_INLINE pnanovdb_uint64_t pnanovdb_grid_get_checksum(pnanovdb_buf_t buf, pnanovdb_grid_handle_t p)
Definition PNanoVDB.h:1129
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:1350
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:1447
PNANOVDB_FORCE_INLINE pnanovdb_uint32_t pnanovdb_read_uint32(pnanovdb_buf_t buf, pnanovdb_address_t address)
Definition PNanoVDB.h:792
#define PNANOVDB_GRID_OFF_CHECKSUM
Definition PNanoVDB.h:1111
#define PNANOVDB_MAP_OFF_INVMATD
Definition PNanoVDB.h:1031
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:1359
#define PNANOVDB_TREE_OFF_NODE_OFFSET_ROOT
Definition PNanoVDB.h:1304
#define PNANOVDB_GRIDBLINDMETADATA_OFF_DATA_CLASS
Definition PNanoVDB.h:1255
PNANOVDB_FORCE_INLINE pnanovdb_uint32_t pnanovdb_grid_get_grid_index(pnanovdb_buf_t buf, pnanovdb_grid_handle_t p)
Definition PNanoVDB.h:1138
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:2282
#define PNANOVDB_LEAF_TABLE_NEG_OFF_MINIMUM
Definition PNanoVDB.h:1587
PNANOVDB_STATIC_CONST pnanovdb_uint32_t pnanovdb_grid_type_leaf_type[27]
Definition PNanoVDB.h:1007
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:1559
PNANOVDB_FORCE_INLINE pnanovdb_coord_t pnanovdb_lower_get_bbox_min(pnanovdb_buf_t buf, pnanovdb_lower_handle_t p)
Definition PNanoVDB.h:1535
PNANOVDB_FORCE_INLINE pnanovdb_uint32_t pnanovdb_version_get_major(pnanovdb_uint32_t version)
Definition PNanoVDB.h:1222
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:1684
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:1147
PNANOVDB_FORCE_INLINE pnanovdb_uint32_t pnanovdb_tree_get_node_count_upper(pnanovdb_buf_t buf, pnanovdb_tree_handle_t p)
Definition PNanoVDB.h:1331
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:2158
#define PNANOVDB_GRID_OFF_GRID_TYPE
Definition PNanoVDB.h:1122
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:2296
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:1504
#define PNANOVDB_MAP_OFF_INVMATF
Definition PNanoVDB.h:1027
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:2376
PNANOVDB_FORCE_INLINE pnanovdb_int32_t pnanovdb_read_int32(pnanovdb_buf_t buf, pnanovdb_address_t address)
Definition PNanoVDB.h:800
#define PNANOVDB_GRID_SIZE
Definition PNanoVDB.h:1108
PNANOVDB_FORCE_INLINE pnanovdb_uint64_t pnanovdb_leaf_onindex_get_min_index(pnanovdb_buf_t buf, pnanovdb_address_t min_address)
Definition PNanoVDB.h:1956
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:1069
#define PNANOVDB_GRIDBLINDMETADATA_OFF_DATA_OFFSET
Definition PNanoVDB.h:1251
#define PNANOVDB_ROOT_TILE_OFF_KEY
Definition PNanoVDB.h:1433
#define PNANOVDB_TREE_OFF_NODE_OFFSET_LOWER
Definition PNanoVDB.h:1302
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:2600
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:2785
PNANOVDB_STATIC_CONST pnanovdb_grid_type_constants_t pnanovdb_grid_type_constants[27]
Definition PNanoVDB.h:1642
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:1553
PNANOVDB_FORCE_INLINE pnanovdb_uint64_t pnanovdb_tree_get_node_offset_upper(pnanovdb_buf_t buf, pnanovdb_tree_handle_t p)
Definition PNanoVDB.h:1319
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:1909
PNANOVDB_FORCE_INLINE void pnanovdb_grid_set_magic(pnanovdb_buf_t buf, pnanovdb_grid_handle_t p, pnanovdb_uint64_t magic)
Definition PNanoVDB.h:1174
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:2850
#define PNANOVDB_UPPER_OFF_BBOX_MAX
Definition PNanoVDB.h:1475
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:1078
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:2152
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:1072
#define PNANOVDB_MAP_OFF_MATD
Definition PNanoVDB.h:1030
#define PNANOVDB_LOWER_OFF_BBOX_MAX
Definition PNanoVDB.h:1530
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:2701
PNANOVDB_FORCE_INLINE void pnanovdb_write_uint32(pnanovdb_buf_t buf, pnanovdb_address_t address, pnanovdb_uint32_t value)
Definition PNanoVDB.h:892
PNANOVDB_FORCE_INLINE pnanovdb_uint32_t pnanovdb_tree_get_node_count_lower(pnanovdb_buf_t buf, pnanovdb_tree_handle_t p)
Definition PNanoVDB.h:1328
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:2759
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:1501
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:2900
PNANOVDB_FORCE_INLINE pnanovdb_root_handle_t pnanovdb_tree_get_root(pnanovdb_buf_t buf, pnanovdb_tree_handle_t tree)
Definition PNanoVDB.h:1699
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:1204
#define PNANOVDB_GRID_OFF_GRID_CLASS
Definition PNanoVDB.h:1121
PNANOVDB_FORCE_INLINE double pnanovdb_read_double(pnanovdb_buf_t buf, pnanovdb_address_t address)
Definition PNanoVDB.h:812
#define PNANOVDB_GRID_TYPE_END
Definition PNanoVDB.h:966
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:2680
PNANOVDB_FORCE_INLINE pnanovdb_coord_t pnanovdb_root_get_bbox_min(pnanovdb_buf_t buf, pnanovdb_root_handle_t p)
Definition PNanoVDB.h:1399
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:2390
PNANOVDB_FORCE_INLINE pnanovdb_uint32_t pnanovdb_grid_get_grid_count(pnanovdb_buf_t buf, pnanovdb_grid_handle_t p)
Definition PNanoVDB.h:1141
PNANOVDB_FORCE_INLINE pnanovdb_uint64_t pnanovdb_leaf_indexmask_get_max_index(pnanovdb_buf_t buf, pnanovdb_address_t max_address)
Definition PNanoVDB.h:1893
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:1195
PNANOVDB_STATIC_CONST pnanovdb_uint32_t pnanovdb_grid_type_value_strides_bits[27]
Definition PNanoVDB.h:997
PNANOVDB_FORCE_INLINE pnanovdb_int64_t pnanovdb_read_int64(pnanovdb_buf_t buf, pnanovdb_address_t address)
Definition PNanoVDB.h:808
PNANOVDB_FORCE_INLINE double pnanovdb_map_get_vecd(pnanovdb_buf_t buf, pnanovdb_map_handle_t p, pnanovdb_uint32_t index)
Definition PNanoVDB.h:1053
PNANOVDB_FORCE_INLINE double pnanovdb_map_get_invmatd(pnanovdb_buf_t buf, pnanovdb_map_handle_t p, pnanovdb_uint32_t index)
Definition PNanoVDB.h:1050
PNANOVDB_FORCE_INLINE pnanovdb_uint64_t pnanovdb_root_tile_get_key(pnanovdb_buf_t buf, pnanovdb_root_tile_handle_t p)
Definition PNanoVDB.h:1437
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:2912
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:2404
PNANOVDB_FORCE_INLINE pnanovdb_vec3_t pnanovdb_read_vec3(pnanovdb_buf_t buf, pnanovdb_address_t address)
Definition PNanoVDB.h:824
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:2000
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:2791
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:2108
PNANOVDB_FORCE_INLINE int pnanovdb_readaccessor_computedirty(PNANOVDB_INOUT(pnanovdb_readaccessor_t) acc, PNANOVDB_IN(pnanovdb_coord_t) ijk)
Definition PNanoVDB.h:2557
#define PNANOVDB_GRIDBLINDMETADATA_OFF_NAME
Definition PNanoVDB.h:1257
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:2059
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:1365
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:1548
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:1412
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:1802
#define PNANOVDB_GRID_OFF_GRID_NAME
Definition PNanoVDB.h:1117
PNANOVDB_FORCE_INLINE pnanovdb_bool_t pnanovdb_leaf_indexmask_has_stats(pnanovdb_buf_t buf, pnanovdb_leaf_handle_t leaf)
Definition PNanoVDB.h:1885
PNANOVDB_FORCE_INLINE pnanovdb_uint64_t pnanovdb_leaf_index_get_min_index(pnanovdb_buf_t buf, pnanovdb_address_t min_address)
Definition PNanoVDB.h:1856
#define PNANOVDB_TREE_OFF_NODE_COUNT_LEAF
Definition PNanoVDB.h:1305
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:2258
PNANOVDB_FORCE_INLINE double pnanovdb_map_get_taperd(pnanovdb_buf_t buf, pnanovdb_map_handle_t p, pnanovdb_uint32_t index)
Definition PNanoVDB.h:1056
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:2252
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:1778
PNANOVDB_FORCE_INLINE pnanovdb_uint64_t pnanovdb_leaf_onindex_get_dev_index(pnanovdb_buf_t buf, pnanovdb_address_t dev_address)
Definition PNanoVDB.h:1989
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:1498
#define PNANOVDB_GRID_OFF_VOXEL_SIZE
Definition PNanoVDB.h:1120
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:2924
PNANOVDB_FORCE_INLINE void pnanovdb_write_coord(pnanovdb_buf_t buf, pnanovdb_address_t address, PNANOVDB_IN(pnanovdb_coord_t) value)
Definition PNanoVDB.h:916
PNANOVDB_FORCE_INLINE pnanovdb_uint64_t pnanovdb_read_uint64(pnanovdb_buf_t buf, pnanovdb_address_t address)
Definition PNanoVDB.h:796
PNANOVDB_FORCE_INLINE pnanovdb_uint32_t pnanovdb_gridblindmetadata_get_data_class(pnanovdb_buf_t buf, pnanovdb_gridblindmetadata_handle_t p)
Definition PNanoVDB.h:1271
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:2942
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:2888
PNANOVDB_FORCE_INLINE pnanovdb_uint32_t pnanovdb_tree_get_tile_count_upper(pnanovdb_buf_t buf, pnanovdb_tree_handle_t p)
Definition PNanoVDB.h:1340
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:1493
PNANOVDB_FORCE_INLINE pnanovdb_bool_t pnanovdb_leaf_onindex_has_stats(pnanovdb_buf_t buf, pnanovdb_leaf_handle_t leaf)
Definition PNanoVDB.h:1951
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:2234
#define PNANOVDB_GRID_OFF_MAGIC
Definition PNanoVDB.h:1110
#define PNANOVDB_GRIDBLINDMETADATA_OFF_DATA_TYPE
Definition PNanoVDB.h:1256
PNANOVDB_FORCE_INLINE pnanovdb_uint64_t pnanovdb_grid_get_grid_size(pnanovdb_buf_t buf, pnanovdb_grid_handle_t p)
Definition PNanoVDB.h:1144
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:1796
#define PNANOVDB_LEAF_OFF_BBOX_MIN
Definition PNanoVDB.h:1582
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:1201
PNANOVDB_FORCE_INLINE pnanovdb_uint32_t pnanovdb_leaf_onindexmask_get_value_count(pnanovdb_buf_t buf, pnanovdb_leaf_handle_t leaf)
Definition PNanoVDB.h:2027
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:2222
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:2354
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:2182
PNANOVDB_FORCE_INLINE pnanovdb_uint64_t pnanovdb_leaf_pointindex_get_offset(pnanovdb_buf_t buf, pnanovdb_leaf_handle_t leaf)
Definition PNanoVDB.h:2086
PNANOVDB_FORCE_INLINE pnanovdb_uint32_t pnanovdb_read_uint8(pnanovdb_buf_t buf, pnanovdb_address_t address)
Definition PNanoVDB.h:838
PNANOVDB_FORCE_INLINE pnanovdb_coord_t pnanovdb_upper_get_bbox_min(pnanovdb_buf_t buf, pnanovdb_upper_handle_t p)
Definition PNanoVDB.h:1480
PNANOVDB_FORCE_INLINE pnanovdb_vec3_t pnanovdb_read_vec3u16(pnanovdb_buf_t buf, pnanovdb_address_t address)
Definition PNanoVDB.h:843
PNANOVDB_FORCE_INLINE float pnanovdb_read_float(pnanovdb_buf_t buf, pnanovdb_address_t address)
Definition PNanoVDB.h:804
PNANOVDB_FORCE_INLINE pnanovdb_uint64_t pnanovdb_coord_to_key(PNANOVDB_IN(pnanovdb_coord_t) ijk)
Definition PNanoVDB.h:1729
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:1060
PNANOVDB_FORCE_INLINE pnanovdb_bool_t pnanovdb_readaccessor_iscached0(PNANOVDB_INOUT(pnanovdb_readaccessor_t) acc, int dirty)
Definition PNanoVDB.h:2527
#define PNANOVDB_GRID_OFF_BLIND_METADATA_COUNT
Definition PNanoVDB.h:1124
#define PNANOVDB_LEAF_TABLE_NEG_OFF_BBOX_DIF_AND_FLAGS
Definition PNanoVDB.h:1586
PNANOVDB_FORCE_INLINE pnanovdb_bool_t pnanovdb_leaf_onindexmask_has_stats(pnanovdb_buf_t buf, pnanovdb_leaf_handle_t leaf)
Definition PNanoVDB.h:2035
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:1593
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:2475
#define PNANOVDB_TREE_OFF_TILE_COUNT_UPPER
Definition PNanoVDB.h:1310
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:1790
#define PNANOVDB_TREE_OFF_TILE_COUNT_LOWER
Definition PNanoVDB.h:1309
PNANOVDB_FORCE_INLINE pnanovdb_uint64_t pnanovdb_leaf_onindexmask_get_last_offset(pnanovdb_buf_t buf, pnanovdb_leaf_handle_t leaf)
Definition PNanoVDB.h:2031
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:2302
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:1189
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:1155
PNANOVDB_FORCE_INLINE pnanovdb_int64_t pnanovdb_root_tile_get_child(pnanovdb_buf_t buf, pnanovdb_root_tile_handle_t p)
Definition PNanoVDB.h:1440
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:2094
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:1772
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:2308
PNANOVDB_FORCE_INLINE void pnanovdb_write_int64(pnanovdb_buf_t buf, pnanovdb_address_t address, pnanovdb_int64_t value)
Definition PNanoVDB.h:904
#define PNANOVDB_MAP_OFF_TAPERD
Definition PNanoVDB.h:1033
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:2228
#define PNANOVDB_GRID_OFF_GRID_SIZE
Definition PNanoVDB.h:1116
PNANOVDB_FORCE_INLINE pnanovdb_uint64_t pnanovdb_leaf_indexmask_get_min_index(pnanovdb_buf_t buf, pnanovdb_address_t min_address)
Definition PNanoVDB.h:1889
PNANOVDB_FORCE_INLINE pnanovdb_uint32_t pnanovdb_grid_get_flags(pnanovdb_buf_t buf, pnanovdb_grid_handle_t p)
Definition PNanoVDB.h:1135
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:1876
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:1604
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:2418
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:1158
#define PNANOVDB_TREE_OFF_NODE_COUNT_UPPER
Definition PNanoVDB.h:1307
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:2625
#define PNANOVDB_GRID_TYPE_VEC3U8
Definition PNanoVDB.h:963
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:1198
#define PNANOVDB_ROOT_TILE_OFF_STATE
Definition PNanoVDB.h:1435
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:1353
PNANOVDB_FORCE_INLINE pnanovdb_uint32_t pnanovdb_leaf_onindex_get_value_count(pnanovdb_buf_t buf, pnanovdb_leaf_handle_t leaf)
Definition PNanoVDB.h:1936
#define PNANOVDB_GRIDBLINDMETADATA_SIZE
Definition PNanoVDB.h:1249
PNANOVDB_FORCE_INLINE pnanovdb_bool_t pnanovdb_leaf_index_has_stats(pnanovdb_buf_t buf, pnanovdb_leaf_handle_t leaf)
Definition PNanoVDB.h:1851
PNANOVDB_FORCE_INLINE pnanovdb_tree_handle_t pnanovdb_grid_get_tree(pnanovdb_buf_t buf, pnanovdb_grid_handle_t grid)
Definition PNanoVDB.h:1692
PNANOVDB_FORCE_INLINE float pnanovdb_map_get_vecf(pnanovdb_buf_t buf, pnanovdb_map_handle_t p, pnanovdb_uint32_t index)
Definition PNanoVDB.h:1041
PNANOVDB_FORCE_INLINE pnanovdb_uint32_t pnanovdb_upper_coord_to_offset(PNANOVDB_IN(pnanovdb_coord_t) ijk)
Definition PNanoVDB.h:2215
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:1707
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:1453
PNANOVDB_FORCE_INLINE pnanovdb_uint64_t pnanovdb_leaf_index_get_ave_index(pnanovdb_buf_t buf, pnanovdb_address_t ave_address)
Definition PNanoVDB.h:1866
PNANOVDB_FORCE_INLINE void pnanovdb_leaf_onindexmask_set_mask_bit(pnanovdb_buf_t buf, pnanovdb_leaf_handle_t leaf, pnanovdb_uint32_t n, pnanovdb_bool_t v)
Definition PNanoVDB.h:2067
PNANOVDB_FORCE_INLINE pnanovdb_uint32_t pnanovdb_grid_get_grid_type(pnanovdb_buf_t buf, pnanovdb_grid_handle_t p)
Definition PNanoVDB.h:1164
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:1917
PNANOVDB_FORCE_INLINE pnanovdb_uint64_t pnanovdb_leaf_index_get_dev_index(pnanovdb_buf_t buf, pnanovdb_address_t dev_address)
Definition PNanoVDB.h:1871
PNANOVDB_FORCE_INLINE void pnanovdb_readaccessor_init(PNANOVDB_INOUT(pnanovdb_readaccessor_t) acc, pnanovdb_root_handle_t root)
Definition PNanoVDB.h:2516
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:1810
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:1784
PNANOVDB_FORCE_INLINE pnanovdb_uint64_t pnanovdb_leaf_onindexmask_get_ave_index(pnanovdb_buf_t buf, pnanovdb_address_t ave_address)
Definition PNanoVDB.h:2047
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:1841
PNANOVDB_FORCE_INLINE pnanovdb_uint32_t pnanovdb_version_get_patch(pnanovdb_uint32_t version)
Definition PNanoVDB.h:1230
#define PNANOVDB_LOWER_OFF_CHILD_MASK
Definition PNanoVDB.h:1533
#define PNANOVDB_GRID_OFF_FLAGS
Definition PNanoVDB.h:1113
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:1746
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:2362
Definition PNanoVDB.h:1105
pnanovdb_address_t address
Definition PNanoVDB.h:1105
Definition PNanoVDB.h:1086
pnanovdb_uint64_t magic
Definition PNanoVDB.h:1087
pnanovdb_uint32_t grid_class
Definition PNanoVDB.h:1098
double voxel_size[3]
Definition PNanoVDB.h:1097
pnanovdb_uint32_t grid_index
Definition PNanoVDB.h:1091
pnanovdb_uint64_t grid_size
Definition PNanoVDB.h:1093
pnanovdb_uint32_t grid_type
Definition PNanoVDB.h:1099
pnanovdb_uint32_t version
Definition PNanoVDB.h:1089
pnanovdb_uint32_t pad[5]
Definition PNanoVDB.h:1102
pnanovdb_int64_t blind_metadata_offset
Definition PNanoVDB.h:1100
double world_bbox[6]
Definition PNanoVDB.h:1096
pnanovdb_uint32_t flags
Definition PNanoVDB.h:1090
pnanovdb_uint32_t blind_metadata_count
Definition PNanoVDB.h:1101
pnanovdb_uint64_t checksum
Definition PNanoVDB.h:1088
pnanovdb_map_t map
Definition PNanoVDB.h:1095
pnanovdb_uint32_t grid_count
Definition PNanoVDB.h:1092
pnanovdb_uint32_t grid_name[256/4]
Definition PNanoVDB.h:1094
Definition PNanoVDB.h:1609
pnanovdb_uint32_t leaf_off_stddev
Definition PNanoVDB.h:1635
pnanovdb_uint32_t leaf_off_ave
Definition PNanoVDB.h:1634
pnanovdb_uint32_t upper_off_min
Definition PNanoVDB.h:1620
pnanovdb_uint32_t leaf_size
Definition PNanoVDB.h:1637
pnanovdb_uint32_t root_size
Definition PNanoVDB.h:1615
pnanovdb_uint32_t leaf_off_table
Definition PNanoVDB.h:1636
pnanovdb_uint32_t upper_off_max
Definition PNanoVDB.h:1621
pnanovdb_uint32_t upper_off_ave
Definition PNanoVDB.h:1622
pnanovdb_uint32_t table_stride
Definition PNanoVDB.h:1617
pnanovdb_uint32_t upper_off_table
Definition PNanoVDB.h:1624
pnanovdb_uint32_t root_tile_size
Definition PNanoVDB.h:1619
pnanovdb_uint32_t leaf_off_min
Definition PNanoVDB.h:1632
pnanovdb_uint32_t lower_size
Definition PNanoVDB.h:1631
pnanovdb_uint32_t lower_off_min
Definition PNanoVDB.h:1626
pnanovdb_uint32_t upper_size
Definition PNanoVDB.h:1625
pnanovdb_uint32_t value_stride_bits
Definition PNanoVDB.h:1616
pnanovdb_uint32_t root_off_min
Definition PNanoVDB.h:1611
pnanovdb_uint32_t root_tile_off_value
Definition PNanoVDB.h:1618
pnanovdb_uint32_t root_off_ave
Definition PNanoVDB.h:1613
pnanovdb_uint32_t lower_off_stddev
Definition PNanoVDB.h:1629
pnanovdb_uint32_t root_off_stddev
Definition PNanoVDB.h:1614
pnanovdb_uint32_t root_off_background
Definition PNanoVDB.h:1610
pnanovdb_uint32_t root_off_max
Definition PNanoVDB.h:1612
pnanovdb_uint32_t lower_off_table
Definition PNanoVDB.h:1630
pnanovdb_uint32_t lower_off_max
Definition PNanoVDB.h:1627
pnanovdb_uint32_t leaf_off_max
Definition PNanoVDB.h:1633
pnanovdb_uint32_t upper_off_stddev
Definition PNanoVDB.h:1623
pnanovdb_uint32_t lower_off_ave
Definition PNanoVDB.h:1628
Definition PNanoVDB.h:1576
pnanovdb_address_t address
Definition PNanoVDB.h:1576
Definition PNanoVDB.h:1568
pnanovdb_uint32_t value_mask[16]
Definition PNanoVDB.h:1571
pnanovdb_uint32_t bbox_dif_and_flags
Definition PNanoVDB.h:1570
pnanovdb_coord_t bbox_min
Definition PNanoVDB.h:1569
Definition PNanoVDB.h:1523
pnanovdb_address_t address
Definition PNanoVDB.h:1523
Definition PNanoVDB.h:1513
pnanovdb_uint32_t child_mask[128]
Definition PNanoVDB.h:1518
pnanovdb_uint64_t flags
Definition PNanoVDB.h:1516
pnanovdb_uint32_t value_mask[128]
Definition PNanoVDB.h:1517
pnanovdb_coord_t bbox_max
Definition PNanoVDB.h:1515
pnanovdb_coord_t bbox_min
Definition PNanoVDB.h:1514
Definition PNanoVDB.h:1021
pnanovdb_address_t address
Definition PNanoVDB.h:1021
Definition PNanoVDB.h:1010
double matd[9]
Definition PNanoVDB.h:1015
double vecd[3]
Definition PNanoVDB.h:1017
float taperf
Definition PNanoVDB.h:1014
double invmatd[9]
Definition PNanoVDB.h:1016
float matf[9]
Definition PNanoVDB.h:1011
double taperd
Definition PNanoVDB.h:1018
float invmatf[9]
Definition PNanoVDB.h:1012
float vecf[3]
Definition PNanoVDB.h:1013
Definition PNanoVDB.h:2507
pnanovdb_upper_handle_t upper
Definition PNanoVDB.h:2511
pnanovdb_root_handle_t root
Definition PNanoVDB.h:2512
pnanovdb_coord_t key
Definition PNanoVDB.h:2508
pnanovdb_lower_handle_t lower
Definition PNanoVDB.h:2510
pnanovdb_leaf_handle_t leaf
Definition PNanoVDB.h:2509
Definition PNanoVDB.h:1390
pnanovdb_address_t address
Definition PNanoVDB.h:1390
Definition PNanoVDB.h:1382
pnanovdb_uint32_t table_size
Definition PNanoVDB.h:1385
pnanovdb_coord_t bbox_max
Definition PNanoVDB.h:1384
pnanovdb_uint32_t pad1
Definition PNanoVDB.h:1386
pnanovdb_coord_t bbox_min
Definition PNanoVDB.h:1383
Definition PNanoVDB.h:1428
pnanovdb_address_t address
Definition PNanoVDB.h:1428
Definition PNanoVDB.h:1420
pnanovdb_uint64_t key
Definition PNanoVDB.h:1421
pnanovdb_uint32_t state
Definition PNanoVDB.h:1423
pnanovdb_int64_t child
Definition PNanoVDB.h:1422
pnanovdb_uint32_t pad1
Definition PNanoVDB.h:1424
Definition PNanoVDB.h:1296
pnanovdb_address_t address
Definition PNanoVDB.h:1296
Definition PNanoVDB.h:1282
pnanovdb_uint32_t node_count_leaf
Definition PNanoVDB.h:1287
pnanovdb_uint32_t tile_count_lower
Definition PNanoVDB.h:1291
pnanovdb_uint64_t node_offset_upper
Definition PNanoVDB.h:1285
pnanovdb_uint32_t tile_count_leaf
Definition PNanoVDB.h:1290
pnanovdb_uint64_t node_offset_root
Definition PNanoVDB.h:1286
pnanovdb_uint64_t node_offset_leaf
Definition PNanoVDB.h:1283
pnanovdb_uint64_t voxel_count
Definition PNanoVDB.h:1293
pnanovdb_uint32_t tile_count_upper
Definition PNanoVDB.h:1292
pnanovdb_uint64_t node_offset_lower
Definition PNanoVDB.h:1284
pnanovdb_uint32_t node_count_upper
Definition PNanoVDB.h:1289
pnanovdb_uint32_t node_count_lower
Definition PNanoVDB.h:1288
Definition PNanoVDB.h:1468
pnanovdb_address_t address
Definition PNanoVDB.h:1468
Definition PNanoVDB.h:1458
pnanovdb_uint64_t flags
Definition PNanoVDB.h:1461
pnanovdb_uint32_t value_mask[1024]
Definition PNanoVDB.h:1462
pnanovdb_coord_t bbox_max
Definition PNanoVDB.h:1460
pnanovdb_uint32_t child_mask[1024]
Definition PNanoVDB.h:1463
pnanovdb_coord_t bbox_min
Definition PNanoVDB.h:1459