12#ifndef NANOVDB_PUTILS_IO_H_HAS_BEEN_INCLUDED
13#define NANOVDB_PUTILS_IO_H_HAS_BEEN_INCLUDED
20#if defined(__CUDACC__)
21#define PNANOVDB_IO_INLINE static __host__ __device__
23#define PNANOVDB_IO_INLINE static inline
25#define PNANOVDB_IO_INLINE static inline
29#define PNANOVDB_DATA_ALIGNMENT 32
32 size_t aligned_size = size + alignment +
sizeof(
void*);
33 void* alloc_ptr = malloc(aligned_size);
37 ptr = (
void*)(alignment * (((
size_t)alloc_ptr +
sizeof(
void*) + alignment - 1u) / alignment));
38 void** header_ptr = (
void**)((
size_t)ptr -
sizeof(
void*));
39 *header_ptr = alloc_ptr;
47 void** header_ptr = (
void**)((
size_t)ptr -
sizeof(
void*));
56 void(*
read)(
void*
file, uint64_t offset,
void* dst_data, uint64_t size);
57 void(*
write)(
void*
file, uint64_t offset,
void* src_data, uint64_t size);
63 fseek((FILE*)file, offset, SEEK_SET);
64 fread(dst_data, size, 1u, (FILE*)file);
68 fseek((FILE*)file, offset, SEEK_SET);
69 fwrite(src_data, size, 1u, (FILE*)file);
82 uint8_t* dst8 = (uint8_t*)dst_data;
83 uint8_t* src8 = (uint8_t*)ptr->
data;
84 uint64_t size_in_bounds = size;
85 if (offset >= ptr->
size)
89 else if (offset + size > ptr->
size)
91 size_in_bounds = ptr->
size - offset;
93 memcpy(dst8, src8 + offset, size_in_bounds);
94 memset(dst8 + size_in_bounds, 0, size - size_in_bounds);
102 uint64_t new_capacity = 1024u;
103 while (new_capacity < offset + size)
105 new_capacity = (new_capacity << 1u) - (new_capacity >> 1u);
108 memcpy(new_data, ptr->
data, ptr->
size);
113 ptr->
data = new_data;
117 if (offset + size > ptr->
size)
119 uint8_t* data8 = (uint8_t*)ptr->
data;
120 memset(data8 + ptr->
size, 0, offset + size - ptr->
size);
121 ptr->
size = offset + size;
124 uint8_t* src8 = (uint8_t*)src_data;
125 uint8_t* dst8 = (uint8_t*)ptr->
data;
126 memcpy(dst8 + offset, src8, size);
129#if defined(PNANOVDB_IO_BUF_CUSTOM)
130#define PNANOVDB_BUF_CUSTOM
132#define pnanovdb_buf_t pnanovdb_io_buf_t*
133PNANOVDB_IO_INLINE uint32_t pnanovdb_buf_read_uint32(pnanovdb_buf_t buf, uint64_t byte_offset)
136 buf->read(buf->file, byte_offset, &ret, 4u);
139PNANOVDB_IO_INLINE uint64_t pnanovdb_buf_read_uint64(pnanovdb_buf_t buf, uint64_t byte_offset)
142 buf->read(buf->file, byte_offset, &ret, 8u);
145PNANOVDB_IO_INLINE void pnanovdb_buf_write_uint32(pnanovdb_buf_t buf, uint64_t byte_offset, uint32_t value)
147 buf->write(buf->file, byte_offset, &value, 4u);
149PNANOVDB_IO_INLINE void pnanovdb_buf_write_uint64(pnanovdb_buf_t buf, uint64_t byte_offset, uint64_t value)
151 buf->write(buf->file, byte_offset, &value, 8u);
153#define pnanovdb_grid_type_t uint32_t
154#define PNANOVDB_GRID_TYPE_GET(grid_typeIn, nameIn) pnanovdb_grid_type_constants[grid_typeIn].nameIn
170#define PNANOVDB_IO_FILEHEADER_SIZE 16
196#define PNANOVDB_IO_FILEMETADATA_SIZE 176
198#if defined(PNANOVDB_IO_BUF_CUSTOM)
204 pnanovdb_uint64_t dst_metadata_count)
208 pnanovdb_bool_t is_raw_grid = PNANOVDB_FALSE;
212 is_raw_grid = PNANOVDB_TRUE;
220 pnanovdb_uint64_t offset = 0u;
225 *dst_header = local_header;
229 for (uint32_t idx = 0u; idx < grid_count; idx++)
233 if (idx < dst_metadata_count)
235 dst_metadatas[idx] = local_metadata;
246 pnanovdb_buf_t dst_buf, pnanovdb_address_t dst_addr,
247 pnanovdb_buf_t src_buf, pnanovdb_address_t src_addr,
248 pnanovdb_uint64_t num_bytes)
250 pnanovdb_uint64_t num_words = (num_bytes >> 2u);
251 for (pnanovdb_uint64_t word_idx = 0u; word_idx < num_words; word_idx++)
253 pnanovdb_uint32_t val =
pnanovdb_read_uint32(src_buf, pnanovdb_address_offset_product(src_addr, word_idx, 4u));
260 pnanovdb_uint32_t size = PNANOVDB_GRID_TYPE_GET(grid_type, leaf_size);
264 pnanovdb_uint32_t value_log_bits = flags >> 5;
265 pnanovdb_uint32_t value_bits = 1u << value_log_bits;
266 pnanovdb_uint32_t table_bytes = value_bits << (9u - 3u);
273 pnanovdb_buf_t src_buf,
275 pnanovdb_buf_t dst_buf,
277 pnanovdb_coord_t ijk_min,
278 pnanovdb_coord_t ijk_max)
288 pnanovdb_buf_t buf = src_buf;
304 pnanovdb_io_memcpy(dst_buf, dst_root.
address, buf, root.
address, PNANOVDB_GRID_TYPE_GET(grid_type, root_size));
312 for (pnanovdb_uint32_t tile_idx = 0u; tile_idx < tile_count; tile_idx++)
316 pnanovdb_io_memcpy(dst_buf, dst_root_tile.
address, buf, root_tile.
address, PNANOVDB_GRID_TYPE_GET(grid_type, root_tile_size));
320 for (pnanovdb_uint32_t tile_idx = 0u; tile_idx < tile_count; tile_idx++)
328 pnanovdb_io_memcpy(dst_buf, dst_upper.
address, buf, upper.
address, PNANOVDB_GRID_TYPE_GET(grid_type, upper_size));
333 for (pnanovdb_uint32_t tile_idx = 0u; tile_idx < tile_count; tile_idx++)
347 pnanovdb_io_memcpy(dst_buf, dst_lower.
address, buf, lower.
address, PNANOVDB_GRID_TYPE_GET(grid_type, lower_size));
354 pnanovdb_uint32_t dst_node_count_leaf = 0u;
357 for (pnanovdb_uint32_t tile_idx = 0u; tile_idx < tile_count; tile_idx++)
379 pnanovdb_coord_t leaf_ijk_max = {
380 pnanovdb_uint32_as_int32(dif_and_flags & 255u) + leaf_ijk_min.x,
381 pnanovdb_uint32_as_int32((dif_and_flags >> 8u) & 255u) + leaf_ijk_min.y,
382 pnanovdb_uint32_as_int32((dif_and_flags >> 16u) & 255u) + leaf_ijk_min.z
386 leaf_ijk_min.x &= ~7;
387 leaf_ijk_min.y &= ~7;
388 leaf_ijk_min.z &= ~7;
393 pnanovdb_bool_t pred = !(
394 leaf_ijk_max.x < ijk_min.x || leaf_ijk_min.x > ijk_max.x ||
395 leaf_ijk_max.y < ijk_min.y || leaf_ijk_min.y > ijk_max.y ||
396 leaf_ijk_max.z < ijk_min.z || leaf_ijk_min.z > ijk_max.z );
399 pnanovdb_uint32_t leaf_size = pnanovdb_io_get_leaf_size(grid_type, buf, leaf);
400 pnanovdb_io_memcpy(dst_buf, dst_current_leaf.
address, buf, leaf.
address, leaf_size);
408 pnanovdb_coord_t voxel_ijk = {
409 (leaf_ijk_min.x & ~7) + (pnanovdb_uint32_as_int32(leaf_n >> 6u) & 7),
410 (leaf_ijk_min.y & ~7) + (pnanovdb_uint32_as_int32(leaf_n >> 3u) & 7),
411 (leaf_ijk_min.z & ~7) + (pnanovdb_uint32_as_int32(leaf_n >> 0u) & 7)
414 pnanovdb_bool_t voxel_pred = !(
415 voxel_ijk.x < ijk_min.x || voxel_ijk.x > ijk_max.x ||
416 voxel_ijk.y < ijk_min.y || voxel_ijk.y > ijk_max.y ||
417 voxel_ijk.z < ijk_min.z || voxel_ijk.z > ijk_max.z );
421 pnanovdb_address_t val_addr =
425 pnanovdb_io_memcpy(dst_buf, val_addr, buf, background_addr, (PNANOVDB_GRID_TYPE_GET(grid_type, value_stride_bits) >> 3u));
430 dst_current_leaf.
address = pnanovdb_address_offset(dst_current_leaf.
address, leaf_size);
431 dst_node_count_leaf++;
455 pnanovdb_uint64_t dst_blind_metadata_offset =
456 dst_current_leaf.
address.byte_offset -
461 for (pnanovdb_uint32_t metadata_idx = 0u; metadata_idx < blindmetadata_count; metadata_idx++)
471 for (pnanovdb_uint32_t metadata_idx = 0u; metadata_idx < blindmetadata_count; metadata_idx++)
477 pnanovdb_address_t address = pnanovdb_address_offset64(metadata.
address, pnanovdb_int64_as_uint64(byte_offset));
480 pnanovdb_address_t dst_address = pnanovdb_address_offset64(dst_metadata.
address, pnanovdb_int64_as_uint64(dst_byte_offset));
485 pnanovdb_io_memcpy(dst_buf, dst_address, buf, address, value_count * value_size);
488 for (pnanovdb_uint32_t metadata_idx = 0u; metadata_idx < blindmetadata_count; metadata_idx++)
494 pnanovdb_address_t address = pnanovdb_address_offset64(metadata.
address, pnanovdb_int64_as_uint64(byte_offset));
497 pnanovdb_address_t dst_address = pnanovdb_address_offset64(dst_metadata.
address, pnanovdb_int64_as_uint64(dst_byte_offset));
502 pnanovdb_uint64_t dst_value_index = 0llu;
503 pnanovdb_uint64_t value_index = 0llu;
511 pnanovdb_uint64_t last_root_tile_index = value_index;
512 pnanovdb_uint64_t last_upper_tile_index = value_index;
513 pnanovdb_uint64_t last_lower_tile_index = value_index;
514 pnanovdb_uint64_t last_root_tile_dst_index = dst_value_index;
515 pnanovdb_uint64_t last_upper_tile_dst_index = dst_value_index;
516 pnanovdb_uint64_t last_lower_tile_dst_index = dst_value_index;
519 dst_buf, pnanovdb_address_offset64_product(dst_address, dst_value_index, value_size),
520 buf, pnanovdb_address_offset64_product(address, value_index, value_size), value_size);
525 for (pnanovdb_uint32_t tile_idx = 0u; tile_idx < dst_tile_count; tile_idx++)
556 dst_buf, pnanovdb_address_offset64_product(dst_address, dst_value_index, value_size),
557 buf, pnanovdb_address_offset64_product(address, value_index, value_size), value_size * leaf_value_count);
558 dst_value_index+=leaf_value_count;
573 if (last_lower_tile_index != value_index)
575 last_lower_tile_index = value_index;
579 last_lower_tile_dst_index = dst_value_index;
582 dst_buf, pnanovdb_address_offset64_product(dst_address, dst_value_index, value_size),
583 buf, pnanovdb_address_offset64_product(address, value_index, value_size), value_size);
598 if (last_upper_tile_index != value_index)
600 last_upper_tile_index = value_index;
604 last_upper_tile_dst_index = dst_value_index;
607 dst_buf, pnanovdb_address_offset64_product(dst_address, dst_value_index, value_size),
608 buf, pnanovdb_address_offset64_product(address, value_index, value_size), value_size);
623 if (last_root_tile_index != value_index)
625 last_root_tile_index = value_index;
629 last_root_tile_dst_index = dst_value_index;
632 dst_buf, pnanovdb_address_offset64_product(dst_address, dst_value_index, value_size),
633 buf, pnanovdb_address_offset64_product(address, value_index, value_size), value_size);
646 pnanovdb_int64_t metadata_size_diff = pnanovdb_uint64_as_int64(dst_value_index - value_count) * value_size;
648 for (pnanovdb_uint32_t local_metadata_idx = metadata_idx + 1u; local_metadata_idx < blindmetadata_count; local_metadata_idx++)
653 local_dst_byte_offset += metadata_size_diff;
659 pnanovdb_uint64_t grid_size =
660 dst_current_leaf.
address.byte_offset -
662 for (pnanovdb_uint32_t metadata_idx = 0u; metadata_idx < blindmetadata_count; metadata_idx++)
667 pnanovdb_address_t dst_address = pnanovdb_address_offset64(dst_metadata.
address, pnanovdb_int64_as_uint64(dst_byte_offset));
672 pnanovdb_uint64_t cmp_grid_size =
673 dst_address.byte_offset + value_count * value_size -
675 if (grid_size < cmp_grid_size)
677 grid_size = cmp_grid_size;
688 pnanovdb_buf_t buf = src_nanovdb;
691 printf(
"pnanovdb_io_print_slice grid(%lld)\n", (
long long int)grid.
address.byte_offset);
693 printf(
"pnanovdb_io_print_slice magic(%llx)\n",
698 printf(
"pnanovdb_io_print_slice tree(%lld)\n", (
long long int)tree.
address.byte_offset);
710 printf(
"pnanovdb_io_print_slice range([(%d, %d, %d),(%d, %d, %d)])\n",
711 bbox_min.x, bbox_min.y, bbox_min.z,
712 bbox_max.x, bbox_max.y, bbox_max.z);
714 pnanovdb_int32_t image_width = bbox_max.x - bbox_min.x;
715 pnanovdb_int32_t image_height = bbox_max.y - bbox_min.y;
716 pnanovdb_int32_t k = (bbox_max.z + bbox_min.z) / 2;
718 char headerField0 =
'B';
719 char headerField1 =
'M';
720 uint32_t size = 54 + image_width * image_height * 4u;
721 uint16_t reserved1 = 0;
722 uint16_t reserved2 = 0;
723 uint32_t offset = 54;
724 uint32_t headerSize = 40;
725 uint32_t width = image_width;
726 uint32_t height = image_height;
727 uint16_t colorPlanes = 1;
728 uint16_t bitsPerPixel = 32;
729 uint32_t compressionMethod = 0;
730 uint32_t imageSize = image_width * image_height * 4u;
731 uint32_t hRes = 2000;
732 uint32_t vRes = 2000;
733 uint32_t numColors = 0;
734 uint32_t numImportantColors = 0;
736 fwrite(&headerField0, 1, 1, dst_bmp);
737 fwrite(&headerField1, 1, 1, dst_bmp);
738 fwrite(&size, 4, 1, dst_bmp);
739 fwrite(&reserved1, 2, 1, dst_bmp);
740 fwrite(&reserved2, 2, 1, dst_bmp);
741 fwrite(&offset, 4, 1, dst_bmp);
742 fwrite(&headerSize, 4, 1, dst_bmp);
743 fwrite(&width, 4, 1, dst_bmp);
744 fwrite(&height, 4, 1, dst_bmp);
745 fwrite(&colorPlanes, 2, 1, dst_bmp);
746 fwrite(&bitsPerPixel, 2, 1, dst_bmp);
747 fwrite(&compressionMethod, 4, 1, dst_bmp);
748 fwrite(&imageSize, 4, 1, dst_bmp);
749 fwrite(&hRes, 4, 1, dst_bmp);
750 fwrite(&vRes, 4, 1, dst_bmp);
751 fwrite(&numColors, 4, 1, dst_bmp);
752 fwrite(&numImportantColors, 4, 1, dst_bmp);
754 for (pnanovdb_int32_t j = image_height - 1; j >= 0; j--)
756 for (pnanovdb_int32_t i = 0; i < image_width; i++)
758 pnanovdb_coord_t ijk = {
766 float density_value = 1.f;
769 pnanovdb_uint32_t raw_value = pnanovdb_uint32_t(255.f * pnanovdb_max(0.f, pnanovdb_min(1.f, color_value))) |
770 (pnanovdb_uint32_t(255.f * pnanovdb_max(0.f, pnanovdb_min(1.f, color_value))) << 8u) |
771 (pnanovdb_uint32_t(255.f * pnanovdb_max(0.f, pnanovdb_min(1.f, color_value))) << 16u) |
772 (pnanovdb_uint32_t(255.f * pnanovdb_max(0.f, pnanovdb_min(1.f, density_value))) << 24u);
774 fwrite(&raw_value, 4u, 1u, dst_bmp);
This file is a portable (e.g. pointer-less) C99/GLSL/HLSL port of NanoVDB.h, which is compatible with...
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:2547
PNANOVDB_FORCE_INLINE void pnanovdb_leaf_set_value_mask(pnanovdb_buf_t buf, pnanovdb_leaf_handle_t p, pnanovdb_uint32_t bit_index, pnanovdb_bool_t value)
Definition PNanoVDB.h:1855
PNANOVDB_FORCE_INLINE pnanovdb_int64_t pnanovdb_gridblindmetadata_get_data_offset(pnanovdb_buf_t buf, pnanovdb_gridblindmetadata_handle_t p)
Definition PNanoVDB.h:1471
PNANOVDB_FORCE_INLINE pnanovdb_uint32_t pnanovdb_gridblindmetadata_get_value_size(pnanovdb_buf_t buf, pnanovdb_gridblindmetadata_handle_t p)
Definition PNanoVDB.h:1477
PNANOVDB_FORCE_INLINE pnanovdb_uint32_t pnanovdb_root_get_tile_count(pnanovdb_buf_t buf, pnanovdb_root_handle_t p)
Definition PNanoVDB.h:1639
PNANOVDB_FORCE_INLINE void pnanovdb_lower_set_value_mask(pnanovdb_buf_t buf, pnanovdb_lower_handle_t p, pnanovdb_uint32_t bit_index, pnanovdb_bool_t value)
Definition PNanoVDB.h:1800
#define PNANOVDB_TREE_SIZE
Definition PNanoVDB.h:1533
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:1381
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:2519
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:1363
PNANOVDB_FORCE_INLINE pnanovdb_coord_t pnanovdb_root_get_bbox_max(pnanovdb_buf_t buf, pnanovdb_root_handle_t p)
Definition PNanoVDB.h:1636
PNANOVDB_FORCE_INLINE pnanovdb_coord_t pnanovdb_leaf_get_bbox_min(pnanovdb_buf_t buf, pnanovdb_leaf_handle_t p)
Definition PNanoVDB.h:1838
PNANOVDB_FORCE_INLINE void pnanovdb_lower_set_child(pnanovdb_grid_type_t grid_type, pnanovdb_buf_t buf, pnanovdb_lower_handle_t lower, pnanovdb_uint32_t n, pnanovdb_leaf_handle_t leaf)
Definition PNanoVDB.h:2396
PNANOVDB_FORCE_INLINE pnanovdb_uint64_t pnanovdb_gridblindmetadata_get_value_count(pnanovdb_buf_t buf, pnanovdb_gridblindmetadata_handle_t p)
Definition PNanoVDB.h:1474
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:1931
PNANOVDB_FORCE_INLINE pnanovdb_uint32_t pnanovdb_grid_get_version(pnanovdb_buf_t buf, pnanovdb_grid_handle_t p)
Definition PNanoVDB.h:1294
PNANOVDB_FORCE_INLINE pnanovdb_uint64_t pnanovdb_tree_get_node_offset_leaf(pnanovdb_buf_t buf, pnanovdb_tree_handle_t p)
Definition PNanoVDB.h:1547
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:2347
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:1983
PNANOVDB_FORCE_INLINE pnanovdb_uint32_t pnanovdb_grid_get_blind_metadata_count(pnanovdb_buf_t buf, pnanovdb_grid_handle_t p)
Definition PNanoVDB.h:1332
#define PNANOVDB_GRID_TYPE_FPN
Definition PNanoVDB.h:1109
PNANOVDB_FORCE_INLINE void pnanovdb_write_uint64(pnanovdb_buf_t buf, pnanovdb_address_t address, pnanovdb_uint64_t value)
Definition PNanoVDB.h:1050
PNANOVDB_FORCE_INLINE void pnanovdb_root_set_bbox_min(pnanovdb_buf_t buf, pnanovdb_root_handle_t p, PNANOVDB_IN(pnanovdb_coord_t) bbox_min)
Definition PNanoVDB.h:1643
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:2390
PNANOVDB_FORCE_INLINE pnanovdb_bool_t pnanovdb_root_tile_get_child_mask(pnanovdb_buf_t buf, pnanovdb_root_tile_handle_t tile)
Definition PNanoVDB.h:1978
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:2434
PNANOVDB_FORCE_INLINE pnanovdb_uint64_t pnanovdb_grid_get_magic(pnanovdb_buf_t buf, pnanovdb_grid_handle_t p)
Definition PNanoVDB.h:1288
PNANOVDB_FORCE_INLINE pnanovdb_uint32_t pnanovdb_tree_get_node_count_leaf(pnanovdb_buf_t buf, pnanovdb_tree_handle_t p)
Definition PNanoVDB.h:1559
PNANOVDB_FORCE_INLINE pnanovdb_uint32_t pnanovdb_read_uint32(pnanovdb_buf_t buf, pnanovdb_address_t address)
Definition PNanoVDB.h:946
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:1593
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:1807
PNANOVDB_FORCE_INLINE pnanovdb_uint32_t pnanovdb_tree_get_node_count_upper(pnanovdb_buf_t buf, pnanovdb_tree_handle_t p)
Definition PNanoVDB.h:1565
#define PNANOVDB_GRID_SIZE
Definition PNanoVDB.h:1267
PNANOVDB_FORCE_INLINE void pnanovdb_write_uint32(pnanovdb_buf_t buf, pnanovdb_address_t address, pnanovdb_uint32_t value)
Definition PNanoVDB.h:1046
PNANOVDB_FORCE_INLINE pnanovdb_uint32_t pnanovdb_tree_get_node_count_lower(pnanovdb_buf_t buf, pnanovdb_tree_handle_t p)
Definition PNanoVDB.h:1562
PNANOVDB_FORCE_INLINE pnanovdb_root_handle_t pnanovdb_tree_get_root(pnanovdb_buf_t buf, pnanovdb_tree_handle_t tree)
Definition PNanoVDB.h:1955
PNANOVDB_FORCE_INLINE pnanovdb_coord_t pnanovdb_root_get_bbox_min(pnanovdb_buf_t buf, pnanovdb_root_handle_t p)
Definition PNanoVDB.h:1633
PNANOVDB_FORCE_INLINE pnanovdb_address_t pnanovdb_root_get_background_address(pnanovdb_grid_type_t grid_type, pnanovdb_buf_t buf, pnanovdb_root_handle_t root)
Definition PNanoVDB.h:2489
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:1789
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:1646
#define PNANOVDB_LOWER_TABLE_COUNT
Definition PNanoVDB.h:1767
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:2446
PNANOVDB_FORCE_INLINE pnanovdb_uint64_t pnanovdb_read_uint64(pnanovdb_buf_t buf, pnanovdb_address_t address)
Definition PNanoVDB.h:950
#define PNANOVDB_LEAF_TABLE_COUNT
Definition PNanoVDB.h:1827
PNANOVDB_FORCE_INLINE void pnanovdb_gridblindmetadata_set_value_count(pnanovdb_buf_t buf, pnanovdb_gridblindmetadata_handle_t p, pnanovdb_uint64_t value_count)
Definition PNanoVDB.h:1496
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:1727
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:2083
#define PNANOVDB_UPPER_TABLE_COUNT
Definition PNanoVDB.h:1705
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:2359
#define PNANOVDB_MAGIC_GRID
Definition PNanoVDB.h:1086
PNANOVDB_FORCE_INLINE float pnanovdb_read_float(pnanovdb_buf_t buf, pnanovdb_address_t address)
Definition PNanoVDB.h:958
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:1841
PNANOVDB_FORCE_INLINE void pnanovdb_gridblindmetadata_set_data_offset(pnanovdb_buf_t buf, pnanovdb_gridblindmetadata_handle_t p, pnanovdb_int64_t data_offset)
Definition PNanoVDB.h:1493
PNANOVDB_FORCE_INLINE pnanovdb_uint32_t pnanovdb_leaf_onindex_get_value_count(pnanovdb_buf_t buf, pnanovdb_leaf_handle_t leaf)
Definition PNanoVDB.h:2172
#define PNANOVDB_GRIDBLINDMETADATA_SIZE
Definition PNanoVDB.h:1461
PNANOVDB_FORCE_INLINE pnanovdb_tree_handle_t pnanovdb_grid_get_tree(pnanovdb_buf_t buf, pnanovdb_grid_handle_t grid)
Definition PNanoVDB.h:1948
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:1963
PNANOVDB_FORCE_INLINE pnanovdb_uint32_t pnanovdb_grid_get_grid_type(pnanovdb_buf_t buf, pnanovdb_grid_handle_t p)
Definition PNanoVDB.h:1326
#define PNANOVDB_IO_FILEHEADER_SIZE
Definition IO.h:170
static void * pnanovdb_aligned_malloc(size_t alignment, size_t size)
Definition IO.h:30
static void pnanovdb_io_buf_fwrite(void *file, uint64_t offset, void *src_data, uint64_t size)
Definition IO.h:66
static void pnanovdb_aligned_free(void *ptr)
Definition IO.h:43
#define PNANOVDB_IO_FILEMETADATA_SIZE
Definition IO.h:196
static void pnanovdb_io_buf_fread(void *file, uint64_t offset, void *dst_data, uint64_t size)
Definition IO.h:61
static void pnanovdb_io_dynamic_buf_read(void *file, uint64_t offset, void *dst_data, uint64_t size)
Definition IO.h:79
#define PNANOVDB_IO_INLINE
Definition IO.h:25
static void pnanovdb_io_dynamic_buf_write(void *file, uint64_t offset, void *src_data, uint64_t size)
Definition IO.h:96
#define PNANOVDB_DATA_ALIGNMENT
Definition IO.h:29
Definition PNanoVDB.h:1264
pnanovdb_address_t address
Definition PNanoVDB.h:1264
Definition PNanoVDB.h:1243
pnanovdb_uint64_t magic
Definition PNanoVDB.h:1244
pnanovdb_uint64_t data2
Definition PNanoVDB.h:1261
void(* write)(void *file, uint64_t offset, void *src_data, uint64_t size)
Definition IO.h:57
void * file
Definition IO.h:55
void(* read)(void *file, uint64_t offset, void *dst_data, uint64_t size)
Definition IO.h:56
uint64_t capacity
Definition IO.h:77
void * data
Definition IO.h:75
uint64_t size
Definition IO.h:76
Definition PNanoVDB.h:1824
pnanovdb_address_t address
Definition PNanoVDB.h:1824
Definition PNanoVDB.h:1764
pnanovdb_address_t address
Definition PNanoVDB.h:1764
Definition PNanoVDB.h:1624
pnanovdb_address_t address
Definition PNanoVDB.h:1624
Definition PNanoVDB.h:1662
pnanovdb_address_t address
Definition PNanoVDB.h:1662
Definition PNanoVDB.h:1530
pnanovdb_address_t address
Definition PNanoVDB.h:1530
Definition PNanoVDB.h:1702
pnanovdb_address_t address
Definition PNanoVDB.h:1702