ernie-renderer 0.2.0.dev47__tar.gz → 0.2.0.dev52__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.dev47 → ernie_renderer-0.2.0.dev52}/CMakeLists.txt +1 -1
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/PKG-INFO +1 -1
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/benchmarks/scene/extents.cpp +0 -1
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/benchmarks/scene/storage.cpp +1 -1
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/scene/CMakeLists.txt +0 -2
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/scene/animation.cpp +3 -3
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/scene/edit_history.cpp +13 -25
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/scene/edit_history.h +6 -2
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/scene/extent_cache.cpp +13 -20
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/scene/extent_cache.h +1 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/scene/holder_index.cpp +21 -32
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/scene/holder_index.h +0 -2
- ernie_renderer-0.2.0.dev52/ernie/scene/inherit.cpp +125 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/scene/json.cpp +62 -78
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/scene/json.h +10 -11
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/scene/json_value.h +3 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/scene/reference.cpp +74 -164
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/scene/reference.h +3 -15
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/scene/scene.cpp +23 -21
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/scene/scene.h +6 -19
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/scene/schema.cpp +11 -20
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/scene/schema.h +29 -3
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/scene/schemas/camera.h +3 -5
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/scene/schemas/geom.h +2 -2
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/scene/schemas/instancer.cpp +7 -16
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/scene/schemas/lux.cpp +23 -12
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/scene/schemas/lux.h +90 -18
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/scene/schemas/mesh.cpp +2 -4
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/scene/schemas/planet.cpp +5 -11
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/scene/schemas/planet.h +5 -9
- ernie_renderer-0.2.0.dev52/ernie/scene/schemas/registry.cpp +104 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/scene/schemas/vol.cpp +3 -5
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/scene/storage.cpp +29 -28
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/scene/storage.h +52 -86
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/scene/time_samples.cpp +8 -8
- ernie_renderer-0.2.0.dev52/ernie/scene/usd_plugin.cpp +142 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/scene/validate.cpp +2 -1
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/scene/view.cpp +1 -1
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/scene/view.h +6 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/util/tensor.cpp +11 -2
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/util/tensor.h +7 -3
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/util/text.h +28 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/CMakeLists.txt +0 -2
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/common.h +37 -4
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/scene/edit_history_test.cpp +0 -1
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/scene/inherit_test.cpp +55 -13
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/scene/instancer_test.cpp +2 -5
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/scene/json_test.cpp +2 -2
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/scene/lux_test.cpp +0 -1
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/scene/mesh_test.cpp +6 -6
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/scene/planet_test.cpp +3 -6
- ernie_renderer-0.2.0.dev52/tests/scene/reference_test.cpp +76 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/scene/scene_test.cpp +74 -1
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/scene/schema_test.cpp +29 -33
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/scene/storage_test.cpp +13 -14
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/scene/xform_test.cpp +3 -3
- ernie_renderer-0.2.0.dev47/ernie/scene/inherit.cpp +0 -120
- ernie_renderer-0.2.0.dev47/ernie/scene/schemas/collection.cpp +0 -10
- ernie_renderer-0.2.0.dev47/ernie/scene/schemas/laser.cpp +0 -26
- ernie_renderer-0.2.0.dev47/ernie/scene/schemas/laser.h +0 -92
- ernie_renderer-0.2.0.dev47/ernie/scene/schemas/registry.cpp +0 -89
- ernie_renderer-0.2.0.dev47/ernie/scene/usd_plugin.cpp +0 -219
- ernie_renderer-0.2.0.dev47/tests/scene/api_test.cpp +0 -91
- ernie_renderer-0.2.0.dev47/tests/scene/holder_index_test.cpp +0 -63
- ernie_renderer-0.2.0.dev47/tests/scene/reference_test.cpp +0 -80
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/.clang-format +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/.clang-tidy +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/.dockerignore +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/.gersemirc +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/.gitattributes +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/.github/scripts/coverage_badge.py +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/.github/scripts/install-lavapipe-windows.sh +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/.github/workflows/ci.yml +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/.gitignore +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/.pre-commit-config.yaml +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/CMakePresets.json +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/Dockerfile +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/LICENSE +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/README.md +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/benchmarks/CMakeLists.txt +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/benchmarks/bench.h +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/benchmarks/main.cpp +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/cmake/ErnieConfig.cmake.in +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/cmake/ErnieFetch.cmake +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/cmake/ErnieInstall.cmake +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/cmake/ErniePackaging.cmake +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/cmake/ErnieTesting.cmake +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/cmake/ernie.pc.in +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/cmake/third_party/bc7enc.cmake +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/cmake/third_party/dlpack.cmake +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/cmake/third_party/glm.cmake +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/cmake/third_party/googletest.cmake +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/cmake/third_party/json.cmake +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/cmake/third_party/nanobind.cmake +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/cmake/third_party/openexr.cmake +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/cmake/third_party/stb.cmake +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/cmake/third_party/tracy.cmake +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/cmake/third_party/volk.cmake +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/cmake/third_party/vulkan_headers.cmake +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/docs/README.md +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/docs/index.md +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/docs/requirements.txt +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/CMakeLists.txt +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/app/CMakeLists.txt +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/app/main.cpp +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/device/CMakeLists.txt +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/device/vulkan_devices.cpp +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/device/vulkan_devices.h +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/geometry/CMakeLists.txt +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/geometry/bounds.h +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/graph/CMakeLists.txt +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/io/CMakeLists.txt +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/io/ies.cpp +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/io/ies.h +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/io/image.cpp +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/io/image.h +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/io/nanovdb.cpp +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/io/nanovdb.h +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/io/raster.cpp +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/io/raster.h +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/io/texture.cpp +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/io/texture.h +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/physics/CMakeLists.txt +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/physics/astronomy.cpp +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/physics/astronomy.h +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/physics/atmosphere.cpp +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/physics/atmosphere.h +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/physics/cloud.cpp +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/physics/cloud.h +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/physics/constants.h +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/physics/reflectance_library.cpp +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/physics/reflectance_library.h +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/physics/reflectance_table.h +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/physics/regolith.cpp +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/physics/regolith.h +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/physics/scattering.cpp +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/physics/scattering.h +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/physics/solar.cpp +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/physics/solar.h +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/physics/solar_table.h +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/physics/spectrum.cpp +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/physics/spectrum.h +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/python/CMakeLists.txt +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/python/ernie/__init__.py +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/python/module.cpp +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/render/CMakeLists.txt +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/scene/convert.h +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/scene/path.cpp +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/scene/path.h +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/scene/schemas/camera.cpp +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/scene/schemas/collection.h +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/scene/schemas/geom.cpp +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/scene/schemas/instancer.h +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/scene/schemas/mesh.h +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/scene/schemas/render.cpp +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/scene/schemas/render.h +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/scene/schemas/shade.cpp +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/scene/schemas/shade.h +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/scene/schemas/vol.h +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/scene/time_samples.h +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/scene/tokens.h +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/scene/value.h +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/scene/xform.cpp +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/scene/xform.h +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/util/CMakeLists.txt +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/util/algorithm.h +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/util/bytes.h +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/util/disk_cache.cpp +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/util/disk_cache.h +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/util/file.cpp +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/util/file.h +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/util/glm.h +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/util/hash_index.h +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/util/linear_algebra.h +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/util/log.cpp +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/util/log.h +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/util/math.h +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/util/noise.cpp +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/util/noise.h +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/util/numbers.h +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/util/parallel.h +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/util/profiler.cpp +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/util/profiler.h +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/util/random.h +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/util/version.cpp +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/util/version.h +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/util/worker_pool.h +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/mkdocs.yml +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/pyproject.toml +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/consumer/CMakeLists.txt +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/consumer/main.cpp +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/device/vulkan_devices_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/fixtures/exr/README.md +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/fixtures/exr/make_exr.py +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/fixtures/exr/rgb_float_zip.exr +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/fixtures/exr/rgba_half_window.exr +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/fixtures/exr/y_half_zips.exr +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/fixtures/ies/README.md +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/fixtures/ies/downlight_quadrant.ies +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/fixtures/ies/floodlight_type_b.ies +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/fixtures/ies/lamp.tilt +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/fixtures/images/grey16.png +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/fixtures/ktx2/README.md +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/fixtures/ktx2/quadrants_etc1s.ktx2 +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/fixtures/ktx2/quadrants_uastc_zstd.ktx2 +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/fixtures/ktx2/tilted_normal_etc1s.ktx2 +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/fixtures/ktx2/tilted_normal_uastc.ktx2 +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/fixtures/scenes/README.md +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/fixtures/scenes/invalid/problems.expected +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/fixtures/scenes/invalid/problems.json +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/fixtures/scenes/rover.json +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/fixtures/scenes/rover.saved.json +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/fixtures/tiff/README.md +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/fixtures/tiff/float_deflate_predictor3.tif +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/fixtures/tiff/float_raw.tif +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/fixtures/tiff/int16_bigtiff_bigendian.tif +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/fixtures/tiff/rgb_lzw_predictor2.tif +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/fixtures/tiff/rgb_planar_lzw.tif +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/fixtures/tiff/rgb_planar_raw.tif +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/fixtures/tiff/rgb_tiled_deflate.tif +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/fixtures/volumes/cube.nvdb +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/fixtures/volumes/make_nvdb.py +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/geometry/bounds_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/io/ies_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/io/image_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/io/nanovdb_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/io/raster_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/io/texture_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/physics/astronomy_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/physics/atmosphere_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/physics/cloud_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/physics/reflectance_library_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/physics/regolith_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/physics/scattering_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/physics/solar_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/physics/spectrum_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/python/test_package.py +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/python/test_scene_schema.py +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/scene/extent_cache_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/scene/path_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/scene/render_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/scene/shade_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/scene/time_samples_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/scene/vol_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/util/algorithm_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/util/bytes_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/util/disk_cache_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/util/file_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/util/hash_index_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/util/linear_algebra_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/util/log_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/util/math_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/util/noise_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/util/parallel_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/util/profiler_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/util/random_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/util/tensor_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/util/text_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/util/version_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/util/worker_pool_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/third_party/CMakeLists.txt +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/third_party/basisu/LICENSE +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/third_party/basisu/LICENSES/Apache-2.0.txt +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/third_party/basisu/LICENSES/BSD-3-clause.txt +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/third_party/basisu/LICENSES/MIT.txt +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/third_party/basisu/NOTICE +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/third_party/basisu/README.md +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/third_party/basisu/transcoder/basisu.h +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/third_party/basisu/transcoder/basisu_astc_cfgs.inl +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/third_party/basisu/transcoder/basisu_astc_hdr_core.h +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/third_party/basisu/transcoder/basisu_astc_helpers.h +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/third_party/basisu/transcoder/basisu_containers.h +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/third_party/basisu/transcoder/basisu_containers_impl.h +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/third_party/basisu/transcoder/basisu_dds_transcoder.inl +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/third_party/basisu/transcoder/basisu_etc1_mods.inl +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/third_party/basisu/transcoder/basisu_file_headers.h +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/third_party/basisu/transcoder/basisu_idct.h +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/third_party/basisu/transcoder/basisu_transcoder.cpp +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/third_party/basisu/transcoder/basisu_transcoder.h +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/third_party/basisu/transcoder/basisu_transcoder_internal.h +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/third_party/basisu/transcoder/basisu_transcoder_tables_astc.inc +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/third_party/basisu/transcoder/basisu_transcoder_tables_astc_0_255.inc +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/third_party/basisu/transcoder/basisu_transcoder_tables_atc_55.inc +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/third_party/basisu/transcoder/basisu_transcoder_tables_atc_56.inc +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/third_party/basisu/transcoder/basisu_transcoder_tables_bc7_m5_alpha.inc +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/third_party/basisu/transcoder/basisu_transcoder_tables_bc7_m5_color.inc +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/third_party/basisu/transcoder/basisu_transcoder_tables_dxt1_5.inc +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/third_party/basisu/transcoder/basisu_transcoder_tables_dxt1_6.inc +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/third_party/basisu/transcoder/basisu_transcoder_tables_pvrtc2_45.inc +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/third_party/basisu/transcoder/basisu_transcoder_tables_pvrtc2_alpha_33.inc +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/third_party/basisu/transcoder/basisu_transcoder_uastc.h +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/third_party/basisu/transcoder/basisu_xbc7_decoder.h +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/third_party/basisu/transcoder/basisu_xbc7_decoder.inl +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/third_party/basisu/zstd/LICENSE +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/third_party/basisu/zstd/zstd.h +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/third_party/basisu/zstd/zstd_errors.h +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/third_party/nanovdb/LICENSE +0 -0
- {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/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 ".dev52" 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.dev52
|
|
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
|
|
@@ -25,7 +25,7 @@ struct Robots {
|
|
|
25
25
|
transform = store->Tokens().Intern("xformOp:transform");
|
|
26
26
|
bucket = store->AddBucket(
|
|
27
27
|
{store->Tokens().Intern("Xform"), {}},
|
|
28
|
-
std::vector<ColumnLayout>{ColumnLayout::
|
|
28
|
+
std::vector<ColumnLayout>{ColumnLayout::Make<glm::dmat4>(transform, glm::dmat4(1.0))});
|
|
29
29
|
prims.clear();
|
|
30
30
|
}
|
|
31
31
|
|
|
@@ -58,11 +58,11 @@ std::optional<Value> Scene::GetAt(PrimId prim, std::string_view attribute, doubl
|
|
|
58
58
|
}
|
|
59
59
|
|
|
60
60
|
bool Scene::ClearSamples(PrimId prim, std::string_view attribute) {
|
|
61
|
-
|
|
62
|
-
const std::optional<Token> token = store_.Tokens().Find(attribute);
|
|
63
|
-
if (animated == animated_.end() || !token || animated->second.samples.erase(*token) == 0) {
|
|
61
|
+
if (Samples(prim, attribute).empty()) {
|
|
64
62
|
return false;
|
|
65
63
|
}
|
|
64
|
+
const auto animated = animated_.find(prim.slot);
|
|
65
|
+
animated->second.samples.erase(*store_.Tokens().Find(attribute));
|
|
66
66
|
if (animated->second.samples.empty()) {
|
|
67
67
|
animated_.erase(animated);
|
|
68
68
|
}
|
|
@@ -3,6 +3,9 @@
|
|
|
3
3
|
/// @brief Recording edits as steps of before and after states, and applying them either way.
|
|
4
4
|
#include "ernie/scene/edit_history.h"
|
|
5
5
|
|
|
6
|
+
#include "ernie/util/text.h"
|
|
7
|
+
|
|
8
|
+
#include <algorithm>
|
|
6
9
|
#include <stdexcept>
|
|
7
10
|
|
|
8
11
|
namespace ernie {
|
|
@@ -15,7 +18,7 @@ void EditHistory::Set(Scene& scene, const Path& path,
|
|
|
15
18
|
for (auto& [name, value] : edits) {
|
|
16
19
|
Cell before = Capture(scene, prim, name);
|
|
17
20
|
scene.Set(prim, name, std::move(value));
|
|
18
|
-
step.attributes.push_back({name,
|
|
21
|
+
step.attributes.push_back({name, std::move(before), Capture(scene, prim, name)});
|
|
19
22
|
}
|
|
20
23
|
} catch (...) {
|
|
21
24
|
// What applied before the rejected edit stays undoable.
|
|
@@ -25,20 +28,13 @@ void EditHistory::Set(Scene& scene, const Path& path,
|
|
|
25
28
|
throw;
|
|
26
29
|
}
|
|
27
30
|
const auto same = [&](const Step& last) {
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
}
|
|
32
|
-
for (std::size_t i = 0; i < last.attributes.size(); ++i) {
|
|
33
|
-
if (last.attributes[i].first != step.attributes[i].first) {
|
|
34
|
-
return false;
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
return true;
|
|
31
|
+
return !last.structural && last.open && last.path == path &&
|
|
32
|
+
std::ranges::equal(last.attributes, step.attributes, {}, &AttributeEdit::name,
|
|
33
|
+
&AttributeEdit::name);
|
|
38
34
|
};
|
|
39
35
|
if (open && open_ && next_ == steps_.size() && !steps_.empty() && same(steps_.back())) {
|
|
40
36
|
for (std::size_t i = 0; i < step.attributes.size(); ++i) {
|
|
41
|
-
steps_.back().attributes[i].
|
|
37
|
+
steps_.back().attributes[i].after = std::move(step.attributes[i].after);
|
|
42
38
|
}
|
|
43
39
|
return;
|
|
44
40
|
}
|
|
@@ -50,9 +46,7 @@ void EditHistory::Clear(Scene& scene, const Path& path, std::string_view attribu
|
|
|
50
46
|
const std::string name(attribute);
|
|
51
47
|
Cell before = Capture(scene, prim, name);
|
|
52
48
|
scene.Clear(prim, attribute);
|
|
53
|
-
|
|
54
|
-
step.attributes.push_back({name, {std::move(before), Capture(scene, prim, name)}});
|
|
55
|
-
Push(std::move(step));
|
|
49
|
+
Push({.path = path, .attributes = {{name, std::move(before), Capture(scene, prim, name)}}});
|
|
56
50
|
}
|
|
57
51
|
|
|
58
52
|
void EditHistory::Define(Scene& scene, const Path& path, std::string_view type) {
|
|
@@ -168,9 +162,7 @@ void EditHistory::Restore(Scene& scene, const std::vector<PrimSnapshot>& prims)
|
|
|
168
162
|
for (const PrimSnapshot& snapshot : prims) {
|
|
169
163
|
const PrimId prim = scene.Define(snapshot.path, snapshot.type);
|
|
170
164
|
for (const std::string& api : snapshot.apis) {
|
|
171
|
-
|
|
172
|
-
scene.ApplyApi(prim, api);
|
|
173
|
-
}
|
|
165
|
+
scene.ApplyApi(prim, api);
|
|
174
166
|
}
|
|
175
167
|
for (const auto& [name, cell] : snapshot.attributes) {
|
|
176
168
|
Apply(scene, prim, name, cell);
|
|
@@ -190,8 +182,8 @@ void EditHistory::Apply(Scene& scene, const Step& step, bool forward) {
|
|
|
190
182
|
return;
|
|
191
183
|
}
|
|
192
184
|
for (std::size_t i = 0; i < step.attributes.size(); ++i) {
|
|
193
|
-
const
|
|
194
|
-
Apply(scene, *prim, name, forward ?
|
|
185
|
+
const AttributeEdit& edit = step.attributes[forward ? i : step.attributes.size() - 1 - i];
|
|
186
|
+
Apply(scene, *prim, edit.name, forward ? edit.after : edit.before);
|
|
195
187
|
}
|
|
196
188
|
}
|
|
197
189
|
|
|
@@ -227,11 +219,7 @@ std::string EditHistory::Label(const Step& step) {
|
|
|
227
219
|
: "Change ") +
|
|
228
220
|
step.path.String();
|
|
229
221
|
}
|
|
230
|
-
|
|
231
|
-
for (const auto& [name, states] : step.attributes) {
|
|
232
|
-
label += " " + name;
|
|
233
|
-
}
|
|
234
|
-
return label;
|
|
222
|
+
return step.path.String() + " " + Join(step.attributes, " ", &AttributeEdit::name);
|
|
235
223
|
}
|
|
236
224
|
|
|
237
225
|
} // namespace ernie
|
|
@@ -93,10 +93,14 @@ class EditHistory {
|
|
|
93
93
|
std::vector<std::string> apis;
|
|
94
94
|
std::map<std::string, Cell> attributes;
|
|
95
95
|
};
|
|
96
|
+
struct AttributeEdit {
|
|
97
|
+
std::string name;
|
|
98
|
+
Cell before;
|
|
99
|
+
Cell after;
|
|
100
|
+
};
|
|
96
101
|
struct Step {
|
|
97
102
|
Path path;
|
|
98
|
-
|
|
99
|
-
std::vector<std::pair<std::string, std::pair<Cell, Cell>>> attributes;
|
|
103
|
+
std::vector<AttributeEdit> attributes;
|
|
100
104
|
/// Structure steps: the subtree at `path` before and after, parents first; empty for none.
|
|
101
105
|
std::vector<PrimSnapshot> before;
|
|
102
106
|
std::vector<PrimSnapshot> after;
|
|
@@ -14,28 +14,20 @@ void ExtentCache::Track(BucketId bucket, ExtentFunction compute) {
|
|
|
14
14
|
|
|
15
15
|
void ExtentCache::Update(const PrimStore& store) {
|
|
16
16
|
const ChangeSet changes = store.ChangesSince(cursor_);
|
|
17
|
-
const auto tracked = [&](BucketId bucket) {
|
|
18
|
-
return bucket < buckets_.size() && buckets_[bucket].compute != nullptr;
|
|
19
|
-
};
|
|
20
|
-
for (const BucketId bucket : changes.resets) {
|
|
21
|
-
if (tracked(bucket)) {
|
|
22
|
-
Resize(buckets_[bucket], 0);
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
17
|
for (const ChangeSet::Rows& rows : changes.rows) {
|
|
26
|
-
if (
|
|
18
|
+
if (Tracked(rows.bucket)) {
|
|
27
19
|
Replay(buckets_[rows.bucket], rows.change);
|
|
28
20
|
}
|
|
29
21
|
}
|
|
30
22
|
for (const ChangeSet::Values& values : changes.values) {
|
|
31
|
-
if (
|
|
23
|
+
if (Tracked(values.bucket)) {
|
|
32
24
|
for (const RowRange range : values.rows) {
|
|
33
25
|
buckets_[values.bucket].stale.SetRange(range.begin, range.end);
|
|
34
26
|
}
|
|
35
27
|
}
|
|
36
28
|
}
|
|
37
29
|
for (BucketId bucket = 0; bucket < buckets_.size(); ++bucket) {
|
|
38
|
-
if (
|
|
30
|
+
if (Tracked(bucket) && store.GetBucket(bucket).version > cursor_) {
|
|
39
31
|
Refresh(buckets_[bucket], store, bucket);
|
|
40
32
|
}
|
|
41
33
|
}
|
|
@@ -44,16 +36,23 @@ void ExtentCache::Update(const PrimStore& store) {
|
|
|
44
36
|
|
|
45
37
|
std::optional<Box> ExtentCache::Find(const PrimStore& store, BucketId bucket,
|
|
46
38
|
std::uint32_t row) const {
|
|
47
|
-
if (bucket
|
|
48
|
-
|
|
39
|
+
if (!Tracked(bucket) || store.GetBucket(bucket).version > cursor_ ||
|
|
40
|
+
row >= buckets_[bucket].boxes.size()) {
|
|
49
41
|
return std::nullopt;
|
|
50
42
|
}
|
|
51
43
|
return buckets_[bucket].boxes[row];
|
|
52
44
|
}
|
|
53
45
|
|
|
46
|
+
bool ExtentCache::Tracked(BucketId bucket) const {
|
|
47
|
+
return bucket < buckets_.size() && buckets_[bucket].compute != nullptr;
|
|
48
|
+
}
|
|
49
|
+
|
|
54
50
|
void ExtentCache::Replay(Entry& entry, const StructuralChange& change) {
|
|
55
51
|
using Kind = StructuralChange::Kind;
|
|
56
|
-
if (change.kind == Kind::
|
|
52
|
+
if (change.kind == Kind::Reset) {
|
|
53
|
+
Resize(entry, 0);
|
|
54
|
+
}
|
|
55
|
+
if (change.kind == Kind::Added || change.kind == Kind::Reset) {
|
|
57
56
|
Resize(entry, change.row + change.count);
|
|
58
57
|
entry.stale.SetRange(change.row, change.row + change.count);
|
|
59
58
|
} else if (change.kind == Kind::Moved) {
|
|
@@ -72,12 +71,6 @@ void ExtentCache::Resize(Entry& entry, std::uint32_t rows) {
|
|
|
72
71
|
}
|
|
73
72
|
|
|
74
73
|
void ExtentCache::Refresh(Entry& entry, const PrimStore& store, BucketId bucket) {
|
|
75
|
-
const std::uint32_t rows = store.GetBucket(bucket).Rows();
|
|
76
|
-
if (entry.boxes.size() != rows) {
|
|
77
|
-
// Too far behind to replay (a reset): recompute the bucket whole.
|
|
78
|
-
Resize(entry, rows);
|
|
79
|
-
entry.stale.SetRange(0, rows);
|
|
80
|
-
}
|
|
81
74
|
const ExtentRows columns{store, bucket};
|
|
82
75
|
entry.stale.ForEachRun([&](std::size_t begin, std::size_t end) {
|
|
83
76
|
entry.compute(columns, {static_cast<std::uint32_t>(begin), static_cast<std::uint32_t>(end)},
|
|
@@ -32,6 +32,7 @@ class ExtentCache {
|
|
|
32
32
|
BitSet stale;
|
|
33
33
|
};
|
|
34
34
|
|
|
35
|
+
bool Tracked(BucketId bucket) const;
|
|
35
36
|
static void Replay(Entry& entry, const StructuralChange& change);
|
|
36
37
|
static void Resize(Entry& entry, std::uint32_t rows);
|
|
37
38
|
static void Refresh(Entry& entry, const PrimStore& store, BucketId bucket);
|
|
@@ -3,6 +3,8 @@
|
|
|
3
3
|
/// @brief Re-indexing changed relationship cells, and finding a target's live holders.
|
|
4
4
|
#include "ernie/scene/holder_index.h"
|
|
5
5
|
|
|
6
|
+
#include "ernie/util/algorithm.h"
|
|
7
|
+
|
|
6
8
|
#include <algorithm>
|
|
7
9
|
#include <unordered_set>
|
|
8
10
|
|
|
@@ -16,18 +18,28 @@ bool IsRelationship(ColumnType type) {
|
|
|
16
18
|
/// @return The targets of a relationship cell, without the unset one.
|
|
17
19
|
std::vector<PathId> Targets(const PrimStore& store, BucketId bucket, const Column& column,
|
|
18
20
|
std::uint32_t row) {
|
|
19
|
-
std::vector<PathId> targets
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
for (const Target target : store.Read<std::vector<Target>>(bucket, column.attribute)[row]) {
|
|
24
|
-
targets.push_back(target.path);
|
|
25
|
-
}
|
|
26
|
-
}
|
|
21
|
+
std::vector<PathId> targets =
|
|
22
|
+
column.values->Type() == ColumnType::Relationship
|
|
23
|
+
? std::vector<PathId>{store.Read<Target>(bucket, column.attribute)[row].path}
|
|
24
|
+
: Map(store.Read<std::vector<Target>>(bucket, column.attribute)[row], &Target::path);
|
|
27
25
|
std::erase(targets, kNoPath);
|
|
28
26
|
return targets;
|
|
29
27
|
}
|
|
30
28
|
|
|
29
|
+
/// @return Whether the prim is alive and its relationship still targets `target`.
|
|
30
|
+
bool Holds(const PrimStore& store, PrimId prim, AttributeId attribute, PathId target) {
|
|
31
|
+
if (!store.Alive(prim)) {
|
|
32
|
+
return false;
|
|
33
|
+
}
|
|
34
|
+
const BucketId bucket = store.PrimBucket(prim);
|
|
35
|
+
const Column* column = store.GetBucket(bucket).Find(attribute);
|
|
36
|
+
if (column == nullptr || !IsRelationship(column->values->Type())) {
|
|
37
|
+
return false;
|
|
38
|
+
}
|
|
39
|
+
const std::vector<PathId> targets = Targets(store, bucket, *column, store.PrimRow(prim));
|
|
40
|
+
return std::ranges::find(targets, target) != targets.end();
|
|
41
|
+
}
|
|
42
|
+
|
|
31
43
|
} // namespace
|
|
32
44
|
|
|
33
45
|
void HolderIndex::Update(const PrimStore& store) {
|
|
@@ -39,22 +51,12 @@ void HolderIndex::Update(const PrimStore& store) {
|
|
|
39
51
|
continue;
|
|
40
52
|
}
|
|
41
53
|
for (const RowRange range : values.rows) {
|
|
42
|
-
for (std::uint32_t row = range.begin; row <
|
|
54
|
+
for (std::uint32_t row = range.begin; row < range.end; ++row) {
|
|
43
55
|
Index(bucket.prims[row], values.attribute,
|
|
44
56
|
Targets(store, values.bucket, column, row));
|
|
45
57
|
}
|
|
46
58
|
}
|
|
47
59
|
}
|
|
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
60
|
cursor_ = changes.version;
|
|
59
61
|
}
|
|
60
62
|
|
|
@@ -95,17 +97,4 @@ std::vector<PrimId> HolderIndex::Find(const PrimStore& store, PathId target) con
|
|
|
95
97
|
return found;
|
|
96
98
|
}
|
|
97
99
|
|
|
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
100
|
} // namespace ernie
|
|
@@ -29,8 +29,6 @@ class HolderIndex {
|
|
|
29
29
|
}
|
|
30
30
|
|
|
31
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
32
|
|
|
35
33
|
/// Each target's holding cells, with the generation of the prim that wrote them.
|
|
36
34
|
std::unordered_map<PathId, std::unordered_map<Cell, std::uint32_t>> holders_;
|
|
@@ -0,0 +1,125 @@
|
|
|
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
|
+
|
|
11
|
+
namespace ernie {
|
|
12
|
+
namespace {
|
|
13
|
+
|
|
14
|
+
/// @brief One inherited attribute resolving over the store.
|
|
15
|
+
template <typename T> struct Resolver {
|
|
16
|
+
PrimStore& store;
|
|
17
|
+
AttributeId attribute;
|
|
18
|
+
AttributeId resolved;
|
|
19
|
+
T fallback;
|
|
20
|
+
/// The "inherited" token, which authors nothing.
|
|
21
|
+
Token inherited;
|
|
22
|
+
|
|
23
|
+
/// @return What the prim's own value resolves to: null when it doesn't author one.
|
|
24
|
+
const T* Own(PrimId prim) const {
|
|
25
|
+
const T* own = store.Get<T>(prim, attribute);
|
|
26
|
+
if constexpr (std::same_as<T, Token>) {
|
|
27
|
+
return own != nullptr && *own == inherited ? nullptr : own;
|
|
28
|
+
}
|
|
29
|
+
return own;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/// @return The value `path` inherits from its ancestors.
|
|
33
|
+
T Above(PathId path) const {
|
|
34
|
+
const PathTable& paths = store.Paths();
|
|
35
|
+
for (PathId above = paths.Parent(path); above != kRootPath; above = paths.Parent(above)) {
|
|
36
|
+
const std::optional<PrimId> prim = store.Find(above);
|
|
37
|
+
if (const T* own = prim ? Own(*prim) : nullptr) {
|
|
38
|
+
return *own;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
return fallback;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/// Resolves the subtree at `root`, descending past a prim only while its value changes or it
|
|
45
|
+
/// is one of `roots`, which it clears as it reaches them.
|
|
46
|
+
void Subtree(PathId root, BitSet& roots) {
|
|
47
|
+
std::vector<std::pair<PathId, T>> pending{{root, Above(root)}};
|
|
48
|
+
while (!pending.empty()) {
|
|
49
|
+
const auto [path, above] = std::move(pending.back());
|
|
50
|
+
pending.pop_back();
|
|
51
|
+
const std::optional<PrimId> prim = store.Find(path);
|
|
52
|
+
if (!prim) {
|
|
53
|
+
continue;
|
|
54
|
+
}
|
|
55
|
+
const bool isRoot = roots.Test(path);
|
|
56
|
+
roots.Set(path, false);
|
|
57
|
+
const T* own = Own(*prim);
|
|
58
|
+
const T value = own != nullptr ? *own : above;
|
|
59
|
+
// Prims without the column (typeless ones, materials) pass the value through.
|
|
60
|
+
const bool stored = store.GetBucket(store.PrimBucket(*prim)).Find(resolved) != nullptr;
|
|
61
|
+
// An unchanged prim's descendants are unchanged too, unless they are roots themselves.
|
|
62
|
+
if (store.Derive(*prim, resolved, value) || isRoot || !stored) {
|
|
63
|
+
store.Paths().ForEachChild(
|
|
64
|
+
path, [&](PathId child) { pending.emplace_back(child, value); });
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
};
|
|
69
|
+
|
|
70
|
+
/// @return The paths of the prims whose subtrees resolve `attribute` again: those added or with
|
|
71
|
+
/// it changed.
|
|
72
|
+
BitSet Roots(const PrimStore& store, const ChangeSet& changes, AttributeId attribute) {
|
|
73
|
+
BitSet roots;
|
|
74
|
+
roots.Resize(store.Paths().Size());
|
|
75
|
+
const auto add = [&](BucketId bucket, std::uint32_t begin, std::uint32_t end) {
|
|
76
|
+
const Bucket& rows = store.GetBucket(bucket);
|
|
77
|
+
for (std::uint32_t row = begin; row < std::min(end, rows.Rows()); ++row) {
|
|
78
|
+
roots.Set(store.PrimPath(rows.prims[row]));
|
|
79
|
+
}
|
|
80
|
+
};
|
|
81
|
+
for (const ChangeSet::Rows& rows : changes.rows) {
|
|
82
|
+
if (rows.change.kind == StructuralChange::Kind::Added ||
|
|
83
|
+
rows.change.kind == StructuralChange::Kind::Reset) {
|
|
84
|
+
add(rows.bucket, rows.change.row, rows.change.row + rows.change.count);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
for (const ChangeSet::Values& values : changes.values) {
|
|
88
|
+
if (values.attribute == attribute) {
|
|
89
|
+
for (const RowRange range : values.rows) {
|
|
90
|
+
add(values.bucket, range.begin, range.end);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
return roots;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
} // namespace
|
|
98
|
+
|
|
99
|
+
void Scene::Resolve() {
|
|
100
|
+
const ChangeSet changes = store_.ChangesSince(resolved_);
|
|
101
|
+
for (const AttributeDef* def : InheritedAttributes()) {
|
|
102
|
+
const AttributeId attribute = store_.Tokens().Intern(def->name);
|
|
103
|
+
WithColumnType(def->type, [&]<typename T>(std::type_identity<T>) {
|
|
104
|
+
if constexpr (std::equality_comparable<T> && !std::same_as<T, Tensor>) {
|
|
105
|
+
Resolver<T> resolver{
|
|
106
|
+
store_, attribute, store_.Tokens().Intern(ResolvedName(def->name)),
|
|
107
|
+
ToElement<T>(store_.Paths(), def->fallback).value_or(T{}), inherited_};
|
|
108
|
+
BitSet roots = Roots(store_, changes, attribute);
|
|
109
|
+
// Ancestors intern first, so most roots are reached from one above them.
|
|
110
|
+
const BitSet start = roots;
|
|
111
|
+
start.ForEachRun([&](std::size_t begin, std::size_t end) {
|
|
112
|
+
for (std::size_t path = begin; path < end; ++path) {
|
|
113
|
+
if (roots.Test(path)) {
|
|
114
|
+
resolver.Subtree(static_cast<PathId>(path), roots);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
// Its own writes are to resolved columns, which no resolve reads.
|
|
122
|
+
resolved_ = store_.Version();
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
} // namespace ernie
|