ernie-renderer 0.2.0.dev40__tar.gz → 0.2.0.dev45__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.dev40 → ernie_renderer-0.2.0.dev45}/.github/workflows/ci.yml +12 -2
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/.gitignore +3 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/CMakeLists.txt +1 -1
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/PKG-INFO +1 -1
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/benchmarks/scene/extents.cpp +21 -6
- ernie_renderer-0.2.0.dev45/docs/README.md +10 -0
- ernie_renderer-0.2.0.dev45/ernie/app/main.cpp +110 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/ernie/scene/CMakeLists.txt +11 -1
- ernie_renderer-0.2.0.dev45/ernie/scene/holder_index.cpp +111 -0
- ernie_renderer-0.2.0.dev45/ernie/scene/holder_index.h +42 -0
- ernie_renderer-0.2.0.dev45/ernie/scene/inherit.cpp +120 -0
- ernie_renderer-0.2.0.dev45/ernie/scene/json.cpp +528 -0
- ernie_renderer-0.2.0.dev45/ernie/scene/json.h +77 -0
- ernie_renderer-0.2.0.dev45/ernie/scene/json_value.h +32 -0
- ernie_renderer-0.2.0.dev45/ernie/scene/reference.cpp +534 -0
- ernie_renderer-0.2.0.dev45/ernie/scene/reference.h +60 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/ernie/scene/scene.cpp +33 -10
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/ernie/scene/scene.h +46 -4
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/ernie/scene/schema.cpp +22 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/ernie/scene/schema.h +13 -1
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/ernie/scene/schemas/geom.h +4 -4
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/ernie/scene/schemas/shade.h +1 -1
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/ernie/scene/storage.h +19 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/ernie/scene/tokens.h +2 -0
- ernie_renderer-0.2.0.dev45/ernie/scene/usd_plugin.cpp +219 -0
- ernie_renderer-0.2.0.dev45/ernie/scene/validate.cpp +98 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/ernie/util/file.cpp +7 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/ernie/util/file.h +5 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/ernie/util/text.h +19 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/mkdocs.yml +10 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/tests/CMakeLists.txt +8 -1
- ernie_renderer-0.2.0.dev45/tests/fixtures/scenes/README.md +7 -0
- ernie_renderer-0.2.0.dev45/tests/fixtures/scenes/invalid/problems.expected +11 -0
- ernie_renderer-0.2.0.dev45/tests/fixtures/scenes/invalid/problems.json +17 -0
- ernie_renderer-0.2.0.dev45/tests/fixtures/scenes/rover.json +64 -0
- ernie_renderer-0.2.0.dev45/tests/fixtures/scenes/rover.saved.json +107 -0
- ernie_renderer-0.2.0.dev45/tests/python/test_scene_schema.py +70 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/tests/scene/extent_cache_test.cpp +3 -3
- ernie_renderer-0.2.0.dev45/tests/scene/holder_index_test.cpp +63 -0
- ernie_renderer-0.2.0.dev45/tests/scene/inherit_test.cpp +129 -0
- ernie_renderer-0.2.0.dev45/tests/scene/json_test.cpp +113 -0
- ernie_renderer-0.2.0.dev45/tests/scene/reference_test.cpp +80 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/tests/scene/vol_test.cpp +1 -1
- ernie_renderer-0.2.0.dev40/docs/README.md +0 -7
- ernie_renderer-0.2.0.dev40/ernie/app/main.cpp +0 -44
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/.clang-format +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/.clang-tidy +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/.dockerignore +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/.gersemirc +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/.gitattributes +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/.github/scripts/coverage_badge.py +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/.github/scripts/install-lavapipe-windows.sh +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/.pre-commit-config.yaml +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/CMakePresets.json +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/Dockerfile +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/LICENSE +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/README.md +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/benchmarks/CMakeLists.txt +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/benchmarks/bench.h +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/benchmarks/main.cpp +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/benchmarks/scene/storage.cpp +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/cmake/ErnieConfig.cmake.in +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/cmake/ErnieFetch.cmake +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/cmake/ErnieInstall.cmake +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/cmake/ErniePackaging.cmake +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/cmake/ErnieTesting.cmake +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/cmake/ernie.pc.in +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/cmake/third_party/bc7enc.cmake +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/cmake/third_party/dlpack.cmake +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/cmake/third_party/glm.cmake +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/cmake/third_party/googletest.cmake +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/cmake/third_party/json.cmake +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/cmake/third_party/nanobind.cmake +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/cmake/third_party/openexr.cmake +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/cmake/third_party/stb.cmake +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/cmake/third_party/tracy.cmake +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/cmake/third_party/volk.cmake +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/cmake/third_party/vulkan_headers.cmake +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/docs/index.md +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/docs/requirements.txt +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/ernie/CMakeLists.txt +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/ernie/app/CMakeLists.txt +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/ernie/device/CMakeLists.txt +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/ernie/device/vulkan_devices.cpp +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/ernie/device/vulkan_devices.h +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/ernie/geometry/CMakeLists.txt +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/ernie/geometry/bounds.h +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/ernie/graph/CMakeLists.txt +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/ernie/io/CMakeLists.txt +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/ernie/io/ies.cpp +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/ernie/io/ies.h +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/ernie/io/image.cpp +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/ernie/io/image.h +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/ernie/io/nanovdb.cpp +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/ernie/io/nanovdb.h +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/ernie/io/raster.cpp +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/ernie/io/raster.h +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/ernie/io/texture.cpp +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/ernie/io/texture.h +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/ernie/physics/CMakeLists.txt +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/ernie/physics/astronomy.cpp +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/ernie/physics/astronomy.h +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/ernie/physics/atmosphere.cpp +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/ernie/physics/atmosphere.h +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/ernie/physics/cloud.cpp +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/ernie/physics/cloud.h +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/ernie/physics/constants.h +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/ernie/physics/reflectance_library.cpp +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/ernie/physics/reflectance_library.h +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/ernie/physics/reflectance_table.h +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/ernie/physics/regolith.cpp +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/ernie/physics/regolith.h +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/ernie/physics/scattering.cpp +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/ernie/physics/scattering.h +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/ernie/physics/solar.cpp +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/ernie/physics/solar.h +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/ernie/physics/solar_table.h +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/ernie/physics/spectrum.cpp +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/ernie/physics/spectrum.h +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/ernie/python/CMakeLists.txt +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/ernie/python/ernie/__init__.py +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/ernie/python/module.cpp +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/ernie/render/CMakeLists.txt +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/ernie/scene/convert.h +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/ernie/scene/extent_cache.cpp +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/ernie/scene/extent_cache.h +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/ernie/scene/path.cpp +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/ernie/scene/path.h +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/ernie/scene/schemas/camera.cpp +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/ernie/scene/schemas/camera.h +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/ernie/scene/schemas/collection.cpp +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/ernie/scene/schemas/collection.h +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/ernie/scene/schemas/geom.cpp +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/ernie/scene/schemas/instancer.cpp +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/ernie/scene/schemas/instancer.h +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/ernie/scene/schemas/laser.cpp +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/ernie/scene/schemas/laser.h +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/ernie/scene/schemas/lux.cpp +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/ernie/scene/schemas/lux.h +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/ernie/scene/schemas/mesh.cpp +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/ernie/scene/schemas/mesh.h +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/ernie/scene/schemas/planet.cpp +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/ernie/scene/schemas/planet.h +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/ernie/scene/schemas/registry.cpp +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/ernie/scene/schemas/render.cpp +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/ernie/scene/schemas/render.h +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/ernie/scene/schemas/shade.cpp +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/ernie/scene/schemas/vol.cpp +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/ernie/scene/schemas/vol.h +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/ernie/scene/storage.cpp +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/ernie/scene/value.h +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/ernie/scene/view.cpp +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/ernie/scene/view.h +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/ernie/scene/xform.cpp +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/ernie/scene/xform.h +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/ernie/util/CMakeLists.txt +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/ernie/util/algorithm.h +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/ernie/util/bytes.h +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/ernie/util/disk_cache.cpp +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/ernie/util/disk_cache.h +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/ernie/util/glm.h +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/ernie/util/hash_index.h +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/ernie/util/linear_algebra.h +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/ernie/util/log.cpp +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/ernie/util/log.h +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/ernie/util/math.h +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/ernie/util/noise.cpp +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/ernie/util/noise.h +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/ernie/util/numbers.h +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/ernie/util/parallel.h +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/ernie/util/profiler.cpp +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/ernie/util/profiler.h +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/ernie/util/random.h +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/ernie/util/tensor.cpp +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/ernie/util/tensor.h +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/ernie/util/version.cpp +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/ernie/util/version.h +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/ernie/util/worker_pool.h +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/pyproject.toml +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/tests/common.h +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/tests/consumer/CMakeLists.txt +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/tests/consumer/main.cpp +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/tests/device/vulkan_devices_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/tests/fixtures/exr/README.md +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/tests/fixtures/exr/make_exr.py +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/tests/fixtures/exr/rgb_float_zip.exr +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/tests/fixtures/exr/rgba_half_window.exr +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/tests/fixtures/exr/y_half_zips.exr +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/tests/fixtures/ies/README.md +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/tests/fixtures/ies/downlight_quadrant.ies +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/tests/fixtures/ies/floodlight_type_b.ies +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/tests/fixtures/ies/lamp.tilt +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/tests/fixtures/images/grey16.png +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/tests/fixtures/ktx2/README.md +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/tests/fixtures/ktx2/quadrants_etc1s.ktx2 +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/tests/fixtures/ktx2/quadrants_uastc_zstd.ktx2 +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/tests/fixtures/ktx2/tilted_normal_etc1s.ktx2 +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/tests/fixtures/ktx2/tilted_normal_uastc.ktx2 +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/tests/fixtures/tiff/README.md +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/tests/fixtures/tiff/float_deflate_predictor3.tif +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/tests/fixtures/tiff/float_raw.tif +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/tests/fixtures/tiff/int16_bigtiff_bigendian.tif +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/tests/fixtures/tiff/rgb_lzw_predictor2.tif +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/tests/fixtures/tiff/rgb_planar_lzw.tif +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/tests/fixtures/tiff/rgb_planar_raw.tif +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/tests/fixtures/tiff/rgb_tiled_deflate.tif +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/tests/fixtures/volumes/cube.nvdb +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/tests/fixtures/volumes/make_nvdb.py +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/tests/geometry/bounds_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/tests/io/ies_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/tests/io/image_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/tests/io/nanovdb_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/tests/io/raster_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/tests/io/texture_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/tests/physics/astronomy_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/tests/physics/atmosphere_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/tests/physics/cloud_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/tests/physics/reflectance_library_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/tests/physics/regolith_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/tests/physics/scattering_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/tests/physics/solar_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/tests/physics/spectrum_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/tests/python/test_package.py +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/tests/scene/api_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/tests/scene/instancer_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/tests/scene/lux_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/tests/scene/mesh_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/tests/scene/path_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/tests/scene/planet_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/tests/scene/render_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/tests/scene/scene_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/tests/scene/schema_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/tests/scene/shade_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/tests/scene/storage_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/tests/scene/xform_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/tests/util/algorithm_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/tests/util/bytes_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/tests/util/disk_cache_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/tests/util/file_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/tests/util/hash_index_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/tests/util/linear_algebra_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/tests/util/log_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/tests/util/math_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/tests/util/noise_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/tests/util/parallel_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/tests/util/profiler_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/tests/util/random_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/tests/util/tensor_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/tests/util/text_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/tests/util/version_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/tests/util/worker_pool_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/third_party/CMakeLists.txt +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/third_party/basisu/LICENSE +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/third_party/basisu/LICENSES/Apache-2.0.txt +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/third_party/basisu/LICENSES/BSD-3-clause.txt +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/third_party/basisu/LICENSES/MIT.txt +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/third_party/basisu/NOTICE +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/third_party/basisu/README.md +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/third_party/basisu/transcoder/basisu.h +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/third_party/basisu/transcoder/basisu_astc_cfgs.inl +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/third_party/basisu/transcoder/basisu_astc_hdr_core.h +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/third_party/basisu/transcoder/basisu_astc_helpers.h +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/third_party/basisu/transcoder/basisu_containers.h +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/third_party/basisu/transcoder/basisu_containers_impl.h +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/third_party/basisu/transcoder/basisu_dds_transcoder.inl +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/third_party/basisu/transcoder/basisu_etc1_mods.inl +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/third_party/basisu/transcoder/basisu_file_headers.h +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/third_party/basisu/transcoder/basisu_idct.h +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/third_party/basisu/transcoder/basisu_transcoder.cpp +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/third_party/basisu/transcoder/basisu_transcoder.h +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/third_party/basisu/transcoder/basisu_transcoder_internal.h +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/third_party/basisu/transcoder/basisu_transcoder_tables_astc.inc +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/third_party/basisu/transcoder/basisu_transcoder_tables_astc_0_255.inc +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/third_party/basisu/transcoder/basisu_transcoder_tables_atc_55.inc +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/third_party/basisu/transcoder/basisu_transcoder_tables_atc_56.inc +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/third_party/basisu/transcoder/basisu_transcoder_tables_bc7_m5_alpha.inc +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/third_party/basisu/transcoder/basisu_transcoder_tables_bc7_m5_color.inc +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/third_party/basisu/transcoder/basisu_transcoder_tables_dxt1_5.inc +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/third_party/basisu/transcoder/basisu_transcoder_tables_dxt1_6.inc +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/third_party/basisu/transcoder/basisu_transcoder_tables_pvrtc2_45.inc +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/third_party/basisu/transcoder/basisu_transcoder_tables_pvrtc2_alpha_33.inc +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/third_party/basisu/transcoder/basisu_transcoder_uastc.h +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/third_party/basisu/transcoder/basisu_xbc7_decoder.h +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/third_party/basisu/transcoder/basisu_xbc7_decoder.inl +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/third_party/basisu/zstd/LICENSE +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/third_party/basisu/zstd/zstd.h +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/third_party/basisu/zstd/zstd_errors.h +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/third_party/nanovdb/LICENSE +0 -0
- {ernie_renderer-0.2.0.dev40 → ernie_renderer-0.2.0.dev45}/third_party/nanovdb/PNanoVDB.h +0 -0
|
@@ -134,7 +134,7 @@ jobs:
|
|
|
134
134
|
- uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
|
|
135
135
|
with:
|
|
136
136
|
python-version: "3.12"
|
|
137
|
-
- run: python -m pip install pytest
|
|
137
|
+
- run: python -m pip install pytest jsonschema
|
|
138
138
|
- uses: actions/download-artifact@9000827ccba6bdab643e8b6fd33ac0654aef8333 # v8.0.2
|
|
139
139
|
with:
|
|
140
140
|
name: build-${{ matrix.os }}
|
|
@@ -213,8 +213,10 @@ jobs:
|
|
|
213
213
|
path: coverage
|
|
214
214
|
retention-days: 14
|
|
215
215
|
|
|
216
|
-
# The documentation, built strictly so broken links and warnings fail
|
|
216
|
+
# The documentation, built strictly so broken links and warnings fail, with the schema reference
|
|
217
|
+
# pages and the scene files' JSON Schema generated by the Linux build.
|
|
217
218
|
docs:
|
|
219
|
+
needs: build
|
|
218
220
|
runs-on: ubuntu-24.04
|
|
219
221
|
timeout-minutes: 10
|
|
220
222
|
steps:
|
|
@@ -222,6 +224,14 @@ jobs:
|
|
|
222
224
|
- uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
|
|
223
225
|
with:
|
|
224
226
|
python-version: "3.12"
|
|
227
|
+
- uses: actions/download-artifact@9000827ccba6bdab643e8b6fd33ac0654aef8333 # v8.0.2
|
|
228
|
+
with:
|
|
229
|
+
name: build-ubuntu-24.04
|
|
230
|
+
- name: Generate the schema reference
|
|
231
|
+
run: |
|
|
232
|
+
tar -xf build-ci.tar
|
|
233
|
+
build/ci/bin/ernie schema --json-schema docs/schema/ernie-scene.schema.json \
|
|
234
|
+
--markdown docs/reference
|
|
225
235
|
- run: python -m pip install -r docs/requirements.txt
|
|
226
236
|
- run: mkdocs build --strict
|
|
227
237
|
- uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7.0.2
|
|
@@ -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 ".dev45" 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.dev45
|
|
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,6 +1,6 @@
|
|
|
1
1
|
// SPDX-License-Identifier: BSD-3-Clause
|
|
2
2
|
/// @file extents.cpp
|
|
3
|
-
/// @brief
|
|
3
|
+
/// @brief Scene updates at 100,000 prims: the first, one edit's, and one inherited edit's.
|
|
4
4
|
#include "benchmarks/bench.h"
|
|
5
5
|
#include "ernie/scene/schemas/geom.h"
|
|
6
6
|
|
|
@@ -21,20 +21,35 @@ std::unique_ptr<Scene> MakeSpheres() {
|
|
|
21
21
|
return scene;
|
|
22
22
|
}
|
|
23
23
|
|
|
24
|
-
const bool kFirstUpdate = Register("scene.
|
|
24
|
+
const bool kFirstUpdate = Register("scene.update.first_100k", [] {
|
|
25
25
|
std::unique_ptr<Scene> scene;
|
|
26
|
-
return Timing{Fastest([&] { scene = MakeSpheres(); }, [&] { scene->
|
|
26
|
+
return Timing{Fastest([&] { scene = MakeSpheres(); }, [&] { scene->Update(); }), 10.0};
|
|
27
27
|
});
|
|
28
28
|
|
|
29
|
-
const bool kOneEdit = Register("scene.
|
|
29
|
+
const bool kOneEdit = Register("scene.update.after_one_edit_of_100k", [] {
|
|
30
30
|
std::unique_ptr<Scene> scene = MakeSpheres();
|
|
31
|
-
scene->
|
|
31
|
+
scene->Update();
|
|
32
32
|
const PrimId ball = *scene->Find("/World/Ball_54321");
|
|
33
33
|
double radius = 1.0;
|
|
34
34
|
const double ms = Fastest([&] { scene->Set(ball, Sphere::kRadius, radius += 1.0); },
|
|
35
|
-
[&] { scene->
|
|
35
|
+
[&] { scene->Update(); });
|
|
36
36
|
return Timing{ms, 1.0};
|
|
37
37
|
});
|
|
38
38
|
|
|
39
|
+
const bool kInheritedEdit = Register("scene.update.after_hiding_the_parent_of_100k", [] {
|
|
40
|
+
std::unique_ptr<Scene> scene = MakeSpheres();
|
|
41
|
+
scene->Define("/World", "Xform");
|
|
42
|
+
scene->Update();
|
|
43
|
+
const PrimId world = *scene->Find("/World");
|
|
44
|
+
bool hidden = false;
|
|
45
|
+
const double ms = Fastest(
|
|
46
|
+
[&] {
|
|
47
|
+
hidden = !hidden;
|
|
48
|
+
scene->Set(world, Imageable::kVisibility, hidden ? "invisible" : "inherited");
|
|
49
|
+
},
|
|
50
|
+
[&] { scene->Update(); });
|
|
51
|
+
return Timing{ms, 10.0};
|
|
52
|
+
});
|
|
53
|
+
|
|
39
54
|
} // namespace
|
|
40
55
|
} // namespace ernie::bench
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
# Docs
|
|
2
|
+
|
|
3
|
+
The schema reference pages and the scene files' JSON Schema are generated from the schema registry by a build of `ernie`, before the site is built:
|
|
4
|
+
|
|
5
|
+
```sh
|
|
6
|
+
ernie schema --json-schema docs/schema/ernie-scene.schema.json --markdown docs/reference
|
|
7
|
+
python -m pip install -r docs/requirements.txt
|
|
8
|
+
mkdocs serve # live preview at http://127.0.0.1:8000
|
|
9
|
+
mkdocs build # static site in site/
|
|
10
|
+
```
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
// SPDX-License-Identifier: BSD-3-Clause
|
|
2
|
+
/// @file main.cpp
|
|
3
|
+
/// @brief The ernie program.
|
|
4
|
+
#include "ernie/device/vulkan_devices.h"
|
|
5
|
+
#include "ernie/scene/reference.h"
|
|
6
|
+
#include "ernie/util/file.h"
|
|
7
|
+
#include "ernie/util/version.h"
|
|
8
|
+
|
|
9
|
+
#include <cstdio>
|
|
10
|
+
#include <exception>
|
|
11
|
+
#include <filesystem>
|
|
12
|
+
#include <string_view>
|
|
13
|
+
#include <vector>
|
|
14
|
+
|
|
15
|
+
namespace {
|
|
16
|
+
|
|
17
|
+
namespace fs = std::filesystem;
|
|
18
|
+
|
|
19
|
+
void PrintUsage() {
|
|
20
|
+
std::puts("Usage: ernie [--version] [--devices] [--help]\n"
|
|
21
|
+
" ernie schema [--json-schema FILE] [--markdown DIR] [--usda DIR]\n"
|
|
22
|
+
" ernie validate SCENE.json...");
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
int PrintDevices() {
|
|
26
|
+
for (const ernie::VulkanDeviceInfo& device : ernie::ListVulkanDevices()) {
|
|
27
|
+
std::printf("%s (%s, Vulkan %u.%u%s)\n", device.name.c_str(), ernie::ToString(device.type),
|
|
28
|
+
device.apiMajor, device.apiMinor, device.rayQuery ? ", ray queries" : "");
|
|
29
|
+
}
|
|
30
|
+
return 0;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
void Write(const fs::path& path, std::string_view text) {
|
|
34
|
+
if (path.has_parent_path()) {
|
|
35
|
+
fs::create_directories(path.parent_path());
|
|
36
|
+
}
|
|
37
|
+
ernie::WriteTextFile(path, text);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/// Writes the views of the schema registry that `arguments` ask for.
|
|
41
|
+
int Schema(const std::vector<std::string_view>& arguments) {
|
|
42
|
+
if (arguments.empty() || arguments.size() % 2 != 0) {
|
|
43
|
+
PrintUsage();
|
|
44
|
+
return 2;
|
|
45
|
+
}
|
|
46
|
+
for (std::size_t i = 0; i < arguments.size(); i += 2) {
|
|
47
|
+
const fs::path out(arguments[i + 1]);
|
|
48
|
+
if (arguments[i] == "--json-schema") {
|
|
49
|
+
Write(out, ernie::SceneJsonSchema());
|
|
50
|
+
} else if (arguments[i] == "--markdown") {
|
|
51
|
+
for (const ernie::SchemaFamily& family : ernie::SchemaFamilies()) {
|
|
52
|
+
Write(out / (std::string(family.name) + ".md"), ernie::ReferencePage(family));
|
|
53
|
+
}
|
|
54
|
+
} else if (arguments[i] == "--usda") {
|
|
55
|
+
const ernie::UsdSchemaPlugin plugin = ernie::ErnieUsdSchemaPlugin();
|
|
56
|
+
Write(out / "generatedSchema.usda", plugin.generatedSchema);
|
|
57
|
+
Write(out / "plugInfo.json", plugin.plugInfo);
|
|
58
|
+
} else {
|
|
59
|
+
PrintUsage();
|
|
60
|
+
return 2;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
return 0;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/// Prints every problem of the scene files; fails if any has one.
|
|
67
|
+
int Validate(const std::vector<std::string_view>& files) {
|
|
68
|
+
if (files.empty()) {
|
|
69
|
+
PrintUsage();
|
|
70
|
+
return 2;
|
|
71
|
+
}
|
|
72
|
+
int status = 0;
|
|
73
|
+
for (const std::string_view file : files) {
|
|
74
|
+
for (const ernie::SceneProblem& problem :
|
|
75
|
+
ernie::ValidateScene(ernie::ReadTextFile(fs::path(file)))) {
|
|
76
|
+
std::printf("%.*s: %s\n", static_cast<int>(file.size()), file.data(),
|
|
77
|
+
problem.Message().c_str());
|
|
78
|
+
status = 1;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
return status;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
} // namespace
|
|
85
|
+
|
|
86
|
+
int main(int argc, char** argv) {
|
|
87
|
+
const std::string_view option = argc > 1 ? argv[1] : "--help";
|
|
88
|
+
const std::vector<std::string_view> rest(argv + std::min(argc, 2), argv + argc);
|
|
89
|
+
try {
|
|
90
|
+
if (option == "--version") {
|
|
91
|
+
std::printf("ernie %.*s\n", static_cast<int>(ernie::Version().size()),
|
|
92
|
+
ernie::Version().data());
|
|
93
|
+
return 0;
|
|
94
|
+
}
|
|
95
|
+
if (option == "--devices") {
|
|
96
|
+
return PrintDevices();
|
|
97
|
+
}
|
|
98
|
+
if (option == "schema") {
|
|
99
|
+
return Schema(rest);
|
|
100
|
+
}
|
|
101
|
+
if (option == "validate") {
|
|
102
|
+
return Validate(rest);
|
|
103
|
+
}
|
|
104
|
+
PrintUsage();
|
|
105
|
+
return option == "--help" ? 0 : 2;
|
|
106
|
+
} catch (const std::exception& error) {
|
|
107
|
+
std::fprintf(stderr, "ernie: %s\n", error.what());
|
|
108
|
+
return 1;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
@@ -3,10 +3,16 @@ add_library(
|
|
|
3
3
|
ernie_scene
|
|
4
4
|
OBJECT
|
|
5
5
|
extent_cache.cpp
|
|
6
|
+
holder_index.cpp
|
|
7
|
+
inherit.cpp
|
|
8
|
+
json.cpp
|
|
6
9
|
path.cpp
|
|
10
|
+
reference.cpp
|
|
7
11
|
schema.cpp
|
|
8
12
|
scene.cpp
|
|
9
13
|
storage.cpp
|
|
14
|
+
usd_plugin.cpp
|
|
15
|
+
validate.cpp
|
|
10
16
|
view.cpp
|
|
11
17
|
xform.cpp
|
|
12
18
|
schemas/camera.cpp
|
|
@@ -22,4 +28,8 @@ add_library(
|
|
|
22
28
|
schemas/shade.cpp
|
|
23
29
|
schemas/vol.cpp
|
|
24
30
|
)
|
|
25
|
-
target_link_libraries(
|
|
31
|
+
target_link_libraries(
|
|
32
|
+
ernie_scene
|
|
33
|
+
PUBLIC ernie_physics ernie_io
|
|
34
|
+
PRIVATE ernie_json ernie_build_options
|
|
35
|
+
)
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
// SPDX-License-Identifier: BSD-3-Clause
|
|
2
|
+
/// @file holder_index.cpp
|
|
3
|
+
/// @brief Re-indexing changed relationship cells, and finding a target's live holders.
|
|
4
|
+
#include "ernie/scene/holder_index.h"
|
|
5
|
+
|
|
6
|
+
#include <algorithm>
|
|
7
|
+
#include <unordered_set>
|
|
8
|
+
|
|
9
|
+
namespace ernie {
|
|
10
|
+
namespace {
|
|
11
|
+
|
|
12
|
+
bool IsRelationship(ColumnType type) {
|
|
13
|
+
return type == ColumnType::Relationship || type == ColumnType::Relationships;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
/// @return The targets of a relationship cell, without the unset one.
|
|
17
|
+
std::vector<PathId> Targets(const PrimStore& store, BucketId bucket, const Column& column,
|
|
18
|
+
std::uint32_t row) {
|
|
19
|
+
std::vector<PathId> targets;
|
|
20
|
+
if (column.values->Type() == ColumnType::Relationship) {
|
|
21
|
+
targets.push_back(store.Read<Target>(bucket, column.attribute)[row].path);
|
|
22
|
+
} else {
|
|
23
|
+
for (const Target target : store.Read<std::vector<Target>>(bucket, column.attribute)[row]) {
|
|
24
|
+
targets.push_back(target.path);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
std::erase(targets, kNoPath);
|
|
28
|
+
return targets;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
} // namespace
|
|
32
|
+
|
|
33
|
+
void HolderIndex::Update(const PrimStore& store) {
|
|
34
|
+
const ChangeSet changes = store.ChangesSince(cursor_);
|
|
35
|
+
for (const ChangeSet::Values& values : changes.values) {
|
|
36
|
+
const Bucket& bucket = store.GetBucket(values.bucket);
|
|
37
|
+
const Column& column = *bucket.Find(values.attribute);
|
|
38
|
+
if (!IsRelationship(column.values->Type())) {
|
|
39
|
+
continue;
|
|
40
|
+
}
|
|
41
|
+
for (const RowRange range : values.rows) {
|
|
42
|
+
for (std::uint32_t row = range.begin; row < std::min(range.end, bucket.Rows()); ++row) {
|
|
43
|
+
Index(bucket.prims[row], values.attribute,
|
|
44
|
+
Targets(store, values.bucket, column, row));
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
// A bucket too far behind to replay reports every row of every column, as a fresh one does.
|
|
49
|
+
for (const BucketId id : changes.resets) {
|
|
50
|
+
const Bucket& bucket = store.GetBucket(id);
|
|
51
|
+
for (const Column& column : bucket.columns) {
|
|
52
|
+
for (std::uint32_t row = 0;
|
|
53
|
+
IsRelationship(column.values->Type()) && row < bucket.Rows(); ++row) {
|
|
54
|
+
Index(bucket.prims[row], column.attribute, Targets(store, id, column, row));
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
cursor_ = changes.version;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
void HolderIndex::Index(PrimId prim, AttributeId attribute, std::vector<PathId> targets) {
|
|
62
|
+
const Cell cell = Key(prim, attribute);
|
|
63
|
+
const auto found = targets_.find(cell);
|
|
64
|
+
if (found != targets_.end()) {
|
|
65
|
+
for (const PathId old : found->second) {
|
|
66
|
+
holders_[old].erase(cell);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
for (const PathId target : targets) {
|
|
70
|
+
holders_[target][cell] = prim.generation;
|
|
71
|
+
}
|
|
72
|
+
if (!targets.empty()) {
|
|
73
|
+
targets_[cell] = std::move(targets);
|
|
74
|
+
} else if (found != targets_.end()) {
|
|
75
|
+
targets_.erase(found);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
std::vector<PrimId> HolderIndex::Find(const PrimStore& store, PathId target) const {
|
|
80
|
+
std::vector<PrimId> found;
|
|
81
|
+
const auto holders = holders_.find(target);
|
|
82
|
+
if (holders == holders_.end()) {
|
|
83
|
+
return found;
|
|
84
|
+
}
|
|
85
|
+
std::unordered_set<std::uint32_t> slots;
|
|
86
|
+
for (const auto& [cell, generation] : holders->second) {
|
|
87
|
+
const PrimId prim{static_cast<std::uint32_t>(cell >> 32), generation};
|
|
88
|
+
// Cells of removed prims, or of prims since moved to a bucket without the attribute, stay
|
|
89
|
+
// until their slot's next prim writes them.
|
|
90
|
+
if (Holds(store, prim, static_cast<AttributeId>(cell), target) &&
|
|
91
|
+
slots.insert(prim.slot).second) {
|
|
92
|
+
found.push_back(prim);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
return found;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
bool HolderIndex::Holds(const PrimStore& store, PrimId prim, AttributeId attribute, PathId target) {
|
|
99
|
+
if (!store.Alive(prim)) {
|
|
100
|
+
return false;
|
|
101
|
+
}
|
|
102
|
+
const BucketId bucket = store.PrimBucket(prim);
|
|
103
|
+
const Column* column = store.GetBucket(bucket).Find(attribute);
|
|
104
|
+
if (column == nullptr || !IsRelationship(column->values->Type())) {
|
|
105
|
+
return false;
|
|
106
|
+
}
|
|
107
|
+
const std::vector<PathId> targets = Targets(store, bucket, *column, store.PrimRow(prim));
|
|
108
|
+
return std::ranges::find(targets, target) != targets.end();
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
} // namespace ernie
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
// SPDX-License-Identifier: BSD-3-Clause
|
|
2
|
+
/// @file holder_index.h
|
|
3
|
+
/// @brief The reverse index of relationships: which prims target each path.
|
|
4
|
+
#pragma once
|
|
5
|
+
|
|
6
|
+
#include "ernie/scene/storage.h"
|
|
7
|
+
|
|
8
|
+
#include <cstdint>
|
|
9
|
+
#include <unordered_map>
|
|
10
|
+
#include <vector>
|
|
11
|
+
|
|
12
|
+
namespace ernie {
|
|
13
|
+
|
|
14
|
+
/// @brief Which prims' relationships target each path, kept up to date from the store's changes,
|
|
15
|
+
/// so an edit to a target reaches its holders: a prototype its instancers, a material the prims
|
|
16
|
+
/// bound to it (through their resolved bindings), a body its terrains.
|
|
17
|
+
class HolderIndex {
|
|
18
|
+
public:
|
|
19
|
+
/// Re-indexes the relationship cells that changed since the last update.
|
|
20
|
+
void Update(const PrimStore& store);
|
|
21
|
+
/// @return The live prims with a relationship targeting `target`, each once.
|
|
22
|
+
std::vector<PrimId> Find(const PrimStore& store, PathId target) const;
|
|
23
|
+
|
|
24
|
+
private:
|
|
25
|
+
/// A relationship cell: the prim's slot and the attribute, packed.
|
|
26
|
+
using Cell = std::uint64_t;
|
|
27
|
+
static Cell Key(PrimId prim, AttributeId attribute) {
|
|
28
|
+
return (std::uint64_t{prim.slot} << 32) | attribute;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
void Index(PrimId prim, AttributeId attribute, std::vector<PathId> targets);
|
|
32
|
+
/// @return Whether the prim is alive and its relationship still targets `target`.
|
|
33
|
+
static bool Holds(const PrimStore& store, PrimId prim, AttributeId attribute, PathId target);
|
|
34
|
+
|
|
35
|
+
/// Each target's holding cells, with the generation of the prim that wrote them.
|
|
36
|
+
std::unordered_map<PathId, std::unordered_map<Cell, std::uint32_t>> holders_;
|
|
37
|
+
/// Each cell's targets, to unindex them when it changes.
|
|
38
|
+
std::unordered_map<Cell, std::vector<PathId>> targets_;
|
|
39
|
+
std::uint64_t cursor_ = 0;
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
} // namespace ernie
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
// SPDX-License-Identifier: BSD-3-Clause
|
|
2
|
+
/// @file inherit.cpp
|
|
3
|
+
/// @brief Resolving inherited attributes from the nearest authoring ancestor into their resolved
|
|
4
|
+
/// columns, for only the subtrees whose authored values or prims changed.
|
|
5
|
+
#include "ernie/scene/convert.h"
|
|
6
|
+
#include "ernie/scene/scene.h"
|
|
7
|
+
|
|
8
|
+
#include <algorithm>
|
|
9
|
+
#include <concepts>
|
|
10
|
+
#include <limits>
|
|
11
|
+
|
|
12
|
+
namespace ernie {
|
|
13
|
+
|
|
14
|
+
void Scene::Resolve() {
|
|
15
|
+
const ChangeSet changes = store_.ChangesSince(resolved_);
|
|
16
|
+
for (const AttributeDef* def : InheritedAttributes()) {
|
|
17
|
+
const AttributeId attribute = store_.Tokens().Intern(def->name);
|
|
18
|
+
const AttributeId resolved = store_.Tokens().Intern(ResolvedName(def->name));
|
|
19
|
+
WithColumnType(def->type, [&]<typename T>(std::type_identity<T>) {
|
|
20
|
+
if constexpr (std::equality_comparable<T> && !std::same_as<T, Tensor>) {
|
|
21
|
+
const T fallback = ToElement<T>(store_.Paths(), def->fallback).value_or(T{});
|
|
22
|
+
BitSet roots = ResolveRoots(changes, attribute);
|
|
23
|
+
std::vector<PathId> order;
|
|
24
|
+
roots.ForEachRun([&](std::size_t begin, std::size_t end) {
|
|
25
|
+
for (std::size_t path = begin; path < end; ++path) {
|
|
26
|
+
order.push_back(static_cast<PathId>(path));
|
|
27
|
+
}
|
|
28
|
+
});
|
|
29
|
+
// Ancestors intern first, so most roots are reached from one above them.
|
|
30
|
+
for (const PathId root : order) {
|
|
31
|
+
if (roots.Test(root)) {
|
|
32
|
+
ResolveSubtree<T>(root, attribute, resolved, fallback, roots);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
// Its own writes are to resolved columns, which no resolve reads.
|
|
39
|
+
resolved_ = store_.Version();
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
BitSet Scene::ResolveRoots(const ChangeSet& changes, AttributeId attribute) const {
|
|
43
|
+
BitSet roots;
|
|
44
|
+
roots.Resize(store_.Paths().Size());
|
|
45
|
+
const auto add = [&](BucketId bucket, std::uint32_t begin, std::uint32_t end) {
|
|
46
|
+
const Bucket& rows = store_.GetBucket(bucket);
|
|
47
|
+
for (std::uint32_t row = begin; row < std::min(end, rows.Rows()); ++row) {
|
|
48
|
+
roots.Set(store_.PrimPath(rows.prims[row]));
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
for (const BucketId bucket : changes.resets) {
|
|
52
|
+
add(bucket, 0, std::numeric_limits<std::uint32_t>::max());
|
|
53
|
+
}
|
|
54
|
+
for (const ChangeSet::Rows& rows : changes.rows) {
|
|
55
|
+
if (rows.change.kind == StructuralChange::Kind::Added) {
|
|
56
|
+
add(rows.bucket, rows.change.row, rows.change.row + rows.change.count);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
for (const ChangeSet::Values& values : changes.values) {
|
|
60
|
+
if (values.attribute == attribute) {
|
|
61
|
+
for (const RowRange range : values.rows) {
|
|
62
|
+
add(values.bucket, range.begin, range.end);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
return roots;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
template <typename T> const T* Scene::Inheritable(PrimId prim, AttributeId attribute) const {
|
|
70
|
+
const BucketId bucket = store_.PrimBucket(prim);
|
|
71
|
+
const Column* column = store_.GetBucket(bucket).Find(attribute);
|
|
72
|
+
const std::uint32_t row = store_.PrimRow(prim);
|
|
73
|
+
if (column == nullptr || !column->authored.Test(row) ||
|
|
74
|
+
column->values->Type() != kColumnType<T>) {
|
|
75
|
+
return nullptr;
|
|
76
|
+
}
|
|
77
|
+
const T* own = &store_.Read<T>(bucket, attribute)[row];
|
|
78
|
+
if constexpr (std::same_as<T, Token>) {
|
|
79
|
+
return *own == inherited_ ? nullptr : own;
|
|
80
|
+
}
|
|
81
|
+
return own;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
template <typename T> T Scene::Above(PathId path, AttributeId attribute, const T& fallback) const {
|
|
85
|
+
const PathTable& paths = store_.Paths();
|
|
86
|
+
for (PathId above = paths.Parent(path); above != kRootPath; above = paths.Parent(above)) {
|
|
87
|
+
const std::optional<PrimId> prim = store_.Find(above);
|
|
88
|
+
if (const T* own = prim ? Inheritable<T>(*prim, attribute) : nullptr) {
|
|
89
|
+
return *own;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
return fallback;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
template <typename T>
|
|
96
|
+
void Scene::ResolveSubtree(PathId root, AttributeId attribute, AttributeId resolved,
|
|
97
|
+
const T& fallback, BitSet& roots) {
|
|
98
|
+
std::vector<std::pair<PathId, T>> pending{{root, Above<T>(root, attribute, fallback)}};
|
|
99
|
+
while (!pending.empty()) {
|
|
100
|
+
const auto [path, above] = std::move(pending.back());
|
|
101
|
+
pending.pop_back();
|
|
102
|
+
const std::optional<PrimId> prim = store_.Find(path);
|
|
103
|
+
if (!prim) {
|
|
104
|
+
continue;
|
|
105
|
+
}
|
|
106
|
+
const bool isRoot = roots.Test(path);
|
|
107
|
+
roots.Set(path, false);
|
|
108
|
+
const T* own = Inheritable<T>(*prim, attribute);
|
|
109
|
+
const T value = own != nullptr ? *own : above;
|
|
110
|
+
// Prims without the column (typeless ones, materials) pass the value through.
|
|
111
|
+
const bool stored = store_.GetBucket(store_.PrimBucket(*prim)).Find(resolved) != nullptr;
|
|
112
|
+
// An unchanged prim's descendants are unchanged too, unless they are roots themselves.
|
|
113
|
+
if (store_.Derive(*prim, resolved, value) || isRoot || !stored) {
|
|
114
|
+
store_.Paths().ForEachChild(path,
|
|
115
|
+
[&](PathId child) { pending.emplace_back(child, value); });
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
} // namespace ernie
|