ernie-renderer 0.1.0.dev196__tar.gz → 0.1.0.dev202__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.
Files changed (513) hide show
  1. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/CMakeLists.txt +1 -1
  2. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/PKG-INFO +2 -2
  3. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/README.md +1 -1
  4. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/demos/lighting/illuminants.cpp +7 -14
  5. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/demos/lighting/illuminants.py +3 -6
  6. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/demos/viewer/sun_panel.cpp +12 -12
  7. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/demos/viewer/sun_panel.py +7 -10
  8. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/docs/getting-started/demos.md +7 -7
  9. ernie_renderer-0.1.0.dev202/docs/js/sidebar.js +29 -0
  10. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/app/demo.cpp +96 -47
  11. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/app/demo.h +15 -0
  12. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/kernel/CMakeLists.txt +2 -0
  13. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/kernel/embedded_shaders.h +2 -0
  14. ernie_renderer-0.1.0.dev202/ernie/kernel/film/filter_flare.slang +118 -0
  15. ernie_renderer-0.1.0.dev202/ernie/kernel/film/filter_stray_light.slang +99 -0
  16. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/kernel/film/sensor.slang +21 -2
  17. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/python/demo.cpp +3 -0
  18. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/python/scene.cpp +9 -0
  19. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/raster/renderer.cpp +24 -2
  20. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/scene/isd.cpp +64 -3
  21. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/scene/isd.h +29 -6
  22. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/scene/sensor_filters.cpp +73 -0
  23. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/scene/sensor_filters.h +8 -0
  24. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/test/fixtures/isd/README.md +1 -0
  25. ernie_renderer-0.1.0.dev202/ernie/test/fixtures/isd/jitterFramer.json +97 -0
  26. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/test/python/test_isd.py +14 -0
  27. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/test/raster_standard_filters_gpu_test.cpp +124 -0
  28. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/test/scene_isd_test.cpp +66 -0
  29. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/mkdocs.yml +4 -0
  30. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/.clang-format +0 -0
  31. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/.clang-tidy +0 -0
  32. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/.cmake-format.yaml +0 -0
  33. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/.gitattributes +0 -0
  34. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  35. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  36. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/.github/dependabot.yml +0 -0
  37. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/.github/pull_request_template.md +0 -0
  38. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/.github/scripts/ci_metrics.py +0 -0
  39. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/.github/workflows/ci-metrics.yml +0 -0
  40. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/.github/workflows/ci.yml +0 -0
  41. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/.gitignore +0 -0
  42. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/.pre-commit-config.yaml +0 -0
  43. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/CITATION.cff +0 -0
  44. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/CMakePresets.json +0 -0
  45. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/CONTRIBUTING.md +0 -0
  46. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/LICENSE +0 -0
  47. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/cmake/EmbedShaders.cmake +0 -0
  48. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/cmake/ErnieCPackOptions.cmake +0 -0
  49. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/cmake/ErnieConfig.cmake.in +0 -0
  50. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/cmake/ErnieInstall.cmake +0 -0
  51. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/cmake/ErnieLicenses.cmake +0 -0
  52. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/cmake/ErniePackaging.cmake +0 -0
  53. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/cmake/ErnieTesting.cmake +0 -0
  54. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/cmake/cppcheck/ernie.cfg +0 -0
  55. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/cmake/ernie_exports.map +0 -0
  56. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/cmake/third_party/dear_imgui/CMakeLists.txt +0 -0
  57. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/cmake/third_party/dear_imgui.cmake +0 -0
  58. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/cmake/third_party/dlpack.cmake +0 -0
  59. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/cmake/third_party/embed_file.cmake +0 -0
  60. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/cmake/third_party/glfw.cmake +0 -0
  61. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/cmake/third_party/glm.cmake +0 -0
  62. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/cmake/third_party/googletest.cmake +0 -0
  63. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/cmake/third_party/gui_fonts.cmake +0 -0
  64. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/cmake/third_party/imguizmo.cmake +0 -0
  65. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/cmake/third_party/implot.cmake +0 -0
  66. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/cmake/third_party/json.cmake +0 -0
  67. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/cmake/third_party/meshoptimizer.cmake +0 -0
  68. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/cmake/third_party/moltenvk.cmake +0 -0
  69. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/cmake/third_party/nanobind.cmake +0 -0
  70. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/cmake/third_party/openexr.cmake +0 -0
  71. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/cmake/third_party/slang.cmake +0 -0
  72. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/cmake/third_party/stb.cmake +0 -0
  73. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/cmake/third_party/tracy.cmake +0 -0
  74. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/cmake/third_party/vma/vma.cpp +0 -0
  75. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/cmake/third_party/vma.cmake +0 -0
  76. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/cmake/third_party/volk.cmake +0 -0
  77. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/cmake/third_party/vulkan_headers.cmake +0 -0
  78. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/demos/CMakeLists.txt +0 -0
  79. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/demos/batched/batch_camera.cpp +0 -0
  80. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/demos/batched/batch_camera.py +0 -0
  81. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/demos/main.cpp +0 -0
  82. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/demos/util.cpp +0 -0
  83. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/demos/util.h +0 -0
  84. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/docs/Makefile +0 -0
  85. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/docs/README.md +0 -0
  86. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/docs/api/cpp.md +0 -0
  87. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/docs/api/python/app.md +0 -0
  88. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/docs/api/python/astronomy.md +0 -0
  89. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/docs/api/python/batch.md +0 -0
  90. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/docs/api/python/cameras.md +0 -0
  91. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/docs/api/python/demo.md +0 -0
  92. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/docs/api/python/rendering.md +0 -0
  93. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/docs/api/python/scene.md +0 -0
  94. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/docs/api/python/schemas.md +0 -0
  95. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/docs/api/python/tokens.md +0 -0
  96. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/docs/concepts/cameras.md +0 -0
  97. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/docs/concepts/lighting.md +0 -0
  98. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/docs/concepts/materials.md +0 -0
  99. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/docs/concepts/scene.md +0 -0
  100. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/docs/concepts/sensor-filters.md +0 -0
  101. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/docs/concepts/shadows.md +0 -0
  102. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/docs/concepts/spectral.md +0 -0
  103. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/docs/concepts/star-fields.md +0 -0
  104. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/docs/concepts/terrain.md +0 -0
  105. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/docs/concepts/transforms.md +0 -0
  106. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/docs/css/extra.css +0 -0
  107. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/docs/extending/custom-aovs.md +0 -0
  108. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/docs/extending/custom-brdfs.md +0 -0
  109. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/docs/extending/custom-lenses.md +0 -0
  110. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/docs/extending/custom-panels.md +0 -0
  111. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/docs/extending/custom-render-delegates.md +0 -0
  112. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/docs/extending/custom-sensor-filters.md +0 -0
  113. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/docs/extending/custom-spectra.md +0 -0
  114. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/docs/extending/custom-star-catalogs.md +0 -0
  115. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/docs/extending/debug-draw.md +0 -0
  116. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/docs/extending/frame-callbacks.md +0 -0
  117. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/docs/extending/index.md +0 -0
  118. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/docs/getting-started/installation.md +0 -0
  119. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/docs/getting-started/quickstart.md +0 -0
  120. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/docs/getting-started/viewer.md +0 -0
  121. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/docs/guides/batched-rendering.md +0 -0
  122. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/docs/guides/gpu-interop.md +0 -0
  123. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/docs/guides/scenes.md +0 -0
  124. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/docs/index.md +0 -0
  125. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/docs/requirements.txt +0 -0
  126. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/CMakeLists.txt +0 -0
  127. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/app/CMakeLists.txt +0 -0
  128. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/app/app.h +0 -0
  129. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/app/builtin_panels.h +0 -0
  130. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/app/camera_panel.cpp +0 -0
  131. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/app/cli.cpp +0 -0
  132. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/app/cli.h +0 -0
  133. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/app/create.cpp +0 -0
  134. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/app/create.h +0 -0
  135. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/app/file_dialog.cpp +0 -0
  136. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/app/file_dialog.h +0 -0
  137. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/app/icons.h +0 -0
  138. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/app/log_panel.cpp +0 -0
  139. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/app/main.cpp +0 -0
  140. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/app/panel.cpp +0 -0
  141. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/app/panel.h +0 -0
  142. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/app/prim_icons.cpp +0 -0
  143. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/app/prim_icons.h +0 -0
  144. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/app/prim_schemas.cpp +0 -0
  145. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/app/prim_schemas.h +0 -0
  146. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/app/profiler_panel.cpp +0 -0
  147. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/app/properties_panel.cpp +0 -0
  148. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/app/property_fields.cpp +0 -0
  149. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/app/property_fields.h +0 -0
  150. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/app/session.cpp +0 -0
  151. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/app/session.h +0 -0
  152. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/app/settings_panel.cpp +0 -0
  153. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/app/stage_panel.cpp +0 -0
  154. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/app/theme.cpp +0 -0
  155. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/app/theme.h +0 -0
  156. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/app/viewer.cpp +0 -0
  157. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/app/viewer.h +0 -0
  158. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/device/CMakeLists.txt +0 -0
  159. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/device/buffer.cpp +0 -0
  160. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/device/buffer.h +0 -0
  161. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/device/compute_interop.cpp +0 -0
  162. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/device/compute_interop.h +0 -0
  163. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/device/cuda_interop.cpp +0 -0
  164. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/device/cuda_interop.h +0 -0
  165. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/device/frame_uploads.cpp +0 -0
  166. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/device/frame_uploads.h +0 -0
  167. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/device/gpu_profile.h +0 -0
  168. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/device/gpu_timer.cpp +0 -0
  169. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/device/gpu_timer.h +0 -0
  170. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/device/image.cpp +0 -0
  171. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/device/image.h +0 -0
  172. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/device/offscreen_target.cpp +0 -0
  173. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/device/offscreen_target.h +0 -0
  174. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/device/pipeline.cpp +0 -0
  175. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/device/pipeline.h +0 -0
  176. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/device/shader_compiler.cpp +0 -0
  177. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/device/shader_compiler.h +0 -0
  178. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/device/swapchain.cpp +0 -0
  179. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/device/swapchain.h +0 -0
  180. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/device/vulkan_context.cpp +0 -0
  181. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/device/vulkan_context.h +0 -0
  182. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/geometry/CMakeLists.txt +0 -0
  183. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/geometry/cube_sphere_lod.cpp +0 -0
  184. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/geometry/cube_sphere_lod.h +0 -0
  185. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/geometry/frustum.cpp +0 -0
  186. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/geometry/frustum.h +0 -0
  187. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/geometry/lod_quadtree.cpp +0 -0
  188. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/geometry/lod_quadtree.h +0 -0
  189. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/geometry/mesh_data.cpp +0 -0
  190. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/geometry/mesh_data.h +0 -0
  191. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/geometry/primitives.cpp +0 -0
  192. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/geometry/primitives.h +0 -0
  193. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/kernel/closure/brdf.slang +0 -0
  194. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/kernel/closure/hapke.slang +0 -0
  195. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/kernel/closure/lambert.slang +0 -0
  196. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/kernel/closure/lommel_seeliger.slang +0 -0
  197. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/kernel/closure/lunar_lambert.slang +0 -0
  198. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/kernel/closure/oren_nayar.slang +0 -0
  199. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/kernel/closure/preview_surface.slang +0 -0
  200. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/kernel/film/cube_faces.slang +0 -0
  201. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/kernel/film/filter_bayer.slang +0 -0
  202. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/kernel/film/filter_blooming.slang +0 -0
  203. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/kernel/film/filter_color_matrix.slang +0 -0
  204. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/kernel/film/filter_compand.slang +0 -0
  205. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/kernel/film/filter_compand_table.slang +0 -0
  206. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/kernel/film/filter_dark_current.slang +0 -0
  207. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/kernel/film/filter_defect_pixels.slang +0 -0
  208. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/kernel/film/filter_defocus.slang +0 -0
  209. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/kernel/film/filter_demosaic.slang +0 -0
  210. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/kernel/film/filter_detector_pattern.slang +0 -0
  211. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/kernel/film/filter_glare.slang +0 -0
  212. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/kernel/film/filter_jpeg.slang +0 -0
  213. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/kernel/film/filter_lag.slang +0 -0
  214. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/kernel/film/filter_measured_qe.slang +0 -0
  215. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/kernel/film/filter_psf.slang +0 -0
  216. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/kernel/film/filter_readout_taps.slang +0 -0
  217. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/kernel/film/filter_smear.slang +0 -0
  218. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/kernel/film/filter_spectral_transmission.slang +0 -0
  219. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/kernel/film/filter_tdi.slang +0 -0
  220. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/kernel/film/filter_temporal_average.slang +0 -0
  221. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/kernel/film/filter_tone_curve.slang +0 -0
  222. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/kernel/film/filter_white_balance.slang +0 -0
  223. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/kernel/film/lens.slang +0 -0
  224. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/kernel/film/pyramid.slang +0 -0
  225. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/kernel/raster/cull.slang +0 -0
  226. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/kernel/raster/depth_range.slang +0 -0
  227. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/kernel/raster/frame.slang +0 -0
  228. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/kernel/raster/ground.slang +0 -0
  229. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/kernel/raster/hzb.slang +0 -0
  230. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/kernel/raster/instance_anchors.slang +0 -0
  231. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/kernel/raster/instance_compose.slang +0 -0
  232. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/kernel/raster/light_views.slang +0 -0
  233. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/kernel/raster/mesh.slang +0 -0
  234. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/kernel/raster/mesh_normals.slang +0 -0
  235. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/kernel/raster/meter.slang +0 -0
  236. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/kernel/raster/minimal_resolve.slang +0 -0
  237. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/kernel/raster/motion.slang +0 -0
  238. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/kernel/raster/motion_vectors.slang +0 -0
  239. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/kernel/raster/overlay.slang +0 -0
  240. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/kernel/raster/planet.slang +0 -0
  241. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/kernel/raster/planet_color.slang +0 -0
  242. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/kernel/raster/planet_shadow.slang +0 -0
  243. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/kernel/raster/points.slang +0 -0
  244. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/kernel/raster/present.slang +0 -0
  245. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/kernel/raster/projection_pinhole.slang +0 -0
  246. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/kernel/raster/projection_pushbroom.slang +0 -0
  247. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/kernel/raster/shading.slang +0 -0
  248. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/kernel/raster/surface.slang +0 -0
  249. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/kernel/raster/terrain.slang +0 -0
  250. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/kernel/raster/terrain_color.slang +0 -0
  251. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/kernel/raster/terrain_horizon.slang +0 -0
  252. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/kernel/raster/terrain_shadow.slang +0 -0
  253. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/kernel/raster/terrain_update.slang +0 -0
  254. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/kernel/raster/views.slang +0 -0
  255. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/python/CMakeLists.txt +0 -0
  256. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/python/app.cpp +0 -0
  257. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/python/bindings.h +0 -0
  258. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/python/ernie/__init__.py +0 -0
  259. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/python/ernie/__main__.py +0 -0
  260. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/python/ernie/app.py +0 -0
  261. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/python/ernie/batch.py +0 -0
  262. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/python/ernie/cli.py +0 -0
  263. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/python/ernie/demo.py +0 -0
  264. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/python/ernie/demos/__init__.py +0 -0
  265. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/python/ernie/demos/__main__.py +0 -0
  266. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/python/ernie/schema.py +0 -0
  267. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/python/module.cpp +0 -0
  268. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/python/render.cpp +0 -0
  269. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/python/scene_json.cpp +0 -0
  270. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/python/schema.cpp +0 -0
  271. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/python/stub_schema.py +0 -0
  272. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/python/tensor.cpp +0 -0
  273. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/raster/CMakeLists.txt +0 -0
  274. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/raster/delegate.cpp +0 -0
  275. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/raster/delegate.h +0 -0
  276. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/raster/drawable.h +0 -0
  277. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/raster/ground_drawable.cpp +0 -0
  278. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/raster/ground_drawable.h +0 -0
  279. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/raster/material.cpp +0 -0
  280. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/raster/material.h +0 -0
  281. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/raster/mesh_drawable.cpp +0 -0
  282. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/raster/mesh_drawable.h +0 -0
  283. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/raster/minimal_targets.cpp +0 -0
  284. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/raster/minimal_targets.h +0 -0
  285. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/raster/overlay_pass.cpp +0 -0
  286. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/raster/overlay_pass.h +0 -0
  287. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/raster/planet_drawable.cpp +0 -0
  288. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/raster/planet_drawable.h +0 -0
  289. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/raster/points_drawable.cpp +0 -0
  290. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/raster/points_drawable.h +0 -0
  291. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/raster/poisson_disk.cpp +0 -0
  292. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/raster/poisson_disk.h +0 -0
  293. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/raster/render_targets.cpp +0 -0
  294. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/raster/render_targets.h +0 -0
  295. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/raster/renderer.h +0 -0
  296. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/raster/sensor_plan.cpp +0 -0
  297. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/raster/sensor_plan.h +0 -0
  298. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/raster/shadow_cascades.cpp +0 -0
  299. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/raster/shadow_cascades.h +0 -0
  300. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/raster/terrain_drawable.cpp +0 -0
  301. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/raster/terrain_drawable.h +0 -0
  302. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/scene/CMakeLists.txt +0 -0
  303. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/scene/base_schemas.cpp +0 -0
  304. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/scene/base_schemas.h +0 -0
  305. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/scene/brdf.cpp +0 -0
  306. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/scene/brdf.h +0 -0
  307. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/scene/cahvore.cpp +0 -0
  308. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/scene/cahvore.h +0 -0
  309. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/scene/camera.cpp +0 -0
  310. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/scene/camera.h +0 -0
  311. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/scene/camera_schemas.cpp +0 -0
  312. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/scene/camera_schemas.h +0 -0
  313. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/scene/edit_history.cpp +0 -0
  314. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/scene/edit_history.h +0 -0
  315. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/scene/geometry_schemas.cpp +0 -0
  316. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/scene/geometry_schemas.h +0 -0
  317. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/scene/instruments.cpp +0 -0
  318. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/scene/instruments.h +0 -0
  319. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/scene/light_schemas.cpp +0 -0
  320. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/scene/light_schemas.h +0 -0
  321. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/scene/material.h +0 -0
  322. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/scene/material_schemas.cpp +0 -0
  323. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/scene/material_schemas.h +0 -0
  324. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/scene/orbit_controller.cpp +0 -0
  325. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/scene/orbit_controller.h +0 -0
  326. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/scene/overlay.cpp +0 -0
  327. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/scene/overlay.h +0 -0
  328. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/scene/path.cpp +0 -0
  329. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/scene/path.h +0 -0
  330. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/scene/prim_type.cpp +0 -0
  331. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/scene/prim_type.h +0 -0
  332. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/scene/render_schemas.cpp +0 -0
  333. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/scene/render_schemas.h +0 -0
  334. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/scene/scene.cpp +0 -0
  335. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/scene/scene.h +0 -0
  336. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/scene/scene_json.cpp +0 -0
  337. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/scene/scene_json.h +0 -0
  338. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/scene/schema.cpp +0 -0
  339. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/scene/schema.h +0 -0
  340. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/scene/terrain_schemas.cpp +0 -0
  341. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/scene/terrain_schemas.h +0 -0
  342. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/scene/tokens.h +0 -0
  343. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/scene/value.h +0 -0
  344. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/scene/wide_view.cpp +0 -0
  345. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/scene/wide_view.h +0 -0
  346. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/scene/xform.cpp +0 -0
  347. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/scene/xform.h +0 -0
  348. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/session/CMakeLists.txt +0 -0
  349. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/session/backends.cpp +0 -0
  350. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/session/delegate.cpp +0 -0
  351. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/session/delegate.h +0 -0
  352. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/session/frame_params.cpp +0 -0
  353. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/session/frame_params.h +0 -0
  354. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/session/outputs.cpp +0 -0
  355. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/session/outputs.h +0 -0
  356. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/session/product_frame.h +0 -0
  357. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/session/renderer.cpp +0 -0
  358. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/session/renderer.h +0 -0
  359. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/session/resolve.cpp +0 -0
  360. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/session/resolve.h +0 -0
  361. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/session/sampling.h +0 -0
  362. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/test/CMakeLists.txt +0 -0
  363. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/test/app_demo_gpu_test.cpp +0 -0
  364. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/test/app_demo_test.cpp +0 -0
  365. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/test/app_file_dialog_test.cpp +0 -0
  366. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/test/app_panel_test.cpp +0 -0
  367. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/test/app_prim_schemas_test.cpp +0 -0
  368. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/test/app_session_test.cpp +0 -0
  369. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/test/app_theme_test.cpp +0 -0
  370. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/test/app_viewer_gpu_test.cpp +0 -0
  371. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/test/device_cuda_interop_test.cpp +0 -0
  372. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/test/device_frame_uploads_test.cpp +0 -0
  373. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/test/device_pipeline_test.cpp +0 -0
  374. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/test/device_shader_compiler_test.cpp +0 -0
  375. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/test/device_vulkan_context_test.cpp +0 -0
  376. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/test/fixtures/cahvore/README.md +0 -0
  377. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/test/fixtures/cahvore/m2020_camera_models.json +0 -0
  378. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/test/fixtures/images/grey16.png +0 -0
  379. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/test/fixtures/isd/constVelocityLineScan.json +0 -0
  380. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/test/fixtures/isd/ctxLineScan.json +0 -0
  381. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/test/fixtures/isd/dawnfc_radtan.json +0 -0
  382. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/test/fixtures/isd/lroWacPushFrame.json +0 -0
  383. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/test/fixtures/isd/orbitalFramer.json +0 -0
  384. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/test/fixtures/isd/orbitalLineScan.json +0 -0
  385. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/test/fixtures/isd/orbitalPushFrame.json +0 -0
  386. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/test/fixtures/isd/simpleFramerISD.json +0 -0
  387. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/test/fixtures/isd/toughLroNacLineScan.json +0 -0
  388. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/test/fixtures/scene_basic.json +0 -0
  389. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/test/geometry_cube_sphere_lod_test.cpp +0 -0
  390. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/test/geometry_frustum_test.cpp +0 -0
  391. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/test/geometry_lod_quadtree_test.cpp +0 -0
  392. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/test/geometry_mesh_data_test.cpp +0 -0
  393. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/test/geometry_primitives_test.cpp +0 -0
  394. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/test/install/CMakeLists.txt +0 -0
  395. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/test/install/consumer.cpp +0 -0
  396. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/test/install/run_install_test.cmake +0 -0
  397. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/test/python/conftest.py +0 -0
  398. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/test/python/test_app.py +0 -0
  399. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/test/python/test_batch.py +0 -0
  400. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/test/python/test_cahvore.py +0 -0
  401. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/test/python/test_cuda.py +0 -0
  402. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/test/python/test_demos.py +0 -0
  403. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/test/python/test_filters.py +0 -0
  404. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/test/python/test_instruments.py +0 -0
  405. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/test/python/test_map.py +0 -0
  406. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/test/python/test_materials.py +0 -0
  407. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/test/python/test_minimal.py +0 -0
  408. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/test/python/test_overlays.py +0 -0
  409. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/test/python/test_readme.py +0 -0
  410. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/test/python/test_render.py +0 -0
  411. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/test/python/test_scene.py +0 -0
  412. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/test/python/test_schema.py +0 -0
  413. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/test/python/test_schema_camera.py +0 -0
  414. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/test/python/test_schema_geometry.py +0 -0
  415. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/test/python/test_schema_material.py +0 -0
  416. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/test/python/test_schema_render.py +0 -0
  417. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/test/python/test_schema_terrain.py +0 -0
  418. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/test/python/test_stars.py +0 -0
  419. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/test/python/test_step.py +0 -0
  420. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/test/python/test_xform.py +0 -0
  421. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/test/python/test_xform_gpu.py +0 -0
  422. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/test/python/test_xform_gpu_cameras.py +0 -0
  423. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/test/python/test_xform_gpu_compose.py +0 -0
  424. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/test/python/test_xform_gpu_lights.py +0 -0
  425. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/test/python/test_xform_gpu_map.py +0 -0
  426. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/test/python/test_xform_gpu_points.py +0 -0
  427. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/test/raster_batch_gpu_test.cpp +0 -0
  428. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/test/raster_culling_gpu_test.cpp +0 -0
  429. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/test/raster_delegate_gpu_test.cpp +0 -0
  430. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/test/raster_delegate_test.cpp +0 -0
  431. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/test/raster_gpu_meshes_gpu_test.cpp +0 -0
  432. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/test/raster_gpu_terrain_gpu_test.cpp +0 -0
  433. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/test/raster_hex_tiling_gpu_test.cpp +0 -0
  434. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/test/raster_lens_rays_gpu_test.cpp +0 -0
  435. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/test/raster_lights_gpu_test.cpp +0 -0
  436. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/test/raster_mesh_drawable_test.cpp +0 -0
  437. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/test/raster_motion_gpu_test.cpp +0 -0
  438. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/test/raster_overlays_gpu_test.cpp +0 -0
  439. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/test/raster_planet_gpu_test.cpp +0 -0
  440. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/test/raster_points_gpu_test.cpp +0 -0
  441. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/test/raster_poisson_disk_test.cpp +0 -0
  442. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/test/raster_products_gpu_test.cpp +0 -0
  443. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/test/raster_sensor_filters_gpu_test.cpp +0 -0
  444. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/test/raster_sensor_plan_test.cpp +0 -0
  445. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/test/raster_shadow_cascades_test.cpp +0 -0
  446. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/test/raster_terrain_drawable_test.cpp +0 -0
  447. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/test/raster_textures_gpu_test.cpp +0 -0
  448. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/test/raster_zero_copy_gpu_test.cpp +0 -0
  449. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/test/scene_brdf_test.cpp +0 -0
  450. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/test/scene_brdf_vulkan_test.cpp +0 -0
  451. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/test/scene_cahvore_test.cpp +0 -0
  452. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/test/scene_camera_schemas_test.cpp +0 -0
  453. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/test/scene_camera_test.cpp +0 -0
  454. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/test/scene_edit_history_test.cpp +0 -0
  455. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/test/scene_geometry_schemas_test.cpp +0 -0
  456. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/test/scene_json_test.cpp +0 -0
  457. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/test/scene_material_schemas_test.cpp +0 -0
  458. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/test/scene_orbit_controller_test.cpp +0 -0
  459. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/test/scene_overlay_test.cpp +0 -0
  460. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/test/scene_path_test.cpp +0 -0
  461. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/test/scene_prim_type_test.cpp +0 -0
  462. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/test/scene_render_schemas_test.cpp +0 -0
  463. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/test/scene_scene_test.cpp +0 -0
  464. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/test/scene_schema_test.cpp +0 -0
  465. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/test/scene_sensor_filters_test.cpp +0 -0
  466. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/test/scene_terrain_schemas_test.cpp +0 -0
  467. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/test/scene_wide_view_test.cpp +0 -0
  468. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/test/scene_xform_test.cpp +0 -0
  469. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/test/session_delegate_test.cpp +0 -0
  470. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/test/session_frame_params_test.cpp +0 -0
  471. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/test/session_gpu_xform_test.cpp +0 -0
  472. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/test/session_lights_test.cpp +0 -0
  473. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/test/session_resolve_test.cpp +0 -0
  474. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/test/session_sampling_test.cpp +0 -0
  475. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/test/support/brdf_reference.h +0 -0
  476. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/test/support/delegate_scenes.cpp +0 -0
  477. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/test/support/delegate_scenes.h +0 -0
  478. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/test/support/terrain_harness.h +0 -0
  479. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/test/support/test_raster.h +0 -0
  480. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/test/support/vulkan_fixture.h +0 -0
  481. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/test/util_astronomy_test.cpp +0 -0
  482. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/test/util_ies_test.cpp +0 -0
  483. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/test/util_image_test.cpp +0 -0
  484. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/test/util_spectrum_test.cpp +0 -0
  485. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/test/util_tensor_test.cpp +0 -0
  486. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/util/CMakeLists.txt +0 -0
  487. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/util/astronomy.cpp +0 -0
  488. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/util/astronomy.h +0 -0
  489. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/util/ies.cpp +0 -0
  490. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/util/ies.h +0 -0
  491. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/util/image.cpp +0 -0
  492. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/util/image.h +0 -0
  493. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/util/least_squares.h +0 -0
  494. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/util/profile.h +0 -0
  495. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/util/profiler.cpp +0 -0
  496. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/util/profiler.h +0 -0
  497. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/util/raster_checks.h +0 -0
  498. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/util/raster_view.h +0 -0
  499. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/util/shader_source.h +0 -0
  500. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/util/spectrum.cpp +0 -0
  501. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/util/spectrum.h +0 -0
  502. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/util/tensor.cpp +0 -0
  503. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/ernie/util/tensor.h +0 -0
  504. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/pyproject.toml +0 -0
  505. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/third_party/README.md +0 -0
  506. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/third_party/cameramodelutilsjs/LICENSE +0 -0
  507. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/third_party/dlpack/LICENSE +0 -0
  508. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/third_party/dlpack/include/dlpack/dlpack.h +0 -0
  509. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/third_party/stb/LICENSE +0 -0
  510. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/third_party/stb/stb.cpp +0 -0
  511. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/third_party/stb/stb_easy_font.h +0 -0
  512. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/third_party/stb/stb_image.h +0 -0
  513. {ernie_renderer-0.1.0.dev196 → ernie_renderer-0.1.0.dev202}/third_party/stb/stb_image_write.h +0 -0
@@ -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 ".dev196" CACHE STRING "Pre-release suffix of Ernie's version, such as .dev12")
20
+ set(ERNIE_VERSION_SUFFIX ".dev202" 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
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ernie-renderer
3
- Version: 0.1.0.dev196
3
+ Version: 0.1.0.dev202
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
@@ -37,7 +37,7 @@ Description-Content-Type: text/markdown
37
37
 
38
38
  Ernie is a physically accurate, real-time, spectral renderer for interplanetary environments.
39
39
 
40
- We provide C++ and Python APIs and a Hydra-like scene API. It is a Vulkan 1.3 rasterizer that runs on Linux today, with Windows and macOS on the way. Ernie is designed around physical quantities rather than artistic parameters: lights, materials and cameras are described the way they are measured, so a render can be compared against a real instrument. For reinforcement learning, Ernie renders batches of cameras in one step, shares data zero copy with any DLPack tensor (PyTorch, JAX, Warp, NumPy), and has a fast mode with simpler shading.
40
+ We provide C++ and Python APIs and a Hydra-like scene API. It is a Vulkan 1.3 rasterizer that runs on Linux, and builds on Windows and macOS (experimental: not yet tested there). Ernie is designed around physical quantities rather than artistic parameters: lights, materials and cameras are described the way they are measured, so a render can be compared against a real instrument. For reinforcement learning, Ernie renders batches of cameras in one step, shares data zero copy with any DLPack tensor (PyTorch, JAX, Warp, NumPy), and has a fast mode with simpler shading.
41
41
 
42
42
  Ernie's key features related to planetary robotics and sensing:
43
43
 
@@ -6,7 +6,7 @@
6
6
 
7
7
  Ernie is a physically accurate, real-time, spectral renderer for interplanetary environments.
8
8
 
9
- We provide C++ and Python APIs and a Hydra-like scene API. It is a Vulkan 1.3 rasterizer that runs on Linux today, with Windows and macOS on the way. Ernie is designed around physical quantities rather than artistic parameters: lights, materials and cameras are described the way they are measured, so a render can be compared against a real instrument. For reinforcement learning, Ernie renders batches of cameras in one step, shares data zero copy with any DLPack tensor (PyTorch, JAX, Warp, NumPy), and has a fast mode with simpler shading.
9
+ We provide C++ and Python APIs and a Hydra-like scene API. It is a Vulkan 1.3 rasterizer that runs on Linux, and builds on Windows and macOS (experimental: not yet tested there). Ernie is designed around physical quantities rather than artistic parameters: lights, materials and cameras are described the way they are measured, so a render can be compared against a real instrument. For reinforcement learning, Ernie renders batches of cameras in one step, shares data zero copy with any DLPack tensor (PyTorch, JAX, Warp, NumPy), and has a fast mode with simpler shading.
10
10
 
11
11
  Ernie's key features related to planetary robotics and sensing:
12
12
 
@@ -28,8 +28,6 @@
28
28
  #include "ernie/scene/xform.h"
29
29
  #include "util.h"
30
30
 
31
- #include <imgui.h>
32
-
33
31
  #include <algorithm>
34
32
  #include <array>
35
33
  #include <cmath>
@@ -146,20 +144,15 @@ class IlluminantsDemo : public app::Demo {
146
144
  .SetAmbient(0.0);
147
145
  LightWith(0);
148
146
 
147
+ // The demo's option, in the Demos panel: the illuminant.
148
+ std::vector<std::string> names;
149
+ for (const Illuminant& illuminant : kIlluminants) {
150
+ names.emplace_back(illuminant.name);
151
+ }
152
+ Widgets().Combo("Illuminant", std::move(names), 0,
153
+ [this](std::size_t index) { LightWith(static_cast<int>(index)); });
149
154
  if (viewer != nullptr) {
150
- // In the viewer, a panel switches the illuminant.
151
155
  viewer->SetActiveCamera("/World/Camera");
152
- viewer->AddPanel("Illuminant", app::Dock::Right, [this](app::Viewer&) {
153
- int index = illuminant_;
154
- for (int i = 0; i < static_cast<int>(kIlluminants.size()); ++i) {
155
- if (ImGui::RadioButton(kIlluminants[i].name, i == index)) {
156
- index = i;
157
- }
158
- }
159
- if (index != illuminant_) {
160
- LightWith(index);
161
- }
162
- });
163
156
  }
164
157
  }
165
158
 
@@ -102,14 +102,11 @@ class Demo(ernie.demo.Demo):
102
102
  resolution=(448, 300), ambient=0.0)
103
103
  self.light_with(0)
104
104
 
105
+ # The demo's option, in the Demos panel: the illuminant.
106
+ self.widgets.combo("Illuminant", [name for name, _, _ in ILLUMINANTS], 0,
107
+ on_change=self.light_with)
105
108
  if viewer is not None:
106
- # In the viewer, a panel switches the illuminant.
107
- from ernie.app import Dock
108
-
109
109
  viewer.active_camera = camera.path
110
- panel = viewer.add_panel("Illuminant", Dock.RIGHT)
111
- panel.combo("Illuminant", [name for name, _, _ in ILLUMINANTS], 0,
112
- on_change=self.light_with)
113
110
 
114
111
  def light_with(self, index):
115
112
  _, illuminant, kelvin = ILLUMINANTS[index]
@@ -1,6 +1,6 @@
1
1
  // SPDX-License-Identifier: BSD-3-Clause
2
- // Opens the viewer on a scene built in code, with a panel of its own that moves the sun. The C++
3
- // twin of sun_panel.py.
2
+ // Opens the viewer on a scene built in code, with options in the Demos panel that move the sun.
3
+ // The C++ twin of sun_panel.py.
4
4
  //
5
5
  // ernie --demo viewer/sun_panel [--viewer null --output sun.png]
6
6
 
@@ -43,15 +43,15 @@ class SunPanelDemo : public app::Demo {
43
43
  .SetFocalLength(24.0)
44
44
  .SetTransform(LookAtTransform({0.0, -14.0, 6.0}, {0.0, 0.0, 0.5}, {0.0, 0.0, 1.0}));
45
45
  AimSun();
46
- if (viewer != nullptr) {
47
- // Panels draw with Dear ImGui and edit the scene, which the next frame renders.
48
- viewer->AddPanel("Sun", app::Dock::Left, [this](app::Viewer&) {
49
- bool changed = ImGui::SliderFloat("Elevation", &elevation_, 1.0f, 90.0f);
50
- changed |= ImGui::SliderFloat("Azimuth", &azimuth_, 0.0f, 360.0f);
51
- if (changed) {
52
- AimSun();
53
- }
54
- });
46
+ }
47
+
48
+ // The demo's options, in the Demos panel: sliders drawn with Dear ImGui that move the sun,
49
+ // which the next frame renders.
50
+ void Gui() override {
51
+ bool changed = ImGui::SliderFloat("Elevation", &elevation_, 1.0f, 90.0f);
52
+ changed |= ImGui::SliderFloat("Azimuth", &azimuth_, 0.0f, 360.0f);
53
+ if (changed) {
54
+ AimSun();
55
55
  }
56
56
  }
57
57
 
@@ -76,4 +76,4 @@ class SunPanelDemo : public app::Demo {
76
76
  } // namespace
77
77
 
78
78
  ERNIE_REGISTER_DEMO(SunPanelDemo, "viewer", "sun panel",
79
- "A scene built in code, with a panel of its own that moves the sun.");
79
+ "A scene built in code, with options that move the sun.");
@@ -1,6 +1,6 @@
1
1
  # SPDX-License-Identifier: BSD-3-Clause
2
- """Opens the viewer on a scene built in code, with a panel of its own that moves the sun. The
3
- Python twin of sun_panel.cpp.
2
+ """Opens the viewer on a scene built in code, with options in the Demos panel that move the sun.
3
+ The Python twin of sun_panel.cpp.
4
4
 
5
5
  python -m ernie.demos viewer/sun_panel [--viewer null --output sun.png]
6
6
  """
@@ -31,14 +31,11 @@ class Demo(ernie.demo.Demo):
31
31
  self.elevation = 45.0
32
32
  self.azimuth = 30.0
33
33
  self.aim_sun()
34
- if viewer is not None:
35
- from ernie.app import Dock
36
-
37
- panel = viewer.add_panel("Sun", Dock.LEFT)
38
- panel.slider("Elevation", 1.0, 90.0, self.elevation,
39
- on_change=lambda value: self.aim_sun(elevation=value))
40
- panel.slider("Azimuth", 0.0, 360.0, self.azimuth,
41
- on_change=lambda value: self.aim_sun(azimuth=value))
34
+ # The demo's options, in the Demos panel: sliders that move the sun.
35
+ self.widgets.slider("Elevation", 1.0, 90.0, self.elevation,
36
+ on_change=lambda value: self.aim_sun(elevation=value))
37
+ self.widgets.slider("Azimuth", 0.0, 360.0, self.azimuth,
38
+ on_change=lambda value: self.aim_sun(azimuth=value))
42
39
 
43
40
  def aim_sun(self, elevation=None, azimuth=None):
44
41
  self.elevation = self.elevation if elevation is None else elevation
@@ -24,7 +24,7 @@ python -m ernie.demos lighting/illuminants # one by name, with its options af
24
24
 
25
25
  From a checkout, run the files themselves (`PYTHONPATH=build/python python demos/lighting/illuminants.py`), or a C++ demo's own program, which `-DERNIE_BUILD_DEMOS=ON` builds as `demo_<category>_<name>` (`build/bin/demo_lighting_illuminants`).
26
26
 
27
- Each opens the viewer with a Demos panel on the left. Its menu lists the demos in the same language, by category; choosing one clears the scene and builds that demo in the same window. The panel also pauses, single-steps and resets the demo.
27
+ Each opens the viewer with a Demos panel at the bottom, a tab beside the Log and Stats. It lists the demos in the same language under a collapsing header per category; choosing one clears the scene and builds that demo in the same window. Below the list it pauses, single-steps and resets the running demo, describes it, and shows its options.
28
28
 
29
29
  Every demo takes these options:
30
30
 
@@ -76,10 +76,9 @@ class Demo(ernie.demo.Demo):
76
76
  tokens.TRANSFORM, ernie.distant_light_transform((0.4, -0.6, 0.7)))
77
77
  world.define("Camera", ernie.Camera).set(
78
78
  tokens.TRANSFORM, ernie.look_at_transform((0, -8, 3), (0, 0, 0.5)))
79
- if viewer is not None:
80
- panel = viewer.add_panel("Ball")
81
- panel.slider("Radius", 0.1, 2.0, 0.5,
82
- on_change=lambda value: self.ball.set(radius=value))
79
+ # The demo's options, shown in the Demos panel.
80
+ self.widgets.slider("Radius", 0.1, 2.0, 0.5,
81
+ on_change=lambda value: self.ball.set(radius=value))
83
82
 
84
83
  def step(self):
85
84
  self.ball.set(translate=(2.0 * self.time, 0, 0.5))
@@ -94,7 +93,8 @@ if __name__ == "__main__":
94
93
 
95
94
  What to know:
96
95
 
97
- - `viewer` is `None` under `--viewer null`, so put panels and other viewer calls under `if viewer is not None`. Give the scene a camera of its own: without a viewer, and in tests, the scene renders through it.
96
+ - A demo's own controls go in the Demos panel's Options section: add widgets to `self.widgets` (sliders, checkboxes, combos, buttons, plots), which works with or without a viewer. C++ demos can also override `Gui()` and draw there with Dear ImGui, as Newton's examples' `gui(ui)` does.
97
+ - `viewer` is `None` under `--viewer null`, so put other viewer calls (such as `active_camera`) under `if viewer is not None`. Give the scene a camera of its own: without a viewer, and in tests, the scene renders through it.
98
98
  - In a window `frame_dt` is the real time since the last frame (at most `max_frame_dt`). Without one it is `fixed_dt`, so runs repeat exactly. `self.time` is the demo's clock at the start of the step.
99
99
  - A demo uses the viewer as any application does: `add_panel`, `on_frame`, `add_hud_item`, `active_camera`, `viewport_display`. A demo registers in a scope of its own (`Viewer.scope`), so when the Demos panel switches away, what it added is removed, and the viewport's display settings are restored. A camera, lighting or RenderSettings it chooses is kept over the viewer's reset of its session.
100
100
  - Add your own options by overriding the class method `create_parser`, adding to what `super().create_parser()` returns. Give every option a default: the Demos panel opens demos with their defaults.
@@ -119,7 +119,7 @@ class BallDemo : public ernie::app::Demo {
119
119
  : Demo(viewer, options) {
120
120
  numFrames = 120;
121
121
  ernie::Sphere::Define(GetScene(), "/World/Ball").SetRadius(0.5);
122
- // ... a sun and a camera, and a panel when GetViewer() is not null
122
+ // ... a sun, a camera, and options: Widgets().Slider(...), or override Gui()
123
123
  }
124
124
 
125
125
  void Step() override {
@@ -0,0 +1,29 @@
1
+ // The readthedocs theme brings the current page's sidebar entry into view with scrollIntoView(),
2
+ // which scrolls every scrollable ancestor, the page included, so the page jumps to line up with the
3
+ // entry. Keep the theme's highlighting and expanding, but scroll only the sidebar, and only when
4
+ // the entry is out of its view.
5
+ (function () {
6
+ var nav = window.SphinxRtdTheme && window.SphinxRtdTheme.Navigation;
7
+ if (!nav || typeof nav.reset !== "function") {
8
+ return;
9
+ }
10
+ var reset = nav.reset;
11
+ nav.reset = function () {
12
+ var scrollIntoView = Element.prototype.scrollIntoView;
13
+ Element.prototype.scrollIntoView = function () {
14
+ var sidebar = document.querySelector("div.wy-side-scroll");
15
+ if (!sidebar || !sidebar.contains(this)) {
16
+ return scrollIntoView.apply(this, arguments);
17
+ }
18
+ var top = this.getBoundingClientRect().top - sidebar.getBoundingClientRect().top;
19
+ if (top < 0 || top > sidebar.clientHeight - this.offsetHeight) {
20
+ sidebar.scrollTop += top - sidebar.clientHeight / 3;
21
+ }
22
+ };
23
+ try {
24
+ return reset.apply(this, arguments);
25
+ } finally {
26
+ Element.prototype.scrollIntoView = scrollIntoView;
27
+ }
28
+ };
29
+ })();
@@ -3,6 +3,7 @@
3
3
 
4
4
  #include "ernie/app/panel.h"
5
5
 
6
+ #include <imgui.h>
6
7
  #include <stb_image_write.h>
7
8
 
8
9
  #include <algorithm>
@@ -199,6 +200,19 @@ void Demo::TestFinal() {
199
200
 
200
201
  void Demo::Close() {}
201
202
 
203
+ void Demo::Gui() {}
204
+
205
+ WidgetPanel& Demo::Widgets() {
206
+ return *SharedWidgets();
207
+ }
208
+
209
+ std::shared_ptr<WidgetPanel> Demo::SharedWidgets() {
210
+ if (!widgets_) {
211
+ widgets_ = std::make_shared<WidgetPanel>("Options", Dock::Floating);
212
+ }
213
+ return widgets_;
214
+ }
215
+
202
216
  std::uint64_t Demo::NumFrames() const {
203
217
  return numFrames;
204
218
  }
@@ -320,12 +334,12 @@ struct DemoRunner::State {
320
334
  Viewer::Gizmo gizmo = Viewer::Gizmo::None;
321
335
  bool gizmoLocal = false;
322
336
 
323
- // The Demos panel and what it asked for during the last frame.
324
- WidgetPanel* panel = nullptr;
325
- WidgetPanel::Id status = 0;
326
- WidgetPanel::Id about = 0;
337
+ // The Demos panel, the demo it shows, and what it asked for during the last frame.
338
+ Panel* panel = nullptr;
339
+ Demo* running = nullptr;
340
+ std::string about; ///< The running demo's description.
341
+ bool paused = false;
327
342
  std::optional<std::size_t> switchTo;
328
- std::optional<bool> pausedRequest;
329
343
  bool resetRequested = false;
330
344
  bool singleStep = false;
331
345
 
@@ -340,11 +354,9 @@ struct DemoRunner::State {
340
354
  }
341
355
 
342
356
  void Announce(Demo& demo) {
343
- const std::string description = DescriptionOf(demo);
344
- viewer->Log(LogLevel::Info, "Demo: " + (description.empty() ? "untitled" : description));
345
- if (panel != nullptr) {
346
- panel->Set(about, description);
347
- }
357
+ running = &demo;
358
+ about = DescriptionOf(demo);
359
+ viewer->Log(LogLevel::Info, "Demo: " + (about.empty() ? "untitled" : about));
348
360
  }
349
361
 
350
362
  std::string DescriptionOf(Demo& demo) const {
@@ -355,35 +367,77 @@ struct DemoRunner::State {
355
367
  return description;
356
368
  }
357
369
 
358
- void AddPanel(Demo& demo) {
370
+ void AddPanel() {
359
371
  const std::uint64_t previous = viewer->Scope();
360
372
  viewer->SetScope(0);
361
- panel = &viewer->AddWidgetPanel("Demos", Dock::Left);
362
- if (catalog.empty()) {
363
- panel->Text("No other demos");
364
- } else {
365
- std::vector<std::string> labels;
366
- for (const DemoInfo& info : catalog) {
367
- labels.push_back(info.Label());
368
- }
369
- panel->Combo("Demo", std::move(labels), current,
370
- [this](std::size_t index) { switchTo = index; });
373
+ // In the bottom dock with the Log and Stats, the Log staying in front.
374
+ panel = &viewer->AddPanel("Demos", Dock::Bottom, [this](Viewer& v) { DrawPanel(v); });
375
+ if (viewer->FindPanel("Log") != nullptr) {
376
+ viewer->FocusPanel("Log");
371
377
  }
372
- panel->Separator();
373
- panel->Checkbox("Paused", options.paused, [this](bool on) { pausedRequest = on; });
374
- panel->Button("Step", [this] { singleStep = true; });
375
- panel->Button("Reset", [this] { resetRequested = true; });
376
- status = panel->Text("");
377
- panel->Separator();
378
- about = panel->Text(DescriptionOf(demo));
379
378
  viewer->SetScope(previous);
380
379
  }
381
380
 
381
+ /// The Demos panel, after Newton's example browser: a menu of the demos with a node per
382
+ /// category, the running demo's controls and description, and its own options.
383
+ void DrawPanel(Viewer& v) {
384
+ // A collapsing header per category, the catalogue listing each category's demos
385
+ // together; the running demo's opens first.
386
+ for (std::size_t first = 0; first < catalog.size();) {
387
+ const std::string& category = catalog[first].category;
388
+ std::size_t end = first;
389
+ while (end < catalog.size() && catalog[end].category == category) {
390
+ ++end;
391
+ }
392
+ ImGui::SetNextItemOpen(current >= first && current < end, ImGuiCond_Appearing);
393
+ if (ImGui::CollapsingHeader(category.c_str())) {
394
+ ImGui::Indent();
395
+ for (std::size_t i = first; i < end; ++i) {
396
+ if (ImGui::Selectable(catalog[i].name.c_str(),
397
+ i == current && running != nullptr)) {
398
+ switchTo = i;
399
+ }
400
+ }
401
+ ImGui::Unindent();
402
+ }
403
+ first = end;
404
+ }
405
+ ImGui::SeparatorText(running != nullptr && current < catalog.size()
406
+ ? catalog[current].Label().c_str()
407
+ : "No demo");
408
+ ImGui::Checkbox("Paused", &paused);
409
+ ImGui::SameLine();
410
+ if (ImGui::Button("Step")) {
411
+ singleStep = true;
412
+ }
413
+ ImGui::SameLine();
414
+ if (ImGui::Button("Reset")) {
415
+ resetRequested = true;
416
+ }
417
+ if (running == nullptr) {
418
+ return;
419
+ }
420
+ ImGui::SameLine();
421
+ ImGui::TextDisabled("frame %llu, %.2f s", static_cast<unsigned long long>(running->frame),
422
+ running->time);
423
+ if (!about.empty()) {
424
+ ImGui::TextWrapped("%s", about.c_str());
425
+ }
426
+ ImGui::SeparatorText("Options");
427
+ ImGui::PushID("options");
428
+ running->Widgets().Draw(v);
429
+ running->Gui();
430
+ ImGui::PopID();
431
+ }
432
+
382
433
  /// Replaces `old` with a new build of the catalogue's demo `index`; null, with the error in
383
434
  /// the log, if it cannot be built.
384
435
  std::shared_ptr<Demo> Load(std::shared_ptr<Demo> old, std::size_t index) {
436
+ running = nullptr;
385
437
  if (old) {
386
438
  old->Close();
439
+ // Its widgets' callbacks may hold it (in Python, a cycle through C++).
440
+ old->Widgets().Clear();
387
441
  }
388
442
  viewer->RemoveScope(scope);
389
443
  RestoreDisplay();
@@ -407,9 +461,7 @@ struct DemoRunner::State {
407
461
  viewer->RemoveScope(scope);
408
462
  viewer->ClearScene();
409
463
  viewer->ResetSession();
410
- if (panel != nullptr) {
411
- panel->Set(about, std::string());
412
- }
464
+ about.clear();
413
465
  return nullptr;
414
466
  }
415
467
  }
@@ -417,6 +469,7 @@ struct DemoRunner::State {
417
469
  /// Removes the running demo's registrations and the panel, which hold the demo (and in
418
470
  /// Python, through it the viewer).
419
471
  void Release() {
472
+ running = nullptr;
420
473
  if (!viewer) {
421
474
  return;
422
475
  }
@@ -519,20 +572,18 @@ std::shared_ptr<Demo> DemoRunner::Run(std::shared_ptr<Demo> demo) {
519
572
  try {
520
573
  if (viewer != nullptr) {
521
574
  viewer->ResetSession();
522
- if (o.Windowed() && !o.test) {
523
- s.AddPanel(*demo);
575
+ // The Demos panel, also in a hidden viewer, whose window captures show it; not in
576
+ // test runs, which check one demo.
577
+ if (!o.test) {
578
+ s.AddPanel();
524
579
  }
525
580
  s.Announce(*demo);
526
581
  }
527
- bool paused = o.paused && o.Windowed();
582
+ s.paused = o.paused && o.Windowed();
528
583
  std::optional<Clock::time_point> timerStart;
529
584
  std::uint64_t timedFrames = 0;
530
585
  Clock::time_point last = Clock::now();
531
586
  while (viewer == nullptr || viewer->IsOpen()) {
532
- if (s.pausedRequest) {
533
- paused = *s.pausedRequest;
534
- s.pausedRequest.reset();
535
- }
536
587
  if (s.switchTo || s.resetRequested) {
537
588
  const std::size_t index = s.switchTo.value_or(s.current);
538
589
  s.switchTo.reset();
@@ -543,13 +594,6 @@ std::shared_ptr<Demo> DemoRunner::Run(std::shared_ptr<Demo> demo) {
543
594
  viewer->Step();
544
595
  continue;
545
596
  }
546
- if (s.panel != nullptr) {
547
- char status[96];
548
- std::snprintf(status, sizeof(status), "frame %llu, %.2f s%s",
549
- static_cast<unsigned long long>(demo->frame), demo->time,
550
- paused ? " (paused)" : "");
551
- s.panel->Set(s.status, std::string(status));
552
- }
553
597
  const std::optional<std::uint64_t> limit =
554
598
  o.numFrames ? o.numFrames
555
599
  : (o.Windowed() ? std::nullopt
@@ -563,8 +607,8 @@ std::shared_ptr<Demo> DemoRunner::Run(std::shared_ptr<Demo> demo) {
563
607
  demo->MaxFrameDt())
564
608
  : demo->FixedDt();
565
609
  last = now;
566
- bool stepping = !paused;
567
- if (paused && s.singleStep) {
610
+ bool stepping = !s.paused;
611
+ if (s.paused && s.singleStep) {
568
612
  stepping = true;
569
613
  s.singleStep = false;
570
614
  }
@@ -621,8 +665,13 @@ std::shared_ptr<Demo> DemoRunner::Run(std::shared_ptr<Demo> demo) {
621
665
  std::fflush(stdout);
622
666
  if (demo) {
623
667
  demo->Close();
668
+ // Its widgets' callbacks may hold it (in Python, a cycle through C++).
669
+ demo->Widgets().Clear();
624
670
  }
625
671
  } catch (...) {
672
+ if (demo) {
673
+ demo->Widgets().Clear();
674
+ }
626
675
  s.Release();
627
676
  throw;
628
677
  }
@@ -106,6 +106,20 @@ class Demo {
106
106
  /// replaces it; for timing reports and the like.
107
107
  virtual void Close();
108
108
 
109
+ /// Draws the demo's own controls with Dear ImGui (`#include <imgui.h>`) in the Demos panel's
110
+ /// Options section each frame, after its `Widgets`, as Newton's examples' `gui(ui)` does;
111
+ /// nothing by default. Runs only in a viewer.
112
+ virtual void Gui();
113
+
114
+ /// The demo's controls in the Demos panel's Options section, as widgets (sliders, checkboxes,
115
+ /// combos) rather than ImGui calls, as Python demos add theirs (`widgets`). Add them in the
116
+ /// constructor, with or without a viewer; the runner drops them, with their callbacks, when
117
+ /// the demo ends or is replaced.
118
+ WidgetPanel& Widgets();
119
+
120
+ /// `Widgets` shared, for holders that may outlive the demo, such as its Python wrapper.
121
+ std::shared_ptr<WidgetPanel> SharedWidgets();
122
+
109
123
  /// Frames to run without a window when `--num-frames` is not given: `numFrames`.
110
124
  virtual std::uint64_t NumFrames() const;
111
125
  /// Seconds a step advances without a window, for runs that repeat: `fixedDt`.
@@ -160,6 +174,7 @@ class Demo {
160
174
  DemoOptions options_;
161
175
  std::shared_ptr<Scene> ownScene_;
162
176
  std::shared_ptr<Renderer> renderer_;
177
+ std::shared_ptr<WidgetPanel> widgets_;
163
178
  Tensor image_;
164
179
  bool untestedSteps_ = false;
165
180
  bool untestedFinal_ = false;
@@ -21,6 +21,7 @@ set(ernie_shaders
21
21
  film/filter_defect_pixels.slang=kFilterDefectPixelsSlang
22
22
  film/filter_demosaic.slang=kFilterDemosaicSlang
23
23
  film/filter_detector_pattern.slang=kFilterDetectorPatternSlang
24
+ film/filter_flare.slang=kFilterFlareSlang
24
25
  film/filter_glare.slang=kFilterGlareSlang
25
26
  film/filter_jpeg.slang=kFilterJpegSlang
26
27
  film/filter_lag.slang=kFilterLagSlang
@@ -29,6 +30,7 @@ set(ernie_shaders
29
30
  film/filter_readout_taps.slang=kFilterReadoutTapsSlang
30
31
  film/filter_smear.slang=kFilterSmearSlang
31
32
  film/filter_spectral_transmission.slang=kFilterSpectralTransmissionSlang
33
+ film/filter_stray_light.slang=kFilterStrayLightSlang
32
34
  film/filter_tdi.slang=kFilterTdiSlang
33
35
  film/filter_temporal_average.slang=kFilterTemporalAverageSlang
34
36
  film/filter_tone_curve.slang=kFilterToneCurveSlang
@@ -44,6 +44,7 @@ extern const char kFilterDemosaicSlang[];
44
44
  extern const char kFilterJpegSlang[];
45
45
  extern const char kFilterSmearSlang[];
46
46
  extern const char kFilterDetectorPatternSlang[];
47
+ extern const char kFilterFlareSlang[];
47
48
  extern const char kFilterGlareSlang[];
48
49
  extern const char kFilterLagSlang[];
49
50
  extern const char kFilterMeasuredQeSlang[];
@@ -52,6 +53,7 @@ extern const char kFilterReadoutTapsSlang[];
52
53
  extern const char kFilterTdiSlang[];
53
54
  extern const char kFilterTemporalAverageSlang[];
54
55
  extern const char kFilterSpectralTransmissionSlang[];
56
+ extern const char kFilterStrayLightSlang[];
55
57
  extern const char kFilterToneCurveSlang[];
56
58
  extern const char kFilterWhiteBalanceSlang[];
57
59