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.

Files changed (298) hide show
  1. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/CMakeLists.txt +1 -1
  2. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/PKG-INFO +1 -1
  3. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/benchmarks/scene/extents.cpp +0 -1
  4. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/benchmarks/scene/storage.cpp +1 -1
  5. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/scene/CMakeLists.txt +0 -2
  6. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/scene/animation.cpp +3 -3
  7. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/scene/edit_history.cpp +13 -25
  8. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/scene/edit_history.h +6 -2
  9. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/scene/extent_cache.cpp +13 -20
  10. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/scene/extent_cache.h +1 -0
  11. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/scene/holder_index.cpp +21 -32
  12. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/scene/holder_index.h +0 -2
  13. ernie_renderer-0.2.0.dev52/ernie/scene/inherit.cpp +125 -0
  14. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/scene/json.cpp +62 -78
  15. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/scene/json.h +10 -11
  16. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/scene/json_value.h +3 -0
  17. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/scene/reference.cpp +74 -164
  18. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/scene/reference.h +3 -15
  19. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/scene/scene.cpp +23 -21
  20. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/scene/scene.h +6 -19
  21. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/scene/schema.cpp +11 -20
  22. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/scene/schema.h +29 -3
  23. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/scene/schemas/camera.h +3 -5
  24. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/scene/schemas/geom.h +2 -2
  25. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/scene/schemas/instancer.cpp +7 -16
  26. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/scene/schemas/lux.cpp +23 -12
  27. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/scene/schemas/lux.h +90 -18
  28. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/scene/schemas/mesh.cpp +2 -4
  29. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/scene/schemas/planet.cpp +5 -11
  30. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/scene/schemas/planet.h +5 -9
  31. ernie_renderer-0.2.0.dev52/ernie/scene/schemas/registry.cpp +104 -0
  32. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/scene/schemas/vol.cpp +3 -5
  33. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/scene/storage.cpp +29 -28
  34. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/scene/storage.h +52 -86
  35. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/scene/time_samples.cpp +8 -8
  36. ernie_renderer-0.2.0.dev52/ernie/scene/usd_plugin.cpp +142 -0
  37. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/scene/validate.cpp +2 -1
  38. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/scene/view.cpp +1 -1
  39. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/scene/view.h +6 -0
  40. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/util/tensor.cpp +11 -2
  41. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/util/tensor.h +7 -3
  42. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/util/text.h +28 -0
  43. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/CMakeLists.txt +0 -2
  44. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/common.h +37 -4
  45. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/scene/edit_history_test.cpp +0 -1
  46. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/scene/inherit_test.cpp +55 -13
  47. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/scene/instancer_test.cpp +2 -5
  48. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/scene/json_test.cpp +2 -2
  49. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/scene/lux_test.cpp +0 -1
  50. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/scene/mesh_test.cpp +6 -6
  51. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/scene/planet_test.cpp +3 -6
  52. ernie_renderer-0.2.0.dev52/tests/scene/reference_test.cpp +76 -0
  53. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/scene/scene_test.cpp +74 -1
  54. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/scene/schema_test.cpp +29 -33
  55. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/scene/storage_test.cpp +13 -14
  56. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/scene/xform_test.cpp +3 -3
  57. ernie_renderer-0.2.0.dev47/ernie/scene/inherit.cpp +0 -120
  58. ernie_renderer-0.2.0.dev47/ernie/scene/schemas/collection.cpp +0 -10
  59. ernie_renderer-0.2.0.dev47/ernie/scene/schemas/laser.cpp +0 -26
  60. ernie_renderer-0.2.0.dev47/ernie/scene/schemas/laser.h +0 -92
  61. ernie_renderer-0.2.0.dev47/ernie/scene/schemas/registry.cpp +0 -89
  62. ernie_renderer-0.2.0.dev47/ernie/scene/usd_plugin.cpp +0 -219
  63. ernie_renderer-0.2.0.dev47/tests/scene/api_test.cpp +0 -91
  64. ernie_renderer-0.2.0.dev47/tests/scene/holder_index_test.cpp +0 -63
  65. ernie_renderer-0.2.0.dev47/tests/scene/reference_test.cpp +0 -80
  66. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/.clang-format +0 -0
  67. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/.clang-tidy +0 -0
  68. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/.dockerignore +0 -0
  69. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/.gersemirc +0 -0
  70. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/.gitattributes +0 -0
  71. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/.github/scripts/coverage_badge.py +0 -0
  72. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/.github/scripts/install-lavapipe-windows.sh +0 -0
  73. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/.github/workflows/ci.yml +0 -0
  74. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/.gitignore +0 -0
  75. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/.pre-commit-config.yaml +0 -0
  76. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/CMakePresets.json +0 -0
  77. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/Dockerfile +0 -0
  78. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/LICENSE +0 -0
  79. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/README.md +0 -0
  80. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/benchmarks/CMakeLists.txt +0 -0
  81. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/benchmarks/bench.h +0 -0
  82. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/benchmarks/main.cpp +0 -0
  83. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/cmake/ErnieConfig.cmake.in +0 -0
  84. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/cmake/ErnieFetch.cmake +0 -0
  85. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/cmake/ErnieInstall.cmake +0 -0
  86. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/cmake/ErniePackaging.cmake +0 -0
  87. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/cmake/ErnieTesting.cmake +0 -0
  88. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/cmake/ernie.pc.in +0 -0
  89. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/cmake/third_party/bc7enc.cmake +0 -0
  90. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/cmake/third_party/dlpack.cmake +0 -0
  91. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/cmake/third_party/glm.cmake +0 -0
  92. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/cmake/third_party/googletest.cmake +0 -0
  93. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/cmake/third_party/json.cmake +0 -0
  94. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/cmake/third_party/nanobind.cmake +0 -0
  95. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/cmake/third_party/openexr.cmake +0 -0
  96. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/cmake/third_party/stb.cmake +0 -0
  97. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/cmake/third_party/tracy.cmake +0 -0
  98. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/cmake/third_party/volk.cmake +0 -0
  99. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/cmake/third_party/vulkan_headers.cmake +0 -0
  100. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/docs/README.md +0 -0
  101. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/docs/index.md +0 -0
  102. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/docs/requirements.txt +0 -0
  103. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/CMakeLists.txt +0 -0
  104. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/app/CMakeLists.txt +0 -0
  105. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/app/main.cpp +0 -0
  106. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/device/CMakeLists.txt +0 -0
  107. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/device/vulkan_devices.cpp +0 -0
  108. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/device/vulkan_devices.h +0 -0
  109. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/geometry/CMakeLists.txt +0 -0
  110. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/geometry/bounds.h +0 -0
  111. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/graph/CMakeLists.txt +0 -0
  112. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/io/CMakeLists.txt +0 -0
  113. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/io/ies.cpp +0 -0
  114. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/io/ies.h +0 -0
  115. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/io/image.cpp +0 -0
  116. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/io/image.h +0 -0
  117. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/io/nanovdb.cpp +0 -0
  118. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/io/nanovdb.h +0 -0
  119. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/io/raster.cpp +0 -0
  120. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/io/raster.h +0 -0
  121. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/io/texture.cpp +0 -0
  122. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/io/texture.h +0 -0
  123. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/physics/CMakeLists.txt +0 -0
  124. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/physics/astronomy.cpp +0 -0
  125. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/physics/astronomy.h +0 -0
  126. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/physics/atmosphere.cpp +0 -0
  127. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/physics/atmosphere.h +0 -0
  128. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/physics/cloud.cpp +0 -0
  129. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/physics/cloud.h +0 -0
  130. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/physics/constants.h +0 -0
  131. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/physics/reflectance_library.cpp +0 -0
  132. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/physics/reflectance_library.h +0 -0
  133. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/physics/reflectance_table.h +0 -0
  134. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/physics/regolith.cpp +0 -0
  135. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/physics/regolith.h +0 -0
  136. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/physics/scattering.cpp +0 -0
  137. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/physics/scattering.h +0 -0
  138. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/physics/solar.cpp +0 -0
  139. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/physics/solar.h +0 -0
  140. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/physics/solar_table.h +0 -0
  141. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/physics/spectrum.cpp +0 -0
  142. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/physics/spectrum.h +0 -0
  143. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/python/CMakeLists.txt +0 -0
  144. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/python/ernie/__init__.py +0 -0
  145. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/python/module.cpp +0 -0
  146. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/render/CMakeLists.txt +0 -0
  147. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/scene/convert.h +0 -0
  148. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/scene/path.cpp +0 -0
  149. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/scene/path.h +0 -0
  150. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/scene/schemas/camera.cpp +0 -0
  151. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/scene/schemas/collection.h +0 -0
  152. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/scene/schemas/geom.cpp +0 -0
  153. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/scene/schemas/instancer.h +0 -0
  154. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/scene/schemas/mesh.h +0 -0
  155. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/scene/schemas/render.cpp +0 -0
  156. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/scene/schemas/render.h +0 -0
  157. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/scene/schemas/shade.cpp +0 -0
  158. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/scene/schemas/shade.h +0 -0
  159. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/scene/schemas/vol.h +0 -0
  160. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/scene/time_samples.h +0 -0
  161. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/scene/tokens.h +0 -0
  162. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/scene/value.h +0 -0
  163. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/scene/xform.cpp +0 -0
  164. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/scene/xform.h +0 -0
  165. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/util/CMakeLists.txt +0 -0
  166. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/util/algorithm.h +0 -0
  167. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/util/bytes.h +0 -0
  168. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/util/disk_cache.cpp +0 -0
  169. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/util/disk_cache.h +0 -0
  170. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/util/file.cpp +0 -0
  171. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/util/file.h +0 -0
  172. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/util/glm.h +0 -0
  173. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/util/hash_index.h +0 -0
  174. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/util/linear_algebra.h +0 -0
  175. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/util/log.cpp +0 -0
  176. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/util/log.h +0 -0
  177. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/util/math.h +0 -0
  178. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/util/noise.cpp +0 -0
  179. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/util/noise.h +0 -0
  180. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/util/numbers.h +0 -0
  181. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/util/parallel.h +0 -0
  182. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/util/profiler.cpp +0 -0
  183. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/util/profiler.h +0 -0
  184. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/util/random.h +0 -0
  185. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/util/version.cpp +0 -0
  186. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/util/version.h +0 -0
  187. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/ernie/util/worker_pool.h +0 -0
  188. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/mkdocs.yml +0 -0
  189. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/pyproject.toml +0 -0
  190. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/consumer/CMakeLists.txt +0 -0
  191. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/consumer/main.cpp +0 -0
  192. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/device/vulkan_devices_test.cpp +0 -0
  193. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/fixtures/exr/README.md +0 -0
  194. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/fixtures/exr/make_exr.py +0 -0
  195. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/fixtures/exr/rgb_float_zip.exr +0 -0
  196. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/fixtures/exr/rgba_half_window.exr +0 -0
  197. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/fixtures/exr/y_half_zips.exr +0 -0
  198. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/fixtures/ies/README.md +0 -0
  199. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/fixtures/ies/downlight_quadrant.ies +0 -0
  200. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/fixtures/ies/floodlight_type_b.ies +0 -0
  201. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/fixtures/ies/lamp.tilt +0 -0
  202. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/fixtures/images/grey16.png +0 -0
  203. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/fixtures/ktx2/README.md +0 -0
  204. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/fixtures/ktx2/quadrants_etc1s.ktx2 +0 -0
  205. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/fixtures/ktx2/quadrants_uastc_zstd.ktx2 +0 -0
  206. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/fixtures/ktx2/tilted_normal_etc1s.ktx2 +0 -0
  207. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/fixtures/ktx2/tilted_normal_uastc.ktx2 +0 -0
  208. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/fixtures/scenes/README.md +0 -0
  209. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/fixtures/scenes/invalid/problems.expected +0 -0
  210. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/fixtures/scenes/invalid/problems.json +0 -0
  211. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/fixtures/scenes/rover.json +0 -0
  212. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/fixtures/scenes/rover.saved.json +0 -0
  213. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/fixtures/tiff/README.md +0 -0
  214. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/fixtures/tiff/float_deflate_predictor3.tif +0 -0
  215. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/fixtures/tiff/float_raw.tif +0 -0
  216. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/fixtures/tiff/int16_bigtiff_bigendian.tif +0 -0
  217. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/fixtures/tiff/rgb_lzw_predictor2.tif +0 -0
  218. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/fixtures/tiff/rgb_planar_lzw.tif +0 -0
  219. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/fixtures/tiff/rgb_planar_raw.tif +0 -0
  220. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/fixtures/tiff/rgb_tiled_deflate.tif +0 -0
  221. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/fixtures/volumes/cube.nvdb +0 -0
  222. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/fixtures/volumes/make_nvdb.py +0 -0
  223. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/geometry/bounds_test.cpp +0 -0
  224. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/io/ies_test.cpp +0 -0
  225. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/io/image_test.cpp +0 -0
  226. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/io/nanovdb_test.cpp +0 -0
  227. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/io/raster_test.cpp +0 -0
  228. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/io/texture_test.cpp +0 -0
  229. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/physics/astronomy_test.cpp +0 -0
  230. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/physics/atmosphere_test.cpp +0 -0
  231. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/physics/cloud_test.cpp +0 -0
  232. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/physics/reflectance_library_test.cpp +0 -0
  233. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/physics/regolith_test.cpp +0 -0
  234. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/physics/scattering_test.cpp +0 -0
  235. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/physics/solar_test.cpp +0 -0
  236. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/physics/spectrum_test.cpp +0 -0
  237. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/python/test_package.py +0 -0
  238. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/python/test_scene_schema.py +0 -0
  239. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/scene/extent_cache_test.cpp +0 -0
  240. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/scene/path_test.cpp +0 -0
  241. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/scene/render_test.cpp +0 -0
  242. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/scene/shade_test.cpp +0 -0
  243. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/scene/time_samples_test.cpp +0 -0
  244. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/scene/vol_test.cpp +0 -0
  245. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/util/algorithm_test.cpp +0 -0
  246. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/util/bytes_test.cpp +0 -0
  247. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/util/disk_cache_test.cpp +0 -0
  248. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/util/file_test.cpp +0 -0
  249. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/util/hash_index_test.cpp +0 -0
  250. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/util/linear_algebra_test.cpp +0 -0
  251. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/util/log_test.cpp +0 -0
  252. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/util/math_test.cpp +0 -0
  253. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/util/noise_test.cpp +0 -0
  254. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/util/parallel_test.cpp +0 -0
  255. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/util/profiler_test.cpp +0 -0
  256. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/util/random_test.cpp +0 -0
  257. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/util/tensor_test.cpp +0 -0
  258. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/util/text_test.cpp +0 -0
  259. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/util/version_test.cpp +0 -0
  260. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/tests/util/worker_pool_test.cpp +0 -0
  261. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/third_party/CMakeLists.txt +0 -0
  262. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/third_party/basisu/LICENSE +0 -0
  263. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/third_party/basisu/LICENSES/Apache-2.0.txt +0 -0
  264. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/third_party/basisu/LICENSES/BSD-3-clause.txt +0 -0
  265. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/third_party/basisu/LICENSES/MIT.txt +0 -0
  266. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/third_party/basisu/NOTICE +0 -0
  267. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/third_party/basisu/README.md +0 -0
  268. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/third_party/basisu/transcoder/basisu.h +0 -0
  269. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/third_party/basisu/transcoder/basisu_astc_cfgs.inl +0 -0
  270. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/third_party/basisu/transcoder/basisu_astc_hdr_core.h +0 -0
  271. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/third_party/basisu/transcoder/basisu_astc_helpers.h +0 -0
  272. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/third_party/basisu/transcoder/basisu_containers.h +0 -0
  273. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/third_party/basisu/transcoder/basisu_containers_impl.h +0 -0
  274. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/third_party/basisu/transcoder/basisu_dds_transcoder.inl +0 -0
  275. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/third_party/basisu/transcoder/basisu_etc1_mods.inl +0 -0
  276. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/third_party/basisu/transcoder/basisu_file_headers.h +0 -0
  277. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/third_party/basisu/transcoder/basisu_idct.h +0 -0
  278. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/third_party/basisu/transcoder/basisu_transcoder.cpp +0 -0
  279. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/third_party/basisu/transcoder/basisu_transcoder.h +0 -0
  280. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/third_party/basisu/transcoder/basisu_transcoder_internal.h +0 -0
  281. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/third_party/basisu/transcoder/basisu_transcoder_tables_astc.inc +0 -0
  282. {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
  283. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/third_party/basisu/transcoder/basisu_transcoder_tables_atc_55.inc +0 -0
  284. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/third_party/basisu/transcoder/basisu_transcoder_tables_atc_56.inc +0 -0
  285. {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
  286. {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
  287. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/third_party/basisu/transcoder/basisu_transcoder_tables_dxt1_5.inc +0 -0
  288. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/third_party/basisu/transcoder/basisu_transcoder_tables_dxt1_6.inc +0 -0
  289. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/third_party/basisu/transcoder/basisu_transcoder_tables_pvrtc2_45.inc +0 -0
  290. {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
  291. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/third_party/basisu/transcoder/basisu_transcoder_uastc.h +0 -0
  292. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/third_party/basisu/transcoder/basisu_xbc7_decoder.h +0 -0
  293. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/third_party/basisu/transcoder/basisu_xbc7_decoder.inl +0 -0
  294. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/third_party/basisu/zstd/LICENSE +0 -0
  295. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/third_party/basisu/zstd/zstd.h +0 -0
  296. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/third_party/basisu/zstd/zstd_errors.h +0 -0
  297. {ernie_renderer-0.2.0.dev47 → ernie_renderer-0.2.0.dev52}/third_party/nanovdb/LICENSE +0 -0
  298. {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 ".dev47" CACHE STRING "Pre-release suffix of Ernie's version")
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.dev47
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
@@ -6,7 +6,6 @@
6
6
 
7
7
  #include <memory>
8
8
  #include <string>
9
- #include <vector>
10
9
 
11
10
  namespace ernie::bench {
12
11
  namespace {
@@ -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::Of<glm::dmat4>(transform, glm::dmat4(1.0))});
28
+ std::vector<ColumnLayout>{ColumnLayout::Make<glm::dmat4>(transform, glm::dmat4(1.0))});
29
29
  prims.clear();
30
30
  }
31
31
 
@@ -19,10 +19,8 @@ add_library(
19
19
  view.cpp
20
20
  xform.cpp
21
21
  schemas/camera.cpp
22
- schemas/collection.cpp
23
22
  schemas/geom.cpp
24
23
  schemas/instancer.cpp
25
- schemas/laser.cpp
26
24
  schemas/lux.cpp
27
25
  schemas/mesh.cpp
28
26
  schemas/planet.cpp
@@ -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
- const auto animated = animated_.find(prim.slot);
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, {std::move(before), Capture(scene, prim, 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
- if (last.structural || !last.open || last.path != path ||
29
- last.attributes.size() != step.attributes.size()) {
30
- return false;
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].second.second = std::move(step.attributes[i].second.second);
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
- Step step{.path = path};
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
- if (!scene.HasApi(prim, api)) {
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 auto& [name, states] = step.attributes[forward ? i : step.attributes.size() - 1 - i];
194
- Apply(scene, *prim, name, forward ? states.second : states.first);
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
- std::string label = step.path.String();
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
- /// Attribute steps: each attribute's state before and after.
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 (tracked(rows.bucket)) {
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 (tracked(values.bucket)) {
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 (tracked(bucket) && store.GetBucket(bucket).version > cursor_) {
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 >= buckets_.size() || buckets_[bucket].compute == nullptr ||
48
- store.GetBucket(bucket).version > cursor_ || row >= buckets_[bucket].boxes.size()) {
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::Added) {
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
- 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
- }
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 < std::min(range.end, bucket.Rows()); ++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