ernie-renderer 0.2.0.dev19__tar.gz → 0.2.0.dev21__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of ernie-renderer might be problematic. Click here for more details.
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/CMakeLists.txt +1 -1
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/PKG-INFO +1 -1
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/benchmarks/CMakeLists.txt +1 -1
- ernie_renderer-0.2.0.dev19/benchmarks/scene_storage.cpp → ernie_renderer-0.2.0.dev21/benchmarks/scene/storage.cpp +2 -2
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/ernie/CMakeLists.txt +2 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/ernie/device/vulkan_devices.cpp +2 -5
- ernie_renderer-0.2.0.dev21/ernie/geometry/CMakeLists.txt +3 -0
- ernie_renderer-0.2.0.dev21/ernie/geometry/bounds.h +69 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/ernie/io/CMakeLists.txt +1 -1
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/ernie/io/nanovdb.cpp +4 -14
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/ernie/io/nanovdb.h +5 -5
- ernie_renderer-0.2.0.dev21/ernie/scene/CMakeLists.txt +14 -0
- ernie_renderer-0.2.0.dev21/ernie/scene/convert.h +191 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/ernie/scene/path.h +7 -0
- ernie_renderer-0.2.0.dev21/ernie/scene/scene.cpp +324 -0
- ernie_renderer-0.2.0.dev21/ernie/scene/scene.h +106 -0
- ernie_renderer-0.2.0.dev21/ernie/scene/schema.cpp +124 -0
- ernie_renderer-0.2.0.dev21/ernie/scene/schema.h +182 -0
- ernie_renderer-0.2.0.dev21/ernie/scene/schemas/geom.cpp +99 -0
- ernie_renderer-0.2.0.dev21/ernie/scene/schemas/geom.h +174 -0
- ernie_renderer-0.2.0.dev21/ernie/scene/schemas/registry.cpp +18 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/ernie/scene/storage.cpp +50 -14
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/ernie/scene/storage.h +78 -41
- ernie_renderer-0.2.0.dev21/ernie/scene/tokens.h +35 -0
- ernie_renderer-0.2.0.dev21/ernie/scene/value.h +53 -0
- ernie_renderer-0.2.0.dev21/ernie/scene/view.cpp +38 -0
- ernie_renderer-0.2.0.dev21/ernie/scene/view.h +211 -0
- ernie_renderer-0.2.0.dev21/ernie/scene/xform.cpp +227 -0
- ernie_renderer-0.2.0.dev21/ernie/scene/xform.h +49 -0
- ernie_renderer-0.2.0.dev21/ernie/util/algorithm.h +26 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/ernie/util/text.h +7 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/tests/CMakeLists.txt +8 -1
- ernie_renderer-0.2.0.dev21/tests/geometry/bounds_test.cpp +39 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/tests/io/nanovdb_test.cpp +3 -5
- ernie_renderer-0.2.0.dev21/tests/scene/scene_test.cpp +150 -0
- ernie_renderer-0.2.0.dev21/tests/scene/schema_test.cpp +116 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/tests/scene/storage_test.cpp +34 -5
- ernie_renderer-0.2.0.dev21/tests/scene/xform_test.cpp +570 -0
- ernie_renderer-0.2.0.dev21/tests/util/algorithm_test.cpp +22 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/tests/util/text_test.cpp +6 -0
- ernie_renderer-0.2.0.dev19/ernie/scene/CMakeLists.txt +0 -3
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/.clang-format +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/.clang-tidy +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/.dockerignore +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/.gersemirc +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/.gitattributes +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/.github/scripts/coverage_badge.py +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/.github/scripts/install-lavapipe-windows.sh +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/.github/workflows/ci.yml +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/.gitignore +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/.pre-commit-config.yaml +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/CMakePresets.json +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/Dockerfile +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/LICENSE +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/README.md +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/benchmarks/bench.h +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/benchmarks/main.cpp +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/cmake/ErnieConfig.cmake.in +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/cmake/ErnieFetch.cmake +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/cmake/ErnieInstall.cmake +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/cmake/ErniePackaging.cmake +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/cmake/ErnieTesting.cmake +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/cmake/ernie.pc.in +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/cmake/third_party/bc7enc.cmake +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/cmake/third_party/dlpack.cmake +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/cmake/third_party/glm.cmake +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/cmake/third_party/googletest.cmake +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/cmake/third_party/json.cmake +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/cmake/third_party/nanobind.cmake +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/cmake/third_party/openexr.cmake +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/cmake/third_party/stb.cmake +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/cmake/third_party/tracy.cmake +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/cmake/third_party/volk.cmake +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/cmake/third_party/vulkan_headers.cmake +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/docs/README.md +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/docs/index.md +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/docs/requirements.txt +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/ernie/app/CMakeLists.txt +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/ernie/app/main.cpp +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/ernie/device/CMakeLists.txt +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/ernie/device/vulkan_devices.h +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/ernie/graph/CMakeLists.txt +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/ernie/io/ies.cpp +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/ernie/io/ies.h +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/ernie/io/image.cpp +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/ernie/io/image.h +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/ernie/io/raster.cpp +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/ernie/io/raster.h +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/ernie/io/texture.cpp +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/ernie/io/texture.h +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/ernie/physics/CMakeLists.txt +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/ernie/physics/astronomy.cpp +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/ernie/physics/astronomy.h +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/ernie/physics/atmosphere.cpp +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/ernie/physics/atmosphere.h +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/ernie/physics/cloud.cpp +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/ernie/physics/cloud.h +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/ernie/physics/constants.h +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/ernie/physics/reflectance_library.cpp +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/ernie/physics/reflectance_library.h +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/ernie/physics/reflectance_table.h +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/ernie/physics/regolith.cpp +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/ernie/physics/regolith.h +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/ernie/physics/scattering.cpp +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/ernie/physics/scattering.h +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/ernie/physics/solar.cpp +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/ernie/physics/solar.h +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/ernie/physics/solar_table.h +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/ernie/physics/spectrum.cpp +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/ernie/physics/spectrum.h +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/ernie/python/CMakeLists.txt +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/ernie/python/ernie/__init__.py +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/ernie/python/module.cpp +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/ernie/render/CMakeLists.txt +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/ernie/scene/path.cpp +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/ernie/util/CMakeLists.txt +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/ernie/util/bytes.h +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/ernie/util/disk_cache.cpp +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/ernie/util/disk_cache.h +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/ernie/util/file.cpp +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/ernie/util/file.h +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/ernie/util/glm.h +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/ernie/util/hash_index.h +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/ernie/util/linear_algebra.h +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/ernie/util/log.cpp +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/ernie/util/log.h +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/ernie/util/math.h +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/ernie/util/noise.cpp +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/ernie/util/noise.h +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/ernie/util/numbers.h +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/ernie/util/parallel.h +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/ernie/util/profiler.cpp +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/ernie/util/profiler.h +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/ernie/util/random.h +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/ernie/util/tensor.cpp +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/ernie/util/tensor.h +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/ernie/util/version.cpp +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/ernie/util/version.h +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/ernie/util/worker_pool.h +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/mkdocs.yml +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/pyproject.toml +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/tests/common.h +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/tests/consumer/CMakeLists.txt +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/tests/consumer/main.cpp +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/tests/device/vulkan_devices_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/tests/fixtures/exr/README.md +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/tests/fixtures/exr/make_exr.py +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/tests/fixtures/exr/rgb_float_zip.exr +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/tests/fixtures/exr/rgba_half_window.exr +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/tests/fixtures/exr/y_half_zips.exr +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/tests/fixtures/ies/README.md +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/tests/fixtures/ies/downlight_quadrant.ies +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/tests/fixtures/ies/floodlight_type_b.ies +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/tests/fixtures/ies/lamp.tilt +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/tests/fixtures/images/grey16.png +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/tests/fixtures/ktx2/README.md +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/tests/fixtures/ktx2/quadrants_etc1s.ktx2 +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/tests/fixtures/ktx2/quadrants_uastc_zstd.ktx2 +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/tests/fixtures/ktx2/tilted_normal_etc1s.ktx2 +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/tests/fixtures/ktx2/tilted_normal_uastc.ktx2 +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/tests/fixtures/tiff/README.md +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/tests/fixtures/tiff/float_deflate_predictor3.tif +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/tests/fixtures/tiff/float_raw.tif +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/tests/fixtures/tiff/int16_bigtiff_bigendian.tif +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/tests/fixtures/tiff/rgb_lzw_predictor2.tif +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/tests/fixtures/tiff/rgb_planar_lzw.tif +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/tests/fixtures/tiff/rgb_planar_raw.tif +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/tests/fixtures/tiff/rgb_tiled_deflate.tif +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/tests/fixtures/volumes/cube.nvdb +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/tests/fixtures/volumes/make_nvdb.py +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/tests/io/ies_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/tests/io/image_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/tests/io/raster_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/tests/io/texture_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/tests/physics/astronomy_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/tests/physics/atmosphere_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/tests/physics/cloud_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/tests/physics/reflectance_library_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/tests/physics/regolith_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/tests/physics/scattering_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/tests/physics/solar_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/tests/physics/spectrum_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/tests/python/test_package.py +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/tests/scene/path_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/tests/util/bytes_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/tests/util/disk_cache_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/tests/util/file_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/tests/util/hash_index_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/tests/util/linear_algebra_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/tests/util/log_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/tests/util/math_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/tests/util/noise_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/tests/util/parallel_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/tests/util/profiler_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/tests/util/random_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/tests/util/tensor_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/tests/util/version_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/tests/util/worker_pool_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/third_party/CMakeLists.txt +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/third_party/basisu/LICENSE +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/third_party/basisu/LICENSES/Apache-2.0.txt +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/third_party/basisu/LICENSES/BSD-3-clause.txt +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/third_party/basisu/LICENSES/MIT.txt +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/third_party/basisu/NOTICE +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/third_party/basisu/README.md +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/third_party/basisu/transcoder/basisu.h +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/third_party/basisu/transcoder/basisu_astc_cfgs.inl +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/third_party/basisu/transcoder/basisu_astc_hdr_core.h +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/third_party/basisu/transcoder/basisu_astc_helpers.h +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/third_party/basisu/transcoder/basisu_containers.h +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/third_party/basisu/transcoder/basisu_containers_impl.h +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/third_party/basisu/transcoder/basisu_dds_transcoder.inl +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/third_party/basisu/transcoder/basisu_etc1_mods.inl +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/third_party/basisu/transcoder/basisu_file_headers.h +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/third_party/basisu/transcoder/basisu_idct.h +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/third_party/basisu/transcoder/basisu_transcoder.cpp +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/third_party/basisu/transcoder/basisu_transcoder.h +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/third_party/basisu/transcoder/basisu_transcoder_internal.h +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/third_party/basisu/transcoder/basisu_transcoder_tables_astc.inc +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/third_party/basisu/transcoder/basisu_transcoder_tables_astc_0_255.inc +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/third_party/basisu/transcoder/basisu_transcoder_tables_atc_55.inc +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/third_party/basisu/transcoder/basisu_transcoder_tables_atc_56.inc +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/third_party/basisu/transcoder/basisu_transcoder_tables_bc7_m5_alpha.inc +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/third_party/basisu/transcoder/basisu_transcoder_tables_bc7_m5_color.inc +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/third_party/basisu/transcoder/basisu_transcoder_tables_dxt1_5.inc +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/third_party/basisu/transcoder/basisu_transcoder_tables_dxt1_6.inc +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/third_party/basisu/transcoder/basisu_transcoder_tables_pvrtc2_45.inc +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/third_party/basisu/transcoder/basisu_transcoder_tables_pvrtc2_alpha_33.inc +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/third_party/basisu/transcoder/basisu_transcoder_uastc.h +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/third_party/basisu/transcoder/basisu_xbc7_decoder.h +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/third_party/basisu/transcoder/basisu_xbc7_decoder.inl +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/third_party/basisu/zstd/LICENSE +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/third_party/basisu/zstd/zstd.h +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/third_party/basisu/zstd/zstd_errors.h +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/third_party/nanovdb/LICENSE +0 -0
- {ernie_renderer-0.2.0.dev19 → ernie_renderer-0.2.0.dev21}/third_party/nanovdb/PNanoVDB.h +0 -0
|
@@ -15,7 +15,7 @@ project(
|
|
|
15
15
|
)
|
|
16
16
|
|
|
17
17
|
# Pre-release suffix such as .dev12, written by CI.
|
|
18
|
-
set(ERNIE_VERSION_SUFFIX ".
|
|
18
|
+
set(ERNIE_VERSION_SUFFIX ".dev21" CACHE STRING "Pre-release suffix of Ernie's version")
|
|
19
19
|
set(ERNIE_VERSION "${PROJECT_VERSION}${ERNIE_VERSION_SUFFIX}")
|
|
20
20
|
|
|
21
21
|
option(ERNIE_BUILD_TESTS "Build Ernie's tests" OFF)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: ernie-renderer
|
|
3
|
-
Version: 0.2.0.
|
|
3
|
+
Version: 0.2.0.dev21
|
|
4
4
|
Summary: Efficient Renderer for Natural and Interplanetary Environments: a physically based, spectral Vulkan ray tracer
|
|
5
5
|
Author: Alex Maietta
|
|
6
6
|
License-Expression: BSD-3-Clause
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
// SPDX-License-Identifier: BSD-3-Clause
|
|
2
|
-
/// @file
|
|
2
|
+
/// @file storage.cpp
|
|
3
3
|
/// @brief The prim store at 100,000 prims: create, first sync, one edit, edit all, add and remove.
|
|
4
|
-
#include "benchmarks/bench.h"
|
|
5
4
|
#include "ernie/scene/storage.h"
|
|
5
|
+
#include "benchmarks/bench.h"
|
|
6
6
|
|
|
7
7
|
#include <memory>
|
|
8
8
|
#include <string>
|
|
@@ -22,6 +22,7 @@ set_target_properties(
|
|
|
22
22
|
|
|
23
23
|
# One object library per layer; a layer links only the layers below it.
|
|
24
24
|
add_subdirectory(util)
|
|
25
|
+
add_subdirectory(geometry)
|
|
25
26
|
add_subdirectory(physics)
|
|
26
27
|
add_subdirectory(io)
|
|
27
28
|
add_subdirectory(scene)
|
|
@@ -31,6 +32,7 @@ add_subdirectory(render)
|
|
|
31
32
|
|
|
32
33
|
set(ernie_layers
|
|
33
34
|
ernie_util
|
|
35
|
+
ernie_geometry
|
|
34
36
|
ernie_physics
|
|
35
37
|
ernie_io
|
|
36
38
|
ernie_scene
|
|
@@ -2,11 +2,11 @@
|
|
|
2
2
|
/// @file vulkan_devices.cpp
|
|
3
3
|
/// @brief Lists Vulkan devices through a short-lived instance.
|
|
4
4
|
#include "ernie/device/vulkan_devices.h"
|
|
5
|
+
#include "ernie/util/algorithm.h"
|
|
5
6
|
|
|
6
7
|
#include <volk.h>
|
|
7
8
|
|
|
8
9
|
#include <algorithm>
|
|
9
|
-
#include <iterator>
|
|
10
10
|
#include <stdexcept>
|
|
11
11
|
#include <string_view>
|
|
12
12
|
|
|
@@ -107,10 +107,7 @@ std::vector<VulkanDeviceInfo> ListVulkanDevices() {
|
|
|
107
107
|
std::vector<VkPhysicalDevice> devices(count);
|
|
108
108
|
vkEnumeratePhysicalDevices(instance.Get(), &count, devices.data());
|
|
109
109
|
|
|
110
|
-
|
|
111
|
-
infos.reserve(devices.size());
|
|
112
|
-
std::ranges::transform(devices, std::back_inserter(infos), ReadDeviceInfo);
|
|
113
|
-
return infos;
|
|
110
|
+
return Map(devices, ReadDeviceInfo);
|
|
114
111
|
}
|
|
115
112
|
|
|
116
113
|
const char* ToString(VulkanDeviceType type) {
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
// SPDX-License-Identifier: BSD-3-Clause
|
|
2
|
+
/// @file bounds.h
|
|
3
|
+
/// @brief Axis-aligned boxes in double precision.
|
|
4
|
+
#pragma once
|
|
5
|
+
|
|
6
|
+
#include <glm/glm.hpp>
|
|
7
|
+
|
|
8
|
+
#include <cmath>
|
|
9
|
+
#include <limits>
|
|
10
|
+
|
|
11
|
+
namespace ernie {
|
|
12
|
+
|
|
13
|
+
/// @brief An axis-aligned box; the default one is empty and grows to hold what it is given.
|
|
14
|
+
struct Box {
|
|
15
|
+
glm::dvec3 min{std::numeric_limits<double>::infinity()};
|
|
16
|
+
glm::dvec3 max{-std::numeric_limits<double>::infinity()};
|
|
17
|
+
|
|
18
|
+
static Box Around(const glm::dvec3& center, const glm::dvec3& halfSize) {
|
|
19
|
+
return {center - halfSize, center + halfSize};
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
bool Empty() const {
|
|
23
|
+
return !(min.x <= max.x && min.y <= max.y && min.z <= max.z);
|
|
24
|
+
}
|
|
25
|
+
glm::dvec3 Center() const {
|
|
26
|
+
return 0.5 * (min + max);
|
|
27
|
+
}
|
|
28
|
+
glm::dvec3 Size() const {
|
|
29
|
+
return Empty() ? glm::dvec3(0.0) : max - min;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
Box& Extend(const glm::dvec3& point) {
|
|
33
|
+
min = glm::min(min, point);
|
|
34
|
+
max = glm::max(max, point);
|
|
35
|
+
return *this;
|
|
36
|
+
}
|
|
37
|
+
Box& Extend(const Box& other) {
|
|
38
|
+
if (!other.Empty()) {
|
|
39
|
+
min = glm::min(min, other.min);
|
|
40
|
+
max = glm::max(max, other.max);
|
|
41
|
+
}
|
|
42
|
+
return *this;
|
|
43
|
+
}
|
|
44
|
+
Box Grown(double margin) const {
|
|
45
|
+
return Empty() ? *this : Box{min - margin, max + margin};
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/// @return The box holding this one after `transform` (Arvo's method, exact for affine maps).
|
|
49
|
+
Box Transformed(const glm::dmat4& transform) const {
|
|
50
|
+
if (Empty()) {
|
|
51
|
+
return *this;
|
|
52
|
+
}
|
|
53
|
+
const glm::dvec3 translation(transform[3]);
|
|
54
|
+
Box out{translation, translation};
|
|
55
|
+
for (int column = 0; column < 3; ++column) {
|
|
56
|
+
for (int row = 0; row < 3; ++row) {
|
|
57
|
+
const double a = transform[column][row] * min[column];
|
|
58
|
+
const double b = transform[column][row] * max[column];
|
|
59
|
+
out.min[row] += std::min(a, b);
|
|
60
|
+
out.max[row] += std::max(a, b);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
return out;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
bool operator==(const Box&) const = default;
|
|
67
|
+
};
|
|
68
|
+
|
|
69
|
+
} // namespace ernie
|
|
@@ -222,22 +222,12 @@ bool NanoVdbGrid::Vector() const {
|
|
|
222
222
|
return type == NanoVdbType::Vec3f;
|
|
223
223
|
}
|
|
224
224
|
|
|
225
|
-
|
|
226
|
-
min = glm::dvec3(std::numeric_limits<double>::infinity());
|
|
227
|
-
max = -min;
|
|
225
|
+
Box NanoVdbGrid::GridBounds() const {
|
|
228
226
|
if (Empty()) {
|
|
229
|
-
|
|
230
|
-
return;
|
|
231
|
-
}
|
|
232
|
-
const glm::dvec3 lo = glm::dvec3(indexMin) - 1.0;
|
|
233
|
-
const glm::dvec3 hi = glm::dvec3(indexMax) + 1.0;
|
|
234
|
-
for (int corner = 0; corner < 8; ++corner) {
|
|
235
|
-
const glm::dvec3 index{(corner & 1) != 0 ? hi.x : lo.x, (corner & 2) != 0 ? hi.y : lo.y,
|
|
236
|
-
(corner & 4) != 0 ? hi.z : lo.z};
|
|
237
|
-
const glm::dvec3 point = glm::dvec3(indexToGrid * glm::dvec4(index, 1.0));
|
|
238
|
-
min = glm::min(min, point);
|
|
239
|
-
max = glm::max(max, point);
|
|
227
|
+
const glm::dvec3 origin(indexToGrid[3]);
|
|
228
|
+
return {origin, origin};
|
|
240
229
|
}
|
|
230
|
+
return Box{glm::dvec3(indexMin) - 1.0, glm::dvec3(indexMax) + 1.0}.Transformed(indexToGrid);
|
|
241
231
|
}
|
|
242
232
|
|
|
243
233
|
std::vector<NanoVdbGrid> ParseNanoVdbGrids(std::span<const std::uint8_t> bytes) {
|
|
@@ -3,6 +3,8 @@
|
|
|
3
3
|
/// @brief NanoVDB grids: reading .nvdb/.vdb files and building grids.
|
|
4
4
|
#pragma once
|
|
5
5
|
|
|
6
|
+
#include "ernie/geometry/bounds.h"
|
|
7
|
+
|
|
6
8
|
#include <glm/glm.hpp>
|
|
7
9
|
|
|
8
10
|
#include <cstdint>
|
|
@@ -79,11 +81,9 @@ struct NanoVdbGrid {
|
|
|
79
81
|
bool Scalar() const;
|
|
80
82
|
/// @return Whether volumes sample a 3-vector per voxel.
|
|
81
83
|
bool Vector() const;
|
|
82
|
-
/// @
|
|
83
|
-
///
|
|
84
|
-
|
|
85
|
-
/// @param max Receives the upper corner.
|
|
86
|
-
void GridBounds(glm::dvec3& min, glm::dvec3& max) const;
|
|
84
|
+
/// @return Active bounds in the grid frame, grown by a voxel on each side for trilinear
|
|
85
|
+
/// sampling; the grid's origin when it has no active voxels.
|
|
86
|
+
Box GridBounds() const;
|
|
87
87
|
};
|
|
88
88
|
|
|
89
89
|
/// @brief Reads every grid of a NanoVDB file, in file order.
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# SPDX-License-Identifier: BSD-3-Clause
|
|
2
|
+
add_library(
|
|
3
|
+
ernie_scene
|
|
4
|
+
OBJECT
|
|
5
|
+
path.cpp
|
|
6
|
+
schema.cpp
|
|
7
|
+
scene.cpp
|
|
8
|
+
storage.cpp
|
|
9
|
+
view.cpp
|
|
10
|
+
xform.cpp
|
|
11
|
+
schemas/geom.cpp
|
|
12
|
+
schemas/registry.cpp
|
|
13
|
+
)
|
|
14
|
+
target_link_libraries(ernie_scene PUBLIC ernie_physics ernie_io PRIVATE ernie_build_options)
|
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
// SPDX-License-Identifier: BSD-3-Clause
|
|
2
|
+
/// @file convert.h
|
|
3
|
+
/// @brief Conversions between `Value`s and column elements.
|
|
4
|
+
#pragma once
|
|
5
|
+
|
|
6
|
+
#include "ernie/scene/storage.h"
|
|
7
|
+
#include "ernie/scene/value.h"
|
|
8
|
+
#include "ernie/util/algorithm.h"
|
|
9
|
+
|
|
10
|
+
#include <cmath>
|
|
11
|
+
#include <optional>
|
|
12
|
+
#include <type_traits>
|
|
13
|
+
#include <vector>
|
|
14
|
+
|
|
15
|
+
namespace ernie {
|
|
16
|
+
|
|
17
|
+
/// @return A number of any width, or none.
|
|
18
|
+
inline std::optional<double> ToNumber(const Value& value) {
|
|
19
|
+
if (const auto* d = value.Get<double>()) {
|
|
20
|
+
return *d;
|
|
21
|
+
}
|
|
22
|
+
if (const auto* f = value.Get<float>()) {
|
|
23
|
+
return *f;
|
|
24
|
+
}
|
|
25
|
+
if (const auto* i = value.Get<int>()) {
|
|
26
|
+
return *i;
|
|
27
|
+
}
|
|
28
|
+
return std::nullopt;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/// @return A vector of N doubles from one of floats, doubles or (for two) ints, or none.
|
|
32
|
+
template <glm::length_t N> std::optional<glm::vec<N, double>> ToVector(const Value& value) {
|
|
33
|
+
if (const auto* d = value.Get<glm::vec<N, double>>()) {
|
|
34
|
+
return *d;
|
|
35
|
+
}
|
|
36
|
+
if (const auto* f = value.Get<glm::vec<N, float>>()) {
|
|
37
|
+
return glm::vec<N, double>(*f);
|
|
38
|
+
}
|
|
39
|
+
if constexpr (N == 2) {
|
|
40
|
+
if (const auto* i = value.Get<glm::ivec2>()) {
|
|
41
|
+
return glm::dvec2(*i);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
return std::nullopt;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/// @return The numbers of a number, or the components of a vector; none for other values.
|
|
48
|
+
inline std::vector<double> ToNumbers(const Value& value) {
|
|
49
|
+
if (const std::optional<double> number = ToNumber(value)) {
|
|
50
|
+
return {*number};
|
|
51
|
+
}
|
|
52
|
+
const auto components = [](const auto& vector) {
|
|
53
|
+
std::vector<double> numbers(static_cast<std::size_t>(vector.length()));
|
|
54
|
+
for (glm::length_t i = 0; i < vector.length(); ++i) {
|
|
55
|
+
numbers[static_cast<std::size_t>(i)] = vector[i];
|
|
56
|
+
}
|
|
57
|
+
return numbers;
|
|
58
|
+
};
|
|
59
|
+
if (const auto v = ToVector<2>(value)) {
|
|
60
|
+
return components(*v);
|
|
61
|
+
}
|
|
62
|
+
if (const auto v = ToVector<3>(value)) {
|
|
63
|
+
return components(*v);
|
|
64
|
+
}
|
|
65
|
+
if (const auto v = ToVector<4>(value)) {
|
|
66
|
+
return components(*v);
|
|
67
|
+
}
|
|
68
|
+
return {};
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/// @return `value` as a column element, interning tokens and paths; none if it is another kind.
|
|
72
|
+
template <typename T> std::optional<T> ToElement(PathTable& paths, const Value& value) {
|
|
73
|
+
if constexpr (std::is_same_v<T, std::uint8_t>) {
|
|
74
|
+
if (const auto* b = value.Get<bool>()) {
|
|
75
|
+
return static_cast<std::uint8_t>(*b);
|
|
76
|
+
}
|
|
77
|
+
if (const auto* i = value.Get<int>(); i && (*i == 0 || *i == 1)) {
|
|
78
|
+
return static_cast<std::uint8_t>(*i);
|
|
79
|
+
}
|
|
80
|
+
} else if constexpr (std::is_same_v<T, std::int32_t>) {
|
|
81
|
+
if (const std::optional<double> n = ToNumber(value); n && std::trunc(*n) == *n) {
|
|
82
|
+
return static_cast<std::int32_t>(*n);
|
|
83
|
+
}
|
|
84
|
+
} else if constexpr (std::is_same_v<T, double>) {
|
|
85
|
+
return ToNumber(value);
|
|
86
|
+
} else if constexpr (std::is_same_v<T, glm::dvec2> || std::is_same_v<T, glm::dvec3> ||
|
|
87
|
+
std::is_same_v<T, glm::dvec4>) {
|
|
88
|
+
return ToVector<T::length()>(value);
|
|
89
|
+
} else if constexpr (std::is_same_v<T, glm::dquat>) {
|
|
90
|
+
if (const auto* q = value.Get<glm::dquat>()) {
|
|
91
|
+
return *q;
|
|
92
|
+
}
|
|
93
|
+
} else if constexpr (std::is_same_v<T, glm::dmat4>) {
|
|
94
|
+
if (const auto* m = value.Get<glm::dmat4>()) {
|
|
95
|
+
return *m;
|
|
96
|
+
}
|
|
97
|
+
} else if constexpr (std::is_same_v<T, Token>) {
|
|
98
|
+
if (const auto* text = value.Get<std::string>()) {
|
|
99
|
+
return paths.Names().Intern(*text);
|
|
100
|
+
}
|
|
101
|
+
} else if constexpr (std::is_same_v<T, Target>) {
|
|
102
|
+
if (const auto* path = value.Get<Path>()) {
|
|
103
|
+
return Target{path->IsEmpty() ? kNoPath : paths.Intern(*path)};
|
|
104
|
+
}
|
|
105
|
+
} else if constexpr (std::is_same_v<T, std::vector<Target>>) {
|
|
106
|
+
if (const auto* path = value.Get<Path>()) {
|
|
107
|
+
return std::vector<Target>{{paths.Intern(*path)}};
|
|
108
|
+
}
|
|
109
|
+
if (const auto* list = value.Get<std::vector<Path>>()) {
|
|
110
|
+
return Map(*list, [&](const Path& path) { return Target{paths.Intern(path)}; });
|
|
111
|
+
}
|
|
112
|
+
} else if constexpr (std::is_same_v<T, std::vector<float>>) {
|
|
113
|
+
if (const auto* floats = value.Get<std::vector<float>>()) {
|
|
114
|
+
return *floats;
|
|
115
|
+
}
|
|
116
|
+
if (const std::optional<double> n = ToNumber(value)) {
|
|
117
|
+
return std::vector<float>{static_cast<float>(*n)};
|
|
118
|
+
}
|
|
119
|
+
} else if constexpr (std::is_same_v<T, std::vector<Token>>) {
|
|
120
|
+
if (const auto* texts = value.Get<std::vector<std::string>>()) {
|
|
121
|
+
return Map(*texts, [&](const std::string& text) { return paths.Names().Intern(text); });
|
|
122
|
+
}
|
|
123
|
+
// An empty list, as Python and JSON pass one.
|
|
124
|
+
if (const auto* floats = value.Get<std::vector<float>>(); floats && floats->empty()) {
|
|
125
|
+
return std::vector<Token>{};
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
return std::nullopt;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
/// @return A column element as a `Value`; tensors have none.
|
|
132
|
+
template <typename T> Value ToValue(const PathTable& paths, const T& element) {
|
|
133
|
+
if constexpr (std::is_same_v<T, std::uint8_t>) {
|
|
134
|
+
return element != 0;
|
|
135
|
+
} else if constexpr (std::is_same_v<T, std::int32_t>) {
|
|
136
|
+
return static_cast<int>(element);
|
|
137
|
+
} else if constexpr (std::is_same_v<T, Token>) {
|
|
138
|
+
return std::string(paths.Names().Text(element));
|
|
139
|
+
} else if constexpr (std::is_same_v<T, Target>) {
|
|
140
|
+
return element.path == kNoPath ? Path() : paths.ToPath(element.path);
|
|
141
|
+
} else if constexpr (std::is_same_v<T, std::vector<Target>>) {
|
|
142
|
+
return Map(element, [&](const Target& target) { return paths.ToPath(target.path); });
|
|
143
|
+
} else if constexpr (std::is_same_v<T, std::vector<Token>>) {
|
|
144
|
+
return Map(element, [&](Token token) { return std::string(paths.Names().Text(token)); });
|
|
145
|
+
} else if constexpr (std::is_same_v<T, Tensor>) {
|
|
146
|
+
return Value();
|
|
147
|
+
} else {
|
|
148
|
+
return element;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
/// @return The column type an undeclared attribute's first value makes, or none.
|
|
153
|
+
inline std::optional<ColumnType> InferColumnType(const Value& value) {
|
|
154
|
+
return std::visit(
|
|
155
|
+
[](const auto& v) -> std::optional<ColumnType> {
|
|
156
|
+
using V = std::decay_t<decltype(v)>;
|
|
157
|
+
if constexpr (std::is_same_v<V, bool>) {
|
|
158
|
+
return ColumnType::Bool;
|
|
159
|
+
} else if constexpr (std::is_same_v<V, int>) {
|
|
160
|
+
return ColumnType::Int;
|
|
161
|
+
} else if constexpr (std::is_same_v<V, float> || std::is_same_v<V, double>) {
|
|
162
|
+
return ColumnType::Double;
|
|
163
|
+
} else if constexpr (std::is_same_v<V, glm::ivec2> || std::is_same_v<V, glm::vec2> ||
|
|
164
|
+
std::is_same_v<V, glm::dvec2>) {
|
|
165
|
+
return ColumnType::Vec2;
|
|
166
|
+
} else if constexpr (std::is_same_v<V, glm::vec3> || std::is_same_v<V, glm::dvec3>) {
|
|
167
|
+
return ColumnType::Vec3;
|
|
168
|
+
} else if constexpr (std::is_same_v<V, glm::vec4> || std::is_same_v<V, glm::dvec4>) {
|
|
169
|
+
return ColumnType::Vec4;
|
|
170
|
+
} else if constexpr (std::is_same_v<V, glm::dquat>) {
|
|
171
|
+
return ColumnType::Quat;
|
|
172
|
+
} else if constexpr (std::is_same_v<V, glm::dmat4>) {
|
|
173
|
+
return ColumnType::Matrix;
|
|
174
|
+
} else if constexpr (std::is_same_v<V, std::string>) {
|
|
175
|
+
return ColumnType::TokenValue;
|
|
176
|
+
} else if constexpr (std::is_same_v<V, Path>) {
|
|
177
|
+
return ColumnType::Relationship;
|
|
178
|
+
} else if constexpr (std::is_same_v<V, std::vector<Path>>) {
|
|
179
|
+
return ColumnType::Relationships;
|
|
180
|
+
} else if constexpr (std::is_same_v<V, std::vector<float>>) {
|
|
181
|
+
return ColumnType::FloatArray;
|
|
182
|
+
} else if constexpr (std::is_same_v<V, std::vector<std::string>>) {
|
|
183
|
+
return ColumnType::TokenArray;
|
|
184
|
+
} else {
|
|
185
|
+
return std::nullopt;
|
|
186
|
+
}
|
|
187
|
+
},
|
|
188
|
+
value.Raw());
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
} // namespace ernie
|
|
@@ -113,6 +113,13 @@ class PathTable {
|
|
|
113
113
|
PathId NextSibling(PathId id) const {
|
|
114
114
|
return nodes_[id].nextSibling;
|
|
115
115
|
}
|
|
116
|
+
/// Calls `visit(child)` for each child of `id`, in the order they were added.
|
|
117
|
+
template <typename Visit> void ForEachChild(PathId id, const Visit& visit) const {
|
|
118
|
+
for (PathId child = nodes_[id].firstChild; child != kNoPath;
|
|
119
|
+
child = nodes_[child].nextSibling) {
|
|
120
|
+
visit(child);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
116
123
|
/// @return Whether `id` is `ancestor` or lies below it.
|
|
117
124
|
bool HasPrefix(PathId id, PathId ancestor) const;
|
|
118
125
|
|