ernie-renderer 0.1.0.dev266__tar.gz → 0.1.0.dev309__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 (588) hide show
  1. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/.github/workflows/ci.yml +30 -7
  2. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/CMakeLists.txt +7 -1
  3. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/CONTRIBUTING.md +1 -1
  4. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/PKG-INFO +16 -5
  5. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/README.md +15 -4
  6. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/cmake/ErniePackaging.cmake +6 -0
  7. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/cmake/third_party/curl.cmake +3 -0
  8. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/demos/CMakeLists.txt +15 -7
  9. ernie_renderer-0.1.0.dev266/demos/atmosphere/earth.cpp → ernie_renderer-0.1.0.dev309/demos/atmosphere/demo_atmosphere_earth.cpp +2 -4
  10. ernie_renderer-0.1.0.dev266/demos/atmosphere/earth.py → ernie_renderer-0.1.0.dev309/demos/atmosphere/demo_atmosphere_earth.py +2 -4
  11. ernie_renderer-0.1.0.dev309/demos/atmosphere/demo_atmosphere_eclipse.cpp +294 -0
  12. ernie_renderer-0.1.0.dev309/demos/atmosphere/demo_atmosphere_eclipse.py +273 -0
  13. ernie_renderer-0.1.0.dev309/demos/atmosphere/demo_atmosphere_lunar_eclipse.cpp +199 -0
  14. ernie_renderer-0.1.0.dev309/demos/atmosphere/demo_atmosphere_lunar_eclipse.py +182 -0
  15. ernie_renderer-0.1.0.dev266/demos/atmosphere/mars.cpp → ernie_renderer-0.1.0.dev309/demos/atmosphere/demo_atmosphere_mars.cpp +2 -4
  16. ernie_renderer-0.1.0.dev266/demos/atmosphere/mars.py → ernie_renderer-0.1.0.dev309/demos/atmosphere/demo_atmosphere_mars.py +2 -4
  17. ernie_renderer-0.1.0.dev309/demos/atmosphere/demo_atmosphere_refraction.cpp +266 -0
  18. ernie_renderer-0.1.0.dev309/demos/atmosphere/demo_atmosphere_refraction.py +260 -0
  19. ernie_renderer-0.1.0.dev266/demos/batched/batch_camera.cpp → ernie_renderer-0.1.0.dev309/demos/batched/demo_batched_cameras.cpp +4 -5
  20. ernie_renderer-0.1.0.dev266/demos/batched/batch_camera.py → ernie_renderer-0.1.0.dev309/demos/batched/demo_batched_cameras.py +3 -4
  21. ernie_renderer-0.1.0.dev266/demos/cameras/floating_origin.cpp → ernie_renderer-0.1.0.dev309/demos/cameras/demo_cameras_floating_origin.cpp +101 -26
  22. ernie_renderer-0.1.0.dev266/demos/cameras/floating_origin.py → ernie_renderer-0.1.0.dev309/demos/cameras/demo_cameras_floating_origin.py +73 -25
  23. ernie_renderer-0.1.0.dev266/demos/cameras/lroc.cpp → ernie_renderer-0.1.0.dev309/demos/cameras/demo_cameras_lroc.cpp +34 -20
  24. ernie_renderer-0.1.0.dev266/demos/cameras/lroc.py → ernie_renderer-0.1.0.dev309/demos/cameras/demo_cameras_lroc.py +32 -22
  25. ernie_renderer-0.1.0.dev309/demos/cameras/demo_cameras_lroc_nac.cpp +587 -0
  26. ernie_renderer-0.1.0.dev309/demos/cameras/demo_cameras_lroc_nac.py +583 -0
  27. ernie_renderer-0.1.0.dev309/demos/cameras/demo_cameras_mars2020.cpp +905 -0
  28. ernie_renderer-0.1.0.dev309/demos/cameras/demo_cameras_mars2020.py +873 -0
  29. ernie_renderer-0.1.0.dev309/demos/cameras/demo_cameras_nir_swir.cpp +262 -0
  30. ernie_renderer-0.1.0.dev309/demos/cameras/demo_cameras_nir_swir.py +245 -0
  31. ernie_renderer-0.1.0.dev309/demos/interop/demo_interop_laser_pattern.py +196 -0
  32. ernie_renderer-0.1.0.dev309/demos/lasers/demo_lasers_patterns.cpp +293 -0
  33. ernie_renderer-0.1.0.dev309/demos/lasers/demo_lasers_patterns.py +250 -0
  34. ernie_renderer-0.1.0.dev309/demos/lasers/demo_lasers_pulsed.cpp +227 -0
  35. ernie_renderer-0.1.0.dev309/demos/lasers/demo_lasers_pulsed.py +212 -0
  36. ernie_renderer-0.1.0.dev309/demos/lasers/demo_lasers_structured_light.cpp +234 -0
  37. ernie_renderer-0.1.0.dev309/demos/lasers/demo_lasers_structured_light.py +206 -0
  38. ernie_renderer-0.1.0.dev309/demos/lasers/demo_lasers_wavelengths.cpp +287 -0
  39. ernie_renderer-0.1.0.dev309/demos/lasers/demo_lasers_wavelengths.py +251 -0
  40. ernie_renderer-0.1.0.dev266/demos/lighting/illuminants.cpp → ernie_renderer-0.1.0.dev309/demos/lighting/demo_lighting_illuminants.cpp +2 -3
  41. ernie_renderer-0.1.0.dev266/demos/lighting/illuminants.py → ernie_renderer-0.1.0.dev309/demos/lighting/demo_lighting_illuminants.py +2 -3
  42. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/docs/api/python/cameras.md +4 -0
  43. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/docs/getting-started/demos.md +10 -10
  44. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/app/cli.cpp +2 -1
  45. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/app/cli.h +1 -1
  46. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/app/create.cpp +1 -0
  47. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/app/demo.cpp +19 -7
  48. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/app/demo.h +7 -5
  49. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/app/prim_icons.cpp +1 -1
  50. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/app/prim_schemas.cpp +41 -1
  51. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/app/session.cpp +28 -0
  52. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/app/session.h +11 -0
  53. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/app/stage_panel.cpp +1 -1
  54. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/app/viewer.cpp +71 -9
  55. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/app/viewer.h +11 -0
  56. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/device/buffer.cpp +26 -9
  57. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/device/buffer.h +3 -0
  58. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/device/pipeline.cpp +1 -1
  59. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/device/pipeline.h +3 -1
  60. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/device/vulkan_context.cpp +31 -0
  61. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/device/vulkan_context.h +17 -0
  62. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/kernel/raster/atmosphere.slang +219 -14
  63. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/kernel/raster/atmosphere_luts.slang +123 -1
  64. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/kernel/raster/cull.slang +11 -1
  65. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/kernel/raster/shading.slang +401 -71
  66. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/python/CMakeLists.txt +1 -1
  67. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/python/app.cpp +32 -0
  68. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/python/bindings.h +12 -0
  69. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/python/ernie/__init__.py +6 -0
  70. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/python/ernie/__main__.py +1 -1
  71. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/python/ernie/demo.py +16 -78
  72. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/python/ernie/demos/__init__.py +21 -11
  73. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/python/render.cpp +48 -34
  74. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/python/scene.cpp +119 -38
  75. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/python/stub_schema.py +2 -0
  76. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/raster/atmosphere_luts.cpp +66 -16
  77. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/raster/atmosphere_luts.h +24 -5
  78. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/raster/delegate.cpp +57 -3
  79. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/raster/delegate.h +8 -0
  80. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/raster/mesh_drawable.cpp +46 -24
  81. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/raster/mesh_drawable.h +8 -3
  82. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/raster/renderer.cpp +393 -53
  83. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/raster/renderer.h +78 -3
  84. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/raster/shadow_cascades.h +3 -0
  85. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/scene/dem.cpp +208 -32
  86. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/scene/dem.h +65 -11
  87. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/scene/light_pattern.cpp +54 -10
  88. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/scene/light_pattern.h +15 -4
  89. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/scene/light_schemas.h +28 -0
  90. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/scene/material_schemas.h +11 -0
  91. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/scene/terrain_schemas.cpp +8 -1
  92. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/scene/terrain_schemas.h +32 -1
  93. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/scene/tokens.h +50 -0
  94. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/session/delegate.h +5 -0
  95. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/session/frame_params.cpp +77 -0
  96. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/session/frame_params.h +56 -0
  97. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/session/resolve.cpp +173 -9
  98. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/session/resolve.h +31 -1
  99. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/test/CMakeLists.txt +60 -10
  100. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/test/app_prim_schemas_test.cpp +28 -0
  101. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/test/app_session_test.cpp +44 -0
  102. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/test/app_viewer_gpu_test.cpp +20 -0
  103. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/test/device_cuda_interop_test.cpp +32 -0
  104. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/test/fixtures/isd/README.md +4 -0
  105. ernie_renderer-0.1.0.dev309/ernie/test/fixtures/isd/lroNacM1282557272RE.json +1265 -0
  106. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/test/python/test_cameras.py +90 -0
  107. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/test/python/test_demos.py +73 -85
  108. ernie_renderer-0.1.0.dev309/ernie/test/python/test_laser_pattern_array.py +124 -0
  109. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/test/python/test_schema_terrain.py +13 -0
  110. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/test/raster_atmosphere_gpu_test.cpp +420 -0
  111. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/test/raster_culling_gpu_test.cpp +4 -0
  112. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/test/raster_lights_gpu_test.cpp +184 -0
  113. ernie_renderer-0.1.0.dev309/ernie/test/scene_dem_test.cpp +234 -0
  114. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/test/scene_terrain_schemas_test.cpp +8 -1
  115. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/test/session_frame_params_test.cpp +59 -0
  116. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/test/session_lights_test.cpp +14 -0
  117. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/test/session_resolve_test.cpp +46 -0
  118. ernie_renderer-0.1.0.dev309/ernie/test/util_reflectance_library_test.cpp +52 -0
  119. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/util/CMakeLists.txt +1 -0
  120. ernie_renderer-0.1.0.dev309/ernie/util/reflectance_library.cpp +51 -0
  121. ernie_renderer-0.1.0.dev309/ernie/util/reflectance_library.h +49 -0
  122. ernie_renderer-0.1.0.dev309/ernie/util/reflectance_table.h +5596 -0
  123. ernie_renderer-0.1.0.dev309/tools/reflectance_library.py +249 -0
  124. ernie_renderer-0.1.0.dev266/ernie/test/scene_dem_test.cpp +0 -128
  125. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/.clang-format +0 -0
  126. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/.clang-tidy +0 -0
  127. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/.cmake-format.yaml +0 -0
  128. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/.gitattributes +0 -0
  129. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  130. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  131. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/.github/dependabot.yml +0 -0
  132. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/.github/pull_request_template.md +0 -0
  133. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/.github/scripts/ci_metrics.py +0 -0
  134. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/.github/scripts/debug-windows.sh +0 -0
  135. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/.github/scripts/install-lavapipe-windows.sh +0 -0
  136. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/.github/workflows/ci-metrics.yml +0 -0
  137. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/.gitignore +0 -0
  138. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/.pre-commit-config.yaml +0 -0
  139. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/CITATION.cff +0 -0
  140. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/CMakePresets.json +0 -0
  141. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/LICENSE +0 -0
  142. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/cmake/EmbedShaders.cmake +0 -0
  143. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/cmake/ErnieCPackOptions.cmake +0 -0
  144. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/cmake/ErnieConfig.cmake.in +0 -0
  145. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/cmake/ErnieInstall.cmake +0 -0
  146. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/cmake/ErnieLicenses.cmake +0 -0
  147. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/cmake/ErnieTesting.cmake +0 -0
  148. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/cmake/cppcheck/ernie.cfg +0 -0
  149. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/cmake/ernie_exports.map +0 -0
  150. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/cmake/third_party/dear_imgui/CMakeLists.txt +0 -0
  151. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/cmake/third_party/dear_imgui.cmake +0 -0
  152. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/cmake/third_party/dlpack.cmake +0 -0
  153. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/cmake/third_party/embed_file.cmake +0 -0
  154. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/cmake/third_party/glfw.cmake +0 -0
  155. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/cmake/third_party/glm.cmake +0 -0
  156. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/cmake/third_party/googletest.cmake +0 -0
  157. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/cmake/third_party/gui_fonts.cmake +0 -0
  158. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/cmake/third_party/imguizmo.cmake +0 -0
  159. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/cmake/third_party/implot.cmake +0 -0
  160. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/cmake/third_party/json.cmake +0 -0
  161. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/cmake/third_party/meshoptimizer.cmake +0 -0
  162. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/cmake/third_party/moltenvk.cmake +0 -0
  163. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/cmake/third_party/nanobind.cmake +0 -0
  164. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/cmake/third_party/openexr.cmake +0 -0
  165. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/cmake/third_party/slang.cmake +0 -0
  166. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/cmake/third_party/stb.cmake +0 -0
  167. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/cmake/third_party/tracy.cmake +0 -0
  168. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/cmake/third_party/vma/vma.cpp +0 -0
  169. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/cmake/third_party/vma.cmake +0 -0
  170. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/cmake/third_party/volk.cmake +0 -0
  171. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/cmake/third_party/vulkan_headers.cmake +0 -0
  172. /ernie_renderer-0.1.0.dev266/demos/interop/zero_copy_image.py → /ernie_renderer-0.1.0.dev309/demos/interop/demo_interop_zero_copy_image.py +0 -0
  173. /ernie_renderer-0.1.0.dev266/demos/lighting/cornell_box.cpp → /ernie_renderer-0.1.0.dev309/demos/lighting/demo_lighting_cornell_box.cpp +0 -0
  174. /ernie_renderer-0.1.0.dev266/demos/lighting/cornell_box.py → /ernie_renderer-0.1.0.dev309/demos/lighting/demo_lighting_cornell_box.py +0 -0
  175. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/demos/main.cpp +0 -0
  176. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/demos/util.cpp +0 -0
  177. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/demos/util.h +0 -0
  178. /ernie_renderer-0.1.0.dev266/demos/viewer/custom_panel.cpp → /ernie_renderer-0.1.0.dev309/demos/viewer/demo_viewer_custom_panel.cpp +0 -0
  179. /ernie_renderer-0.1.0.dev266/demos/viewer/custom_panel.py → /ernie_renderer-0.1.0.dev309/demos/viewer/demo_viewer_custom_panel.py +0 -0
  180. /ernie_renderer-0.1.0.dev266/demos/viewer/log_array.cpp → /ernie_renderer-0.1.0.dev309/demos/viewer/demo_viewer_log_array.cpp +0 -0
  181. /ernie_renderer-0.1.0.dev266/demos/viewer/log_array.py → /ernie_renderer-0.1.0.dev309/demos/viewer/demo_viewer_log_array.py +0 -0
  182. /ernie_renderer-0.1.0.dev266/demos/viewer/log_image.cpp → /ernie_renderer-0.1.0.dev309/demos/viewer/demo_viewer_log_image.cpp +0 -0
  183. /ernie_renderer-0.1.0.dev266/demos/viewer/log_image.py → /ernie_renderer-0.1.0.dev309/demos/viewer/demo_viewer_log_image.py +0 -0
  184. /ernie_renderer-0.1.0.dev266/demos/viewer/log_scalar.cpp → /ernie_renderer-0.1.0.dev309/demos/viewer/demo_viewer_log_scalar.cpp +0 -0
  185. /ernie_renderer-0.1.0.dev266/demos/viewer/log_scalar.py → /ernie_renderer-0.1.0.dev309/demos/viewer/demo_viewer_log_scalar.py +0 -0
  186. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/docs/Makefile +0 -0
  187. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/docs/README.md +0 -0
  188. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/docs/api/cpp.md +0 -0
  189. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/docs/api/python/app.md +0 -0
  190. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/docs/api/python/astronomy.md +0 -0
  191. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/docs/api/python/batch.md +0 -0
  192. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/docs/api/python/demo.md +0 -0
  193. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/docs/api/python/rendering.md +0 -0
  194. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/docs/api/python/scene.md +0 -0
  195. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/docs/api/python/schemas.md +0 -0
  196. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/docs/api/python/tokens.md +0 -0
  197. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/docs/concepts/cameras.md +0 -0
  198. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/docs/concepts/lighting.md +0 -0
  199. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/docs/concepts/materials.md +0 -0
  200. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/docs/concepts/scene.md +0 -0
  201. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/docs/concepts/sensor-filters.md +0 -0
  202. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/docs/concepts/shadows.md +0 -0
  203. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/docs/concepts/spectral.md +0 -0
  204. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/docs/concepts/star-fields.md +0 -0
  205. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/docs/concepts/terrain.md +0 -0
  206. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/docs/concepts/transforms.md +0 -0
  207. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/docs/css/extra.css +0 -0
  208. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/docs/extending/custom-aovs.md +0 -0
  209. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/docs/extending/custom-brdfs.md +0 -0
  210. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/docs/extending/custom-lenses.md +0 -0
  211. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/docs/extending/custom-panels.md +0 -0
  212. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/docs/extending/custom-render-delegates.md +0 -0
  213. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/docs/extending/custom-sensor-filters.md +0 -0
  214. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/docs/extending/custom-spectra.md +0 -0
  215. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/docs/extending/custom-star-catalogs.md +0 -0
  216. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/docs/extending/debug-draw.md +0 -0
  217. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/docs/extending/frame-callbacks.md +0 -0
  218. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/docs/extending/index.md +0 -0
  219. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/docs/getting-started/installation.md +0 -0
  220. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/docs/getting-started/quickstart.md +0 -0
  221. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/docs/getting-started/viewer.md +0 -0
  222. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/docs/guides/batched-rendering.md +0 -0
  223. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/docs/guides/gpu-interop.md +0 -0
  224. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/docs/guides/scenes.md +0 -0
  225. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/docs/index.md +0 -0
  226. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/docs/js/sidebar.js +0 -0
  227. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/docs/requirements.txt +0 -0
  228. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/CMakeLists.txt +0 -0
  229. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/app/CMakeLists.txt +0 -0
  230. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/app/app.h +0 -0
  231. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/app/builtin_panels.h +0 -0
  232. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/app/camera_panel.cpp +0 -0
  233. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/app/create.h +0 -0
  234. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/app/file_dialog.cpp +0 -0
  235. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/app/file_dialog.h +0 -0
  236. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/app/icons.h +0 -0
  237. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/app/log_panel.cpp +0 -0
  238. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/app/logs.cpp +0 -0
  239. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/app/logs.h +0 -0
  240. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/app/main.cpp +0 -0
  241. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/app/panel.cpp +0 -0
  242. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/app/panel.h +0 -0
  243. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/app/prim_icons.h +0 -0
  244. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/app/prim_schemas.h +0 -0
  245. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/app/profiler_panel.cpp +0 -0
  246. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/app/properties_panel.cpp +0 -0
  247. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/app/property_fields.cpp +0 -0
  248. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/app/property_fields.h +0 -0
  249. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/app/settings_panel.cpp +0 -0
  250. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/app/theme.cpp +0 -0
  251. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/app/theme.h +0 -0
  252. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/device/CMakeLists.txt +0 -0
  253. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/device/compute_interop.cpp +0 -0
  254. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/device/compute_interop.h +0 -0
  255. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/device/cuda_interop.cpp +0 -0
  256. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/device/cuda_interop.h +0 -0
  257. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/device/frame_uploads.cpp +0 -0
  258. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/device/frame_uploads.h +0 -0
  259. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/device/gpu_profile.h +0 -0
  260. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/device/gpu_timer.cpp +0 -0
  261. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/device/gpu_timer.h +0 -0
  262. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/device/image.cpp +0 -0
  263. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/device/image.h +0 -0
  264. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/device/offscreen_target.cpp +0 -0
  265. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/device/offscreen_target.h +0 -0
  266. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/device/shader_compiler.cpp +0 -0
  267. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/device/shader_compiler.h +0 -0
  268. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/device/swapchain.cpp +0 -0
  269. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/device/swapchain.h +0 -0
  270. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/geometry/CMakeLists.txt +0 -0
  271. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/geometry/cube_sphere_lod.cpp +0 -0
  272. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/geometry/cube_sphere_lod.h +0 -0
  273. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/geometry/frustum.cpp +0 -0
  274. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/geometry/frustum.h +0 -0
  275. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/geometry/lod_quadtree.cpp +0 -0
  276. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/geometry/lod_quadtree.h +0 -0
  277. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/geometry/mesh_data.cpp +0 -0
  278. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/geometry/mesh_data.h +0 -0
  279. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/geometry/primitives.cpp +0 -0
  280. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/geometry/primitives.h +0 -0
  281. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/kernel/CMakeLists.txt +0 -0
  282. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/kernel/closure/brdf.slang +0 -0
  283. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/kernel/closure/hapke.slang +0 -0
  284. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/kernel/closure/lambert.slang +0 -0
  285. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/kernel/closure/lommel_seeliger.slang +0 -0
  286. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/kernel/closure/lunar_lambert.slang +0 -0
  287. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/kernel/closure/oren_nayar.slang +0 -0
  288. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/kernel/closure/preview_surface.slang +0 -0
  289. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/kernel/embedded_shaders.h +0 -0
  290. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/kernel/film/cube_faces.slang +0 -0
  291. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/kernel/film/filter_bayer.slang +0 -0
  292. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/kernel/film/filter_blooming.slang +0 -0
  293. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/kernel/film/filter_color_matrix.slang +0 -0
  294. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/kernel/film/filter_compand.slang +0 -0
  295. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/kernel/film/filter_compand_lookup.slang +0 -0
  296. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/kernel/film/filter_compand_table.slang +0 -0
  297. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/kernel/film/filter_dark_current.slang +0 -0
  298. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/kernel/film/filter_defect_pixels.slang +0 -0
  299. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/kernel/film/filter_defocus.slang +0 -0
  300. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/kernel/film/filter_demosaic.slang +0 -0
  301. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/kernel/film/filter_detector_pattern.slang +0 -0
  302. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/kernel/film/filter_flare.slang +0 -0
  303. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/kernel/film/filter_glare.slang +0 -0
  304. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/kernel/film/filter_jpeg.slang +0 -0
  305. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/kernel/film/filter_lag.slang +0 -0
  306. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/kernel/film/filter_measured_qe.slang +0 -0
  307. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/kernel/film/filter_psf.slang +0 -0
  308. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/kernel/film/filter_readout_taps.slang +0 -0
  309. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/kernel/film/filter_smear.slang +0 -0
  310. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/kernel/film/filter_spectral_transmission.slang +0 -0
  311. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/kernel/film/filter_stray_light.slang +0 -0
  312. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/kernel/film/filter_tdi.slang +0 -0
  313. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/kernel/film/filter_temporal_average.slang +0 -0
  314. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/kernel/film/filter_tone_curve.slang +0 -0
  315. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/kernel/film/filter_white_balance.slang +0 -0
  316. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/kernel/film/lens.slang +0 -0
  317. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/kernel/film/pyramid.slang +0 -0
  318. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/kernel/film/sensor.slang +0 -0
  319. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/kernel/raster/depth_range.slang +0 -0
  320. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/kernel/raster/frame.slang +0 -0
  321. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/kernel/raster/ground.slang +0 -0
  322. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/kernel/raster/hzb.slang +0 -0
  323. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/kernel/raster/instance_anchors.slang +0 -0
  324. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/kernel/raster/instance_compose.slang +0 -0
  325. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/kernel/raster/light_views.slang +0 -0
  326. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/kernel/raster/mesh.slang +0 -0
  327. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/kernel/raster/mesh_normals.slang +0 -0
  328. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/kernel/raster/meter.slang +0 -0
  329. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/kernel/raster/minimal_resolve.slang +0 -0
  330. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/kernel/raster/motion.slang +0 -0
  331. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/kernel/raster/motion_vectors.slang +0 -0
  332. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/kernel/raster/overlay.slang +0 -0
  333. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/kernel/raster/planet.slang +0 -0
  334. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/kernel/raster/planet_color.slang +0 -0
  335. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/kernel/raster/planet_shadow.slang +0 -0
  336. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/kernel/raster/points.slang +0 -0
  337. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/kernel/raster/present.slang +0 -0
  338. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/kernel/raster/projection_pinhole.slang +0 -0
  339. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/kernel/raster/projection_pushbroom.slang +0 -0
  340. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/kernel/raster/surface.slang +0 -0
  341. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/kernel/raster/terrain.slang +0 -0
  342. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/kernel/raster/terrain_color.slang +0 -0
  343. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/kernel/raster/terrain_horizon.slang +0 -0
  344. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/kernel/raster/terrain_shadow.slang +0 -0
  345. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/kernel/raster/terrain_update.slang +0 -0
  346. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/kernel/raster/views.slang +0 -0
  347. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/python/demo.cpp +0 -0
  348. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/python/ernie/app.py +0 -0
  349. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/python/ernie/batch.py +0 -0
  350. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/python/ernie/demos/__main__.py +0 -0
  351. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/python/ernie/schema.py +0 -0
  352. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/python/module.cpp +0 -0
  353. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/python/scene_json.cpp +0 -0
  354. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/python/schema.cpp +0 -0
  355. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/python/stub_patterns.txt +0 -0
  356. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/python/tensor.cpp +0 -0
  357. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/raster/CMakeLists.txt +0 -0
  358. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/raster/drawable.h +0 -0
  359. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/raster/ground_drawable.cpp +0 -0
  360. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/raster/ground_drawable.h +0 -0
  361. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/raster/material.cpp +0 -0
  362. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/raster/material.h +0 -0
  363. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/raster/minimal_targets.cpp +0 -0
  364. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/raster/minimal_targets.h +0 -0
  365. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/raster/overlay_pass.cpp +0 -0
  366. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/raster/overlay_pass.h +0 -0
  367. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/raster/planet_drawable.cpp +0 -0
  368. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/raster/planet_drawable.h +0 -0
  369. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/raster/points_drawable.cpp +0 -0
  370. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/raster/points_drawable.h +0 -0
  371. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/raster/poisson_disk.cpp +0 -0
  372. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/raster/poisson_disk.h +0 -0
  373. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/raster/render_targets.cpp +0 -0
  374. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/raster/render_targets.h +0 -0
  375. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/raster/sensor_plan.cpp +0 -0
  376. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/raster/sensor_plan.h +0 -0
  377. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/raster/shadow_cascades.cpp +0 -0
  378. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/raster/terrain_drawable.cpp +0 -0
  379. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/raster/terrain_drawable.h +0 -0
  380. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/scene/CMakeLists.txt +0 -0
  381. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/scene/base_schemas.cpp +0 -0
  382. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/scene/base_schemas.h +0 -0
  383. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/scene/brdf.cpp +0 -0
  384. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/scene/brdf.h +0 -0
  385. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/scene/cahvore.cpp +0 -0
  386. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/scene/cahvore.h +0 -0
  387. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/scene/camera.cpp +0 -0
  388. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/scene/camera.h +0 -0
  389. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/scene/camera_schemas.cpp +0 -0
  390. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/scene/camera_schemas.h +0 -0
  391. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/scene/edit_history.cpp +0 -0
  392. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/scene/edit_history.h +0 -0
  393. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/scene/geometry_schemas.cpp +0 -0
  394. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/scene/geometry_schemas.h +0 -0
  395. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/scene/isd.cpp +0 -0
  396. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/scene/isd.h +0 -0
  397. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/scene/light_schemas.cpp +0 -0
  398. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/scene/material.h +0 -0
  399. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/scene/material_schemas.cpp +0 -0
  400. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/scene/orbit_controller.cpp +0 -0
  401. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/scene/orbit_controller.h +0 -0
  402. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/scene/overlay.cpp +0 -0
  403. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/scene/overlay.h +0 -0
  404. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/scene/path.cpp +0 -0
  405. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/scene/path.h +0 -0
  406. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/scene/prim_type.cpp +0 -0
  407. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/scene/prim_type.h +0 -0
  408. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/scene/render_schemas.cpp +0 -0
  409. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/scene/render_schemas.h +0 -0
  410. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/scene/scene.cpp +0 -0
  411. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/scene/scene.h +0 -0
  412. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/scene/scene_json.cpp +0 -0
  413. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/scene/scene_json.h +0 -0
  414. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/scene/schema.cpp +0 -0
  415. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/scene/schema.h +0 -0
  416. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/scene/sensor_filters.cpp +0 -0
  417. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/scene/sensor_filters.h +0 -0
  418. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/scene/stage_schemas.cpp +0 -0
  419. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/scene/stage_schemas.h +0 -0
  420. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/scene/value.h +0 -0
  421. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/scene/wide_view.cpp +0 -0
  422. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/scene/wide_view.h +0 -0
  423. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/scene/xform.cpp +0 -0
  424. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/scene/xform.h +0 -0
  425. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/session/CMakeLists.txt +0 -0
  426. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/session/backends.cpp +0 -0
  427. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/session/delegate.cpp +0 -0
  428. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/session/outputs.cpp +0 -0
  429. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/session/outputs.h +0 -0
  430. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/session/product_frame.h +0 -0
  431. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/session/renderer.cpp +0 -0
  432. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/session/renderer.h +0 -0
  433. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/session/sampling.h +0 -0
  434. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/test/app_demo_gpu_test.cpp +0 -0
  435. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/test/app_demo_test.cpp +0 -0
  436. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/test/app_file_dialog_test.cpp +0 -0
  437. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/test/app_panel_test.cpp +0 -0
  438. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/test/app_theme_test.cpp +0 -0
  439. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/test/device_frame_uploads_test.cpp +0 -0
  440. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/test/device_pipeline_test.cpp +0 -0
  441. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/test/device_shader_compiler_test.cpp +0 -0
  442. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/test/device_vulkan_context_test.cpp +0 -0
  443. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/test/fixtures/cahvore/README.md +0 -0
  444. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/test/fixtures/cahvore/m2020_camera_models.json +0 -0
  445. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/test/fixtures/images/grey16.png +0 -0
  446. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/test/fixtures/isd/constVelocityLineScan.json +0 -0
  447. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/test/fixtures/isd/ctxLineScan.json +0 -0
  448. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/test/fixtures/isd/dawnfc_radtan.json +0 -0
  449. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/test/fixtures/isd/jitterFramer.json +0 -0
  450. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/test/fixtures/isd/lroWacPushFrame.json +0 -0
  451. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/test/fixtures/isd/orbitalFramer.json +0 -0
  452. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/test/fixtures/isd/orbitalLineScan.json +0 -0
  453. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/test/fixtures/isd/orbitalPushFrame.json +0 -0
  454. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/test/fixtures/isd/simpleFramerISD.json +0 -0
  455. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/test/fixtures/isd/toughLroNacLineScan.json +0 -0
  456. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/test/fixtures/scene_basic.json +0 -0
  457. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/test/geometry_cube_sphere_lod_test.cpp +0 -0
  458. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/test/geometry_frustum_test.cpp +0 -0
  459. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/test/geometry_lod_quadtree_test.cpp +0 -0
  460. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/test/geometry_mesh_data_test.cpp +0 -0
  461. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/test/geometry_primitives_test.cpp +0 -0
  462. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/test/install/CMakeLists.txt +0 -0
  463. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/test/install/consumer.cpp +0 -0
  464. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/test/install/run_install_test.cmake +0 -0
  465. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/test/python/conftest.py +0 -0
  466. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/test/python/test_app.py +0 -0
  467. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/test/python/test_batch.py +0 -0
  468. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/test/python/test_cahvore.py +0 -0
  469. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/test/python/test_cuda.py +0 -0
  470. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/test/python/test_filters.py +0 -0
  471. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/test/python/test_isd.py +0 -0
  472. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/test/python/test_map.py +0 -0
  473. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/test/python/test_materials.py +0 -0
  474. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/test/python/test_minimal.py +0 -0
  475. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/test/python/test_overlays.py +0 -0
  476. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/test/python/test_readme.py +0 -0
  477. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/test/python/test_render.py +0 -0
  478. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/test/python/test_scene.py +0 -0
  479. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/test/python/test_schema.py +0 -0
  480. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/test/python/test_schema_camera.py +0 -0
  481. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/test/python/test_schema_geometry.py +0 -0
  482. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/test/python/test_schema_material.py +0 -0
  483. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/test/python/test_schema_render.py +0 -0
  484. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/test/python/test_stars.py +0 -0
  485. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/test/python/test_step.py +0 -0
  486. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/test/python/test_xform.py +0 -0
  487. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/test/python/test_xform_gpu.py +0 -0
  488. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/test/python/test_xform_gpu_cameras.py +0 -0
  489. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/test/python/test_xform_gpu_compose.py +0 -0
  490. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/test/python/test_xform_gpu_lights.py +0 -0
  491. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/test/python/test_xform_gpu_map.py +0 -0
  492. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/test/python/test_xform_gpu_points.py +0 -0
  493. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/test/raster_batch_gpu_test.cpp +0 -0
  494. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/test/raster_delegate_gpu_test.cpp +0 -0
  495. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/test/raster_delegate_test.cpp +0 -0
  496. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/test/raster_gpu_meshes_gpu_test.cpp +0 -0
  497. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/test/raster_gpu_terrain_gpu_test.cpp +0 -0
  498. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/test/raster_hex_tiling_gpu_test.cpp +0 -0
  499. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/test/raster_lens_rays_gpu_test.cpp +0 -0
  500. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/test/raster_mesh_drawable_test.cpp +0 -0
  501. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/test/raster_motion_gpu_test.cpp +0 -0
  502. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/test/raster_overlays_gpu_test.cpp +0 -0
  503. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/test/raster_planet_gpu_test.cpp +0 -0
  504. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/test/raster_points_gpu_test.cpp +0 -0
  505. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/test/raster_poisson_disk_test.cpp +0 -0
  506. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/test/raster_products_gpu_test.cpp +0 -0
  507. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/test/raster_sensor_filters_gpu_test.cpp +0 -0
  508. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/test/raster_sensor_plan_test.cpp +0 -0
  509. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/test/raster_shadow_cascades_test.cpp +0 -0
  510. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/test/raster_standard_filters_gpu_test.cpp +0 -0
  511. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/test/raster_terrain_drawable_test.cpp +0 -0
  512. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/test/raster_textures_gpu_test.cpp +0 -0
  513. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/test/raster_zero_copy_gpu_test.cpp +0 -0
  514. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/test/scene_brdf_test.cpp +0 -0
  515. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/test/scene_brdf_vulkan_test.cpp +0 -0
  516. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/test/scene_cahvore_test.cpp +0 -0
  517. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/test/scene_camera_schemas_test.cpp +0 -0
  518. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/test/scene_camera_test.cpp +0 -0
  519. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/test/scene_edit_history_test.cpp +0 -0
  520. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/test/scene_geometry_schemas_test.cpp +0 -0
  521. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/test/scene_isd_test.cpp +0 -0
  522. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/test/scene_json_test.cpp +0 -0
  523. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/test/scene_light_pattern_test.cpp +0 -0
  524. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/test/scene_material_schemas_test.cpp +0 -0
  525. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/test/scene_orbit_controller_test.cpp +0 -0
  526. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/test/scene_overlay_test.cpp +0 -0
  527. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/test/scene_path_test.cpp +0 -0
  528. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/test/scene_prim_type_test.cpp +0 -0
  529. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/test/scene_render_schemas_test.cpp +0 -0
  530. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/test/scene_scene_test.cpp +0 -0
  531. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/test/scene_schema_test.cpp +0 -0
  532. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/test/scene_sensor_filters_test.cpp +0 -0
  533. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/test/scene_stage_test.cpp +0 -0
  534. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/test/scene_wide_view_test.cpp +0 -0
  535. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/test/scene_xform_test.cpp +0 -0
  536. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/test/session_delegate_test.cpp +0 -0
  537. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/test/session_gpu_xform_test.cpp +0 -0
  538. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/test/session_sampling_test.cpp +0 -0
  539. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/test/support/brdf_reference.h +0 -0
  540. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/test/support/delegate_scenes.cpp +0 -0
  541. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/test/support/delegate_scenes.h +0 -0
  542. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/test/support/terrain_harness.h +0 -0
  543. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/test/support/test_raster.h +0 -0
  544. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/test/support/vulkan_fixture.h +0 -0
  545. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/test/util_astronomy_test.cpp +0 -0
  546. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/test/util_atmosphere_test.cpp +0 -0
  547. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/test/util_ies_test.cpp +0 -0
  548. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/test/util_image_test.cpp +0 -0
  549. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/test/util_scattering_test.cpp +0 -0
  550. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/test/util_solar_test.cpp +0 -0
  551. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/test/util_spectrum_test.cpp +0 -0
  552. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/test/util_tensor_test.cpp +0 -0
  553. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/util/astronomy.cpp +0 -0
  554. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/util/astronomy.h +0 -0
  555. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/util/atmosphere.cpp +0 -0
  556. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/util/atmosphere.h +0 -0
  557. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/util/ies.cpp +0 -0
  558. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/util/ies.h +0 -0
  559. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/util/image.cpp +0 -0
  560. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/util/image.h +0 -0
  561. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/util/least_squares.h +0 -0
  562. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/util/profile.h +0 -0
  563. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/util/profiler.cpp +0 -0
  564. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/util/profiler.h +0 -0
  565. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/util/raster_checks.h +0 -0
  566. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/util/raster_view.h +0 -0
  567. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/util/scattering.cpp +0 -0
  568. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/util/scattering.h +0 -0
  569. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/util/shader_source.h +0 -0
  570. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/util/solar.cpp +0 -0
  571. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/util/solar.h +0 -0
  572. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/util/solar_table.h +0 -0
  573. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/util/spectrum.cpp +0 -0
  574. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/util/spectrum.h +0 -0
  575. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/util/tensor.cpp +0 -0
  576. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/ernie/util/tensor.h +0 -0
  577. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/mkdocs.yml +0 -0
  578. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/pyproject.toml +0 -0
  579. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/third_party/README.md +0 -0
  580. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/third_party/cameramodelutilsjs/LICENSE +0 -0
  581. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/third_party/dlpack/LICENSE +0 -0
  582. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/third_party/dlpack/include/dlpack/dlpack.h +0 -0
  583. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/third_party/stb/LICENSE +0 -0
  584. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/third_party/stb/stb.cpp +0 -0
  585. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/third_party/stb/stb_easy_font.h +0 -0
  586. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/third_party/stb/stb_image.h +0 -0
  587. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/third_party/stb/stb_image_write.h +0 -0
  588. {ernie_renderer-0.1.0.dev266 → ernie_renderer-0.1.0.dev309}/tools/solar_spectrum.py +0 -0
@@ -155,6 +155,13 @@ jobs:
155
155
  include-hidden-files: true
156
156
  if-no-files-found: ignore
157
157
  retention-days: 30
158
+ # The data the demos fetch (LOLA's terrain and the like) into their
159
+ # cache, kept between runs rather than downloaded by each.
160
+ - uses: actions/cache@v6
161
+ with:
162
+ path: ~/.cache/ernie
163
+ key: demo-data-${{ hashFiles('demos/**') }}
164
+ restore-keys: demo-data-
158
165
  - name: Test on lavapipe
159
166
  run: |
160
167
  VK_DRIVER_FILES=$(find /usr/share/vulkan/icd.d -name 'lvp_icd*.json' | head -n1)
@@ -483,7 +490,7 @@ jobs:
483
490
  run: |
484
491
  dnf install -y -q --enablerepo=crb libX11-devel libXrandr-devel libXinerama-devel \
485
492
  libXcursor-devel libXi-devel libXext-devel wayland-devel wayland-protocols-devel \
486
- libxkbcommon-devel rpm-build
493
+ libxkbcommon-devel libcurl-devel rpm-build
487
494
  dnf install -y -q epel-release
488
495
  dnf install -y -q ccache
489
496
  command -v ninja >/dev/null || pipx install -q ninja
@@ -507,6 +514,9 @@ jobs:
507
514
  cpack --preset package-$kind
508
515
  done
509
516
  ccache --show-stats
517
+ # rpmbuild finds the libraries the binaries link, libcurl
518
+ # among them.
519
+ rpm -qpR build/package-rpm/packages/*.rpm | grep -F libcurl.so
510
520
  mkdir packages
511
521
  cp build/package-deb/packages/*.deb build/package-deb/packages/*.tar.gz \
512
522
  build/package-rpm/packages/*.rpm packages/
@@ -531,29 +541,42 @@ jobs:
531
541
  include:
532
542
  - image: ubuntu:22.04
533
543
  install: apt-get update -qq && DEBIAN_FRONTEND=noninteractive apt-get install -y -qq
534
- packages: ./packages/*.deb mesa-vulkan-drivers cmake g++ make
544
+ packages: ./packages/*.deb
545
+ tools: mesa-vulkan-drivers cmake g++ make
535
546
  - image: ubuntu:24.04
536
547
  install: apt-get update -qq && DEBIAN_FRONTEND=noninteractive apt-get install -y -qq
537
- packages: ./packages/*.deb mesa-vulkan-drivers cmake g++ make
548
+ packages: ./packages/*.deb
549
+ tools: mesa-vulkan-drivers cmake g++ make
538
550
  - image: debian:12
539
551
  install: apt-get update -qq && DEBIAN_FRONTEND=noninteractive apt-get install -y -qq
540
- packages: ./packages/*.deb mesa-vulkan-drivers cmake g++ make
552
+ packages: ./packages/*.deb
553
+ tools: mesa-vulkan-drivers cmake g++ make
541
554
  - image: rockylinux:9
542
555
  install: dnf install -y -q
543
- packages: ./packages/*.rpm mesa-vulkan-drivers cmake gcc-c++ make
556
+ packages: ./packages/*.rpm
557
+ tools: mesa-vulkan-drivers cmake gcc-c++ make
544
558
  - image: fedora:latest
545
559
  install: dnf install -y -q
546
- packages: ./packages/*.rpm mesa-vulkan-drivers cmake gcc-c++ make
560
+ packages: ./packages/*.rpm
561
+ tools: mesa-vulkan-drivers cmake gcc-c++ make
547
562
  steps:
548
563
  - uses: actions/checkout@v7
549
564
  - uses: actions/download-artifact@v8
550
565
  with:
551
566
  name: packages-linux-x86_64
552
567
  path: packages
568
+ # Ernie's packages alone first, so the program runs on what they
569
+ # pull in themselves (the build tools bring libcurl, for one).
553
570
  - name: Install the packages
554
571
  run: ${{ matrix.install }} ${{ matrix.packages }}
555
572
  - name: Run the viewer
556
- run: ernie --version
573
+ run: |
574
+ if ldd "$(command -v ernie)" | grep "not found"; then
575
+ exit 1
576
+ fi
577
+ ernie --version
578
+ - name: Install the build tools
579
+ run: ${{ matrix.install }} ${{ matrix.tools }}
557
580
  - name: Build and run an application against them
558
581
  run: |
559
582
  cmake -S ernie/test/install -B consumer -DCMAKE_BUILD_TYPE=Release
@@ -17,7 +17,7 @@ project(
17
17
  # reads it here too (pyproject.toml), and the packages turn it into "~dev12".
18
18
  # One line, as CI rewrites it and the wheel's version regex reads it.
19
19
  # cmake-format: off
20
- set(ERNIE_VERSION_SUFFIX ".dev266" CACHE STRING "Pre-release suffix of Ernie's version, such as .dev12")
20
+ set(ERNIE_VERSION_SUFFIX ".dev309" CACHE STRING "Pre-release suffix of Ernie's version, such as .dev12")
21
21
  # cmake-format: on
22
22
  set(ERNIE_VERSION "${PROJECT_VERSION}${ERNIE_VERSION_SUFFIX}")
23
23
 
@@ -136,6 +136,12 @@ endif()
136
136
 
137
137
  add_subdirectory(ernie)
138
138
 
139
+ # The demos' libcurl, found before the packaging so the packages can
140
+ # depend on it.
141
+ if(TARGET ernie_app)
142
+ include(cmake/third_party/curl.cmake)
143
+ endif()
144
+
139
145
  if(ERNIE_INSTALL)
140
146
  include(cmake/ErnieInstall.cmake)
141
147
  include(cmake/ErniePackaging.cmake)
@@ -81,7 +81,7 @@ Packages: `cmake --preset package-deb` (or `package-rpm`), then `cmake --build -
81
81
  - Each module in `ernie/` is a library that depends only on the modules before it (see `ernie/CMakeLists.txt`). Headers sit next to their sources and are included as `"ernie/<module>/<file>.h"`.
82
82
  - Document public API with `///` comments. When code implements a published technique, cite it in a `References:` list in the doc comment.
83
83
  - Scene attributes use physical units (meters, kelvin, lux and so on). Say which unit in the doc comment.
84
- - Demos go in `demos/<category>/` as a pair, `<name>.cpp` and `<name>.py`, the same demo in each language (registered with `ERNIE_REGISTER_DEMO` in C++); only `demos/interop/` is Python alone. `ernie/test/python/test_demos.py` checks every pair renders the same image.
84
+ - Demos go in `demos/<category>/` as a pair, `demo_<category>_<name>.cpp` and `demo_<category>_<name>.py`, the same demo in each language (registered with `ERNIE_REGISTER_DEMO(Class, "<category>", "<name>", ...)` in C++); only `demos/interop/` is Python alone. The file stem is the demo's name everywhere: `ernie --demo demo_<category>_<name>`, `python -m ernie.demos demo_<category>_<name>` and its own program. `ernie/test/python/test_demos.py` checks every pair renders the same image.
85
85
  - Tests are named `<module>_<topic>_test.cpp`. GPU tests use the `_gpu_test.cpp` suffix.
86
86
 
87
87
  ## Pull requests
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ernie-renderer
3
- Version: 0.1.0.dev266
3
+ Version: 0.1.0.dev309
4
4
  Summary: Efficient Renderer for Natural and Interplanetary Environments: a spectral Vulkan renderer with a USD-style scene and batched cameras
5
5
  Keywords: rendering,spectral,vulkan,planetary,space,sensor-simulation,reinforcement-learning,robotics
6
6
  Author: Alex Maietta
@@ -35,7 +35,11 @@ Description-Content-Type: text/markdown
35
35
 
36
36
  > 🚧 **This project is in active beta development.** This means the API is unstable, features may be added or removed, and breaking changes are likely to occur frequently and without notice as the design is refined.
37
37
 
38
- [![CI](https://github.com/alexmaietta/ernie/actions/workflows/ci.yml/badge.svg?branch=main)](https://github.com/alexmaietta/ernie/actions/workflows/ci.yml) [![Release](https://img.shields.io/github/v/release/alexmaietta/ernie?include_prereleases&sort=semver&color=orange)](https://github.com/alexmaietta/ernie/releases) [![PyPI](https://img.shields.io/pypi/v/ernie-renderer?color=3775A9&logo=pypi&logoColor=white)](https://pypi.org/project/ernie-renderer/) [![Docs](https://img.shields.io/badge/docs-latest-8A2BE2)](https://alexmaietta.github.io/ernie/) [![License](https://img.shields.io/badge/license-BSD--3--Clause-2E8B57)](LICENSE)
38
+ [![CI](https://github.com/alexmaietta/ernie/actions/workflows/ci.yml/badge.svg?branch=main)](https://github.com/alexmaietta/ernie/actions/workflows/ci.yml)
39
+ [![Release](https://img.shields.io/github/v/release/alexmaietta/ernie?include_prereleases&sort=semver&color=orange)](https://github.com/alexmaietta/ernie/releases)
40
+ [![PyPI](https://img.shields.io/pypi/v/ernie-renderer?color=3775A9&logo=pypi&logoColor=white)](https://pypi.org/project/ernie-renderer/)
41
+ [![Docs](https://img.shields.io/badge/docs-latest-8A2BE2)](https://alexmaietta.github.io/ernie/)
42
+ [![License](https://img.shields.io/badge/license-BSD--3--Clause-2E8B57)](LICENSE)
39
43
 
40
44
  # Efficient Renderer for Natural and Interplanetary Environments (Ernie)
41
45
 
@@ -43,7 +47,7 @@ Description-Content-Type: text/markdown
43
47
 
44
48
  Ernie is a physically accurate, real-time, spectral renderer for interplanetary environments.
45
49
 
46
- It is a Vulkan rasterizer for Linux, Windows and macOS (through MoltenVK), with C++ and Python APIs and a Hydra-like scene API. Ernie is designed around physical quantities, efficient batched rendering and modularity.
50
+ It is a Vulkan rasterizer for Linux, Windows and macOS (through MoltenVK), with C++ and Python APIs and a Hydra-like scene API. Ernie is designed around physical quantities, efficient batched rendering, and user experience.
47
51
 
48
52
  Ernie is built to be customized and to work alongside other tools. You can add your own BRDFs, sensor filters and light patterns. Rendered outputs and scene attributes (transforms, mesh vertices, light parameters and more) are shared zero copy with any DLPack tensor (PyTorch, JAX, Warp, NumPy), which makes Ernie a good fit for real-time physics simulation and reinforcement learning. Support for OpenUSD and glTF scenes, and for MDL and MaterialX materials, is planned.
49
53
 
@@ -52,7 +56,7 @@ Its key features are aimed at planetary robotics and sensing:
52
56
  - **Cameras and sensors**
53
57
  - Exposure, aperture, motion blur, rolling shutter, lens distortion and vignetting.
54
58
  - Perspective, fisheye and orthographic projections, and line-scan pushbroom cameras like LROC's.
55
- - Real sensor specs: quantum efficiency curves, full well, read noise, dark current, PRNU, DSNU, gain and ADC bit depth.
59
+ - Quantum efficiency curves, full well, read noise, dark current, PRNU, DSNU, gain and ADC bit depth.
56
60
  - USGS CSM camera models for non-standard instruments.
57
61
  - Sensor filter chains (noise models, lens flare, vignetting), with your own filters written in Slang.
58
62
  - **Planetary environments**
@@ -71,7 +75,7 @@ Its key features are aimed at planetary robotics and sensing:
71
75
  - A floating origin, so large scenes keep their precision.
72
76
  - **Tools**
73
77
  - A viewer with customizable panels, to drive your own simulations and workflows.
74
- - Debug drawing: labels, trajectories and overlays in the scene.
78
+ - Debug drawing for labels, trajectories and overlays in the scene.
75
79
 
76
80
  For a more detailed overview of the features, see our [documentation](https://alexmaietta.github.io/ernie/).
77
81
 
@@ -203,6 +207,13 @@ Planned future examples.
203
207
  - Illuminants across the same scene
204
208
  - Laser lines competing with sunlight
205
209
 
210
+ **Lasers**
211
+
212
+ - Lasers from 405 to 940 nm seen by RGB, narrowband, NIR and wideband cameras (`demo_lasers_wavelengths`)
213
+ - A projector's patterns: spot, line, grid, dots, fringes and rings written in Slang (`demo_lasers_patterns`)
214
+ - A pulsed line laser against long, in-step and between-pulse exposures (`demo_lasers_pulsed`)
215
+ - Gray-code structured light decoded to projector columns (`demo_lasers_structured_light`)
216
+
206
217
  **Star Field**
207
218
 
208
219
  - Hipparcos star catalog
@@ -1,6 +1,10 @@
1
1
  > 🚧 **This project is in active beta development.** This means the API is unstable, features may be added or removed, and breaking changes are likely to occur frequently and without notice as the design is refined.
2
2
 
3
- [![CI](https://github.com/alexmaietta/ernie/actions/workflows/ci.yml/badge.svg?branch=main)](https://github.com/alexmaietta/ernie/actions/workflows/ci.yml) [![Release](https://img.shields.io/github/v/release/alexmaietta/ernie?include_prereleases&sort=semver&color=orange)](https://github.com/alexmaietta/ernie/releases) [![PyPI](https://img.shields.io/pypi/v/ernie-renderer?color=3775A9&logo=pypi&logoColor=white)](https://pypi.org/project/ernie-renderer/) [![Docs](https://img.shields.io/badge/docs-latest-8A2BE2)](https://alexmaietta.github.io/ernie/) [![License](https://img.shields.io/badge/license-BSD--3--Clause-2E8B57)](LICENSE)
3
+ [![CI](https://github.com/alexmaietta/ernie/actions/workflows/ci.yml/badge.svg?branch=main)](https://github.com/alexmaietta/ernie/actions/workflows/ci.yml)
4
+ [![Release](https://img.shields.io/github/v/release/alexmaietta/ernie?include_prereleases&sort=semver&color=orange)](https://github.com/alexmaietta/ernie/releases)
5
+ [![PyPI](https://img.shields.io/pypi/v/ernie-renderer?color=3775A9&logo=pypi&logoColor=white)](https://pypi.org/project/ernie-renderer/)
6
+ [![Docs](https://img.shields.io/badge/docs-latest-8A2BE2)](https://alexmaietta.github.io/ernie/)
7
+ [![License](https://img.shields.io/badge/license-BSD--3--Clause-2E8B57)](LICENSE)
4
8
 
5
9
  # Efficient Renderer for Natural and Interplanetary Environments (Ernie)
6
10
 
@@ -8,7 +12,7 @@
8
12
 
9
13
  Ernie is a physically accurate, real-time, spectral renderer for interplanetary environments.
10
14
 
11
- It is a Vulkan rasterizer for Linux, Windows and macOS (through MoltenVK), with C++ and Python APIs and a Hydra-like scene API. Ernie is designed around physical quantities, efficient batched rendering and modularity.
15
+ It is a Vulkan rasterizer for Linux, Windows and macOS (through MoltenVK), with C++ and Python APIs and a Hydra-like scene API. Ernie is designed around physical quantities, efficient batched rendering, and user experience.
12
16
 
13
17
  Ernie is built to be customized and to work alongside other tools. You can add your own BRDFs, sensor filters and light patterns. Rendered outputs and scene attributes (transforms, mesh vertices, light parameters and more) are shared zero copy with any DLPack tensor (PyTorch, JAX, Warp, NumPy), which makes Ernie a good fit for real-time physics simulation and reinforcement learning. Support for OpenUSD and glTF scenes, and for MDL and MaterialX materials, is planned.
14
18
 
@@ -17,7 +21,7 @@ Its key features are aimed at planetary robotics and sensing:
17
21
  - **Cameras and sensors**
18
22
  - Exposure, aperture, motion blur, rolling shutter, lens distortion and vignetting.
19
23
  - Perspective, fisheye and orthographic projections, and line-scan pushbroom cameras like LROC's.
20
- - Real sensor specs: quantum efficiency curves, full well, read noise, dark current, PRNU, DSNU, gain and ADC bit depth.
24
+ - Quantum efficiency curves, full well, read noise, dark current, PRNU, DSNU, gain and ADC bit depth.
21
25
  - USGS CSM camera models for non-standard instruments.
22
26
  - Sensor filter chains (noise models, lens flare, vignetting), with your own filters written in Slang.
23
27
  - **Planetary environments**
@@ -36,7 +40,7 @@ Its key features are aimed at planetary robotics and sensing:
36
40
  - A floating origin, so large scenes keep their precision.
37
41
  - **Tools**
38
42
  - A viewer with customizable panels, to drive your own simulations and workflows.
39
- - Debug drawing: labels, trajectories and overlays in the scene.
43
+ - Debug drawing for labels, trajectories and overlays in the scene.
40
44
 
41
45
  For a more detailed overview of the features, see our [documentation](https://alexmaietta.github.io/ernie/).
42
46
 
@@ -168,6 +172,13 @@ Planned future examples.
168
172
  - Illuminants across the same scene
169
173
  - Laser lines competing with sunlight
170
174
 
175
+ **Lasers**
176
+
177
+ - Lasers from 405 to 940 nm seen by RGB, narrowband, NIR and wideband cameras (`demo_lasers_wavelengths`)
178
+ - A projector's patterns: spot, line, grid, dots, fringes and rings written in Slang (`demo_lasers_patterns`)
179
+ - A pulsed line laser against long, in-step and between-pulse exposures (`demo_lasers_pulsed`)
180
+ - Gray-code structured light decoded to projector columns (`demo_lasers_structured_light`)
181
+
171
182
  **Star Field**
172
183
 
173
184
  - Hipparcos star catalog
@@ -97,6 +97,12 @@ else()
97
97
  CPACK_DEBIAN_PACKAGE_DEPENDS
98
98
  ", libc6 (>= ${ernie_glibc}), libstdc++6 (>= 11), libgcc-s1 (>= 3.4)"
99
99
  )
100
+ # The system's libcurl, which the demos link (curl.cmake): renamed
101
+ # libcurl4t64 in Debian 13 and Ubuntu 24.04.
102
+ if(TARGET ernie_curl AND CURL_FOUND)
103
+ string(APPEND CPACK_DEBIAN_PACKAGE_DEPENDS
104
+ ", libcurl4t64 | libcurl4")
105
+ endif()
100
106
  endif()
101
107
  # Recommended rather than required, so headless servers can leave the window libraries out
102
108
  # (`apt install --no-install-recommends`).
@@ -1,3 +1,6 @@
1
+ # Included before the packaging (CMakeLists.txt) and by the demos.
2
+ include_guard(GLOBAL)
3
+
1
4
  set(ERNIE_DEP_VERSION_curl
2
5
  curl-8_18_0
3
6
  CACHE STRING "Tag of curl to fetch when the system has no libcurl.")
@@ -1,8 +1,9 @@
1
1
  # SPDX-License-Identifier: BSD-3-Clause
2
- # Ernie's demos, by category: demos/<category>/<name>.cpp beside <name>.py, the same demo in each
3
- # language (interop/ is Python only). Each C++ demo registers itself (ERNIE_REGISTER_DEMO), and
4
- # their objects go into the `ernie` program and the Python module, whose Demos panels list them.
5
- # With ERNIE_BUILD_DEMOS each is also a program of its own, demo_<category>_<name>.
2
+ # Ernie's demos, by category: demos/<category>/demo_<category>_<name>.cpp beside its .py, the
3
+ # same demo in each language (interop/ is Python only), named by that stem. Each C++ demo
4
+ # registers itself (ERNIE_REGISTER_DEMO), and their objects go into the `ernie` program and the
5
+ # Python module, whose Demos panels list them. With ERNIE_BUILD_DEMOS each is also a program of
6
+ # its own, named as its files.
6
7
 
7
8
  file(GLOB ernie_demo_cpp CONFIGURE_DEPENDS
8
9
  "${CMAKE_CURRENT_SOURCE_DIR}/*/*.cpp")
@@ -45,11 +46,18 @@ if(ERNIE_BUILD_DEMOS)
45
46
  get_filename_component(name "${source}" NAME_WE)
46
47
  get_filename_component(directory "${source}" DIRECTORY)
47
48
  get_filename_component(category "${directory}" NAME)
48
- set(program "demo_${category}_${name}")
49
+ # The demo's id and program: its file's stem,
50
+ # demo_<category>_<name> (a file of the former <name> form
51
+ # gets the prefix).
52
+ if(name MATCHES "^demo_${category}_")
53
+ set(program "${name}")
54
+ else()
55
+ set(program "demo_${category}_${name}")
56
+ endif()
49
57
  add_executable(${program} main.cpp
50
58
  $<TARGET_OBJECTS:ernie_demos>)
51
- target_compile_definitions(
52
- ${program} PRIVATE ERNIE_DEMO_ID="${category}/${name}")
59
+ target_compile_definitions(${program}
60
+ PRIVATE ERNIE_DEMO_ID="${program}")
53
61
  target_link_libraries(
54
62
  ${program} PRIVATE ernie_app ernie_build_options
55
63
  ${ernie_demo_links})
@@ -1,8 +1,6 @@
1
1
  // SPDX-License-Identifier: BSD-3-Clause
2
- // Earth's atmosphere from the ground and from orbit: a blue noon sky,
3
- // a red sunset, and the planet's limb from the International Space
4
- // Station's 400 km, under the Sun's measured spectrum (TSIS-1) at
5
- // 1361 W/m^2.
2
+ // Earth's atmosphere from the ground and from orbit: a noon sky, a
3
+ // sunset and the limb from the ISS.
6
4
 
7
5
  #include "ernie/app/demo.h"
8
6
  #include "ernie/scene/base_schemas.h"
@@ -1,8 +1,6 @@
1
1
  # SPDX-License-Identifier: BSD-3-Clause
2
- """Earth's atmosphere from the ground and from orbit: a blue noon sky,
3
- a red sunset, and the planet's limb from the International Space
4
- Station's 400 km, under the Sun's measured spectrum (TSIS-1) at
5
- 1361 W/m^2."""
2
+ """Earth's atmosphere from the ground and from orbit: a noon sky, a
3
+ sunset and the limb from the ISS."""
6
4
 
7
5
  import math
8
6
 
@@ -0,0 +1,294 @@
1
+ // SPDX-License-Identifier: BSD-3-Clause
2
+ // Solar eclipses by a CelestialBody Moon: partial and annular through
3
+ // a solar filter, totality from the ground, and its shadow from
4
+ // orbit.
5
+
6
+ #include "ernie/app/demo.h"
7
+ #include "ernie/scene/base_schemas.h"
8
+ #include "ernie/scene/camera_schemas.h"
9
+ #include "ernie/scene/light_schemas.h"
10
+ #include "ernie/scene/render_schemas.h"
11
+ #include "ernie/scene/terrain_schemas.h"
12
+ #include "ernie/scene/tokens.h"
13
+ #include "ernie/scene/xform.h"
14
+ #include "util.h"
15
+
16
+ #include <algorithm>
17
+ #include <array>
18
+ #include <cmath>
19
+ #include <cstdint>
20
+ #include <cstdio>
21
+ #include <numbers>
22
+ #include <string>
23
+ #include <vector>
24
+
25
+ namespace {
26
+
27
+ using namespace ernie;
28
+ using demos::Check;
29
+
30
+ constexpr double kPi = std::numbers::pi;
31
+ constexpr double kSunElevation = 40.0; // degrees
32
+
33
+ /// A camera, an exposure, and the Moon's distance and offset from the
34
+ /// sun (towards the zenith).
35
+ struct View {
36
+ const char* name;
37
+ glm::dvec3 eye;
38
+ double elevation; ///< Of the camera's aim, degrees, towards +x.
39
+ glm::dvec3 up;
40
+ double focalLength; ///< Millimetres.
41
+ double moonDistance; ///< Metres.
42
+ double moonOffset; ///< Degrees.
43
+ double fStop;
44
+ double exposureTime; ///< Seconds, at ISO 100.
45
+ double filter; ///< Stops; -13.3 is an ND 4.0 solar filter.
46
+ };
47
+
48
+ // At 360,000 km the Moon covers the sun; at 405,500 km it leaves a
49
+ // ring.
50
+ const std::array<View, 4> kViews = {{
51
+ {"Partial, through a solar filter",
52
+ {0.0, 0.0, 2.0},
53
+ kSunElevation,
54
+ {0.0, 0.0, 1.0},
55
+ 1200.0,
56
+ 384400e3,
57
+ 0.3,
58
+ 16.0,
59
+ 1.0 / 1000.0,
60
+ -13.3},
61
+ {"Annular, through a solar filter",
62
+ {0.0, 0.0, 2.0},
63
+ kSunElevation,
64
+ {0.0, 0.0, 1.0},
65
+ 1200.0,
66
+ 405500e3,
67
+ 0.0,
68
+ 16.0,
69
+ 1.0 / 1000.0,
70
+ -13.3},
71
+ {"Totality, from the ground",
72
+ {0.0, 0.0, 2.0},
73
+ 22.0,
74
+ {0.0, 0.0, 1.0},
75
+ 14.0,
76
+ 360000e3,
77
+ 0.0,
78
+ 2.8,
79
+ 1.0 / 2.0,
80
+ 0.0},
81
+ {"The Moon's shadow from geostationary orbit",
82
+ {0.0, 0.0, 35786e3},
83
+ -90.0,
84
+ {1.0, 0.0, 0.0},
85
+ 100.0,
86
+ 360000e3,
87
+ 0.0,
88
+ 16.0,
89
+ 1.0 / 125.0,
90
+ 0.0},
91
+ }};
92
+
93
+ /// The mean linear colour of rows [top, bottom) and columns [left,
94
+ /// right) of a uint8 (rows, cols, 4) image.
95
+ glm::dvec3 RegionLinearRgb(const Tensor& image, std::int64_t top,
96
+ std::int64_t bottom, std::int64_t left,
97
+ std::int64_t right) {
98
+ const std::int64_t cols = image.Shape()[1];
99
+ const auto* pixels =
100
+ static_cast<const std::uint8_t*>(image.Data());
101
+ glm::dvec3 sum(0.0);
102
+ for (std::int64_t row = top; row < bottom; ++row) {
103
+ for (std::int64_t col = left; col < right; ++col) {
104
+ const std::uint8_t* p = pixels + (row * cols + col) * 4;
105
+ sum += demos::SrgbToLinear(glm::dvec3(p[0], p[1], p[2]) /
106
+ 255.0);
107
+ }
108
+ }
109
+ return sum / static_cast<double>((bottom - top) * (right - left));
110
+ }
111
+
112
+ double Luminance(glm::dvec3 rgb) {
113
+ return 0.2126 * rgb.r + 0.7152 * rgb.g + 0.0722 * rgb.b;
114
+ }
115
+
116
+ /// The pixels of a uint8 (rows, cols, 4) image brighter than half
117
+ /// white.
118
+ int BrightPixels(const Tensor& image) {
119
+ const auto* pixels =
120
+ static_cast<const std::uint8_t*>(image.Data());
121
+ const std::int64_t count = image.Shape()[0] * image.Shape()[1];
122
+ int bright = 0;
123
+ for (std::int64_t i = 0; i < count; ++i) {
124
+ bright += pixels[i * 4 + 1] > 128 ? 1 : 0;
125
+ }
126
+ return bright;
127
+ }
128
+
129
+ class EclipseDemo : public app::Demo {
130
+ public:
131
+ EclipseDemo(app::Viewer* viewer, const app::DemoOptions& options)
132
+ : Demo(viewer, options) {
133
+ numFrames = 1;
134
+ Scene& scene = GetScene();
135
+ Xform::Define(scene, "/World");
136
+ Atmosphere::Define(scene, "/World/Air")
137
+ .SetPreset(std::string(tokens::kEarth));
138
+ DistantLight::Define(scene, "/World/Sun")
139
+ .SetIrradiance(1361.0)
140
+ .SetPhysicalIlluminant(std::string(tokens::kSun))
141
+ .SetAngle(0.53);
142
+ const double e = kSunElevation * kPi / 180.0;
143
+ DistantLight(scene, "/World/Sun")
144
+ .SetTransform(DistantLightTransform(
145
+ {std::cos(e), 0.0, std::sin(e)}));
146
+ // The Moon: its mean radius and normal albedo.
147
+ CelestialBody::Define(scene, "/World/Moon")
148
+ .SetRadius(1737.4e3)
149
+ .SetAlbedo(glm::dvec3(0.12));
150
+ Camera::Define(scene, "/World/Camera")
151
+ .SetSensorNoise(false)
152
+ .SetExposureIso(100.0);
153
+ RenderSettings::Define(scene, "/Render/Settings")
154
+ .SetCamera(Path("/World/Camera"))
155
+ .SetResolution({480, 320})
156
+ .SetAmbient(0.0);
157
+ Show(0);
158
+
159
+ std::vector<std::string> names;
160
+ for (const View& view : kViews) {
161
+ names.emplace_back(view.name);
162
+ }
163
+ Widgets().Combo("View", std::move(names), 0,
164
+ [this](std::size_t index) {
165
+ Show(static_cast<int>(index));
166
+ });
167
+ Widgets().Slider(
168
+ "Moon offset", -1.0, 1.0, kViews[0].moonOffset,
169
+ [this](double degrees) {
170
+ MoonAt(kViews[static_cast<std::size_t>(view_)]
171
+ .moonDistance,
172
+ degrees);
173
+ });
174
+ if (viewer != nullptr) {
175
+ viewer->SetActiveCamera("/World/Camera");
176
+ }
177
+ }
178
+
179
+ /// The four views side by side.
180
+ void SaveOutput(const std::filesystem::path& path) override {
181
+ app::WritePng(path, demos::SideBySide(RenderAll()));
182
+ }
183
+
184
+ void TestFinal() override {
185
+ const std::vector<Tensor> images = RenderAll();
186
+ for (std::size_t i = 0; i < images.size(); ++i) {
187
+ const glm::dvec3 mean = demos::MeanLinearRgb(images[i]);
188
+ std::printf("%s: mean linear RGB %.4f %.4f %.4f\n",
189
+ kViews[i].name, mean.r, mean.g, mean.b);
190
+ }
191
+ // A crescent and a ring: less of the sun than its whole disc.
192
+ const int whole = BrightPixels(RenderWithoutMoon(0));
193
+ const int crescent = BrightPixels(images[0]);
194
+ const int ring = BrightPixels(images[1]);
195
+ std::printf("bright pixels: whole %d, crescent %d, ring %d\n",
196
+ whole, crescent, ring);
197
+ Check(crescent > 0 && crescent < 0.8 * whole,
198
+ "the partial eclipse should leave a crescent");
199
+ Check(ring > 0 && ring < 0.3 * whole,
200
+ "the annular eclipse should leave a thin ring");
201
+ // The ring: dark at the Moon's centre.
202
+ const std::int64_t rows = images[1].Shape()[0];
203
+ const std::int64_t cols = images[1].Shape()[1];
204
+ Check(Luminance(RegionLinearRgb(images[1], rows / 2 - 2,
205
+ rows / 2 + 2, cols / 2 - 2,
206
+ cols / 2 + 2)) < 0.01,
207
+ "the Moon should be dark against the sun");
208
+ // Totality: a dark sky, brightest along the horizon.
209
+ const Tensor day = RenderWithoutMoon(2);
210
+ const double total =
211
+ Luminance(demos::MeanLinearRgb(images[2]));
212
+ const double daylight = Luminance(demos::MeanLinearRgb(day));
213
+ std::printf("totality %.5f of daylight\n", total / daylight);
214
+ Check(total < 0.05 * daylight,
215
+ "totality should darken the sky");
216
+ const double horizon = Luminance(RegionLinearRgb(
217
+ images[2], rows - rows / 5, rows, 0, cols));
218
+ const double overhead = Luminance(
219
+ RegionLinearRgb(images[2], 0, rows / 5, 0, cols));
220
+ std::printf("totality: horizon %.5f, top %.5f\n", horizon,
221
+ overhead);
222
+ Check(horizon > 2.0 * overhead,
223
+ "the horizon should glow in totality");
224
+ // From orbit: a dark umbra under the camera.
225
+ const double umbra = Luminance(
226
+ RegionLinearRgb(images[3], rows / 2 - 2, rows / 2 + 2,
227
+ cols / 2 - 2, cols / 2 + 2));
228
+ const double around = Luminance(
229
+ RegionLinearRgb(images[3], 0, rows / 8, 0, cols));
230
+ std::printf("from orbit: umbra %.5f, around %.5f\n", umbra,
231
+ around);
232
+ Check(umbra < 0.1 * around,
233
+ "the umbra should be dark from orbit");
234
+ }
235
+
236
+ private:
237
+ void Show(int index) {
238
+ view_ = index;
239
+ const View& view = kViews[static_cast<std::size_t>(index)];
240
+ const double a = view.elevation * kPi / 180.0;
241
+ Camera(GetScene(), "/World/Camera")
242
+ .SetFocalLength(view.focalLength)
243
+ .SetExposureFStop(view.fStop)
244
+ .SetExposureTime(view.exposureTime)
245
+ .SetExposure(view.filter)
246
+ .SetTransform(LookAtTransform(
247
+ view.eye,
248
+ view.eye + glm::dvec3(std::cos(a), 0.0, std::sin(a)),
249
+ view.up));
250
+ MoonAt(view.moonDistance, view.moonOffset);
251
+ }
252
+
253
+ /// The Moon `distance` from the world's origin, `degrees` from
254
+ /// the sun's direction towards the zenith.
255
+ void MoonAt(double distance, double degrees) {
256
+ const double e = (kSunElevation + degrees) * kPi / 180.0;
257
+ SetXform(GetScene(), "/World/Moon",
258
+ {.translate = distance * glm::dvec3(std::cos(e), 0.0,
259
+ std::sin(e))});
260
+ }
261
+
262
+ /// View `index` with the Moon far from the sun; leaves the view
263
+ /// as it was.
264
+ Tensor RenderWithoutMoon(int index) {
265
+ const int current = view_;
266
+ Show(index);
267
+ MoonAt(kViews[static_cast<std::size_t>(index)].moonDistance,
268
+ -30.0);
269
+ Tensor image = GetRenderer().Render(GetScene());
270
+ Show(current);
271
+ return image;
272
+ }
273
+
274
+ /// The scene from each view in turn, RGBA uint8; leaves the view
275
+ /// as it was.
276
+ std::vector<Tensor> RenderAll() {
277
+ const int current = view_;
278
+ std::vector<Tensor> images;
279
+ for (int i = 0; i < static_cast<int>(kViews.size()); ++i) {
280
+ Show(i);
281
+ images.push_back(GetRenderer().Render(GetScene()));
282
+ }
283
+ Show(current);
284
+ return images;
285
+ }
286
+
287
+ int view_ = 0;
288
+ };
289
+
290
+ } // namespace
291
+
292
+ ERNIE_REGISTER_DEMO(EclipseDemo, "atmosphere", "eclipse",
293
+ "Solar eclipses: partial, annular and total from "
294
+ "the ground, and the Moon's shadow from orbit.");