From aa076d12ea7d88c16c3bf2e8b00ab7a713d87a47 Mon Sep 17 00:00:00 2001
From: Filip Jeretina <59307111+zrezke@users.noreply.github.com>
Date: Wed, 3 May 2023 10:40:58 +0200
Subject: [PATCH 001/107] v0.0.1 of DepthaiViewer, WIP (#1)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
* node graph scaffolding and a bit of depthai integration
* remove import
* left, right + depth
* fix fps sliders for mono cams
* partial refactor, partially added support for device selection.
* pc support + currently selected device fixes
* reafactor subscriptions to api, doesn't work too well, trouble with syncing the ui with the backend
* Partially migrated to websockets for the api
* finish moving to websockets for the config api
* fix issues after merge, retry websocket connections
* fix ws thread not exiting
* sleep for 1 sec before trying to reconnect
* Ai support + imu support + rotate camera + bug fixes (#9)
* ai support + update pipeline on device select
* quick fix depth
* set subs when selecting device
* rename to Depthai Viewer, use changed() for config ui, disable ui when device not selected
* added age gender detection
* added mobilenet support
* pointcloud support
* Toggle subs from visible (#4)
* very bad implementation of toggling subscriptions based on space view visibility TODO: less cloning and stuff
* better implementation and actually seems to work
* fix windows not resizing properly when size gets smaller
* fix issues with 3d when resizing scene bbox, only force 2d to always have the size of self.scene_bbox
* Nuked Subscriptions struct, just use Vec, much nicer, much better aswell, also fixed subscriptions for channels that need some time to actually show up, it all feels a bit hacky tho
* Toggle subs from visible (#5)
* very bad implementation of toggling subscriptions based on space view visibility TODO: less cloning and stuff
* better implementation and actually seems to work
* fix windows not resizing properly when size gets smaller
* fix issues with 3d when resizing scene bbox, only force 2d to always have the size of self.scene_bbox
* Nuked Subscriptions struct, just use Vec, much nicer, much better aswell, also fixed subscriptions for channels that need some time to actually show up, it all feels a bit hacky tho
* fix incorrect despawn of entity paths
* remove todo comment
* Fix ws not sending messages, fix stutter every 2s (#6)
* very bad implementation of toggling subscriptions based on space view visibility TODO: less cloning and stuff
* better implementation and actually seems to work
* fix windows not resizing properly when size gets smaller
* fix issues with 3d when resizing scene bbox, only force 2d to always have the size of self.scene_bbox
* Nuked Subscriptions struct, just use Vec, much nicer, much better aswell, also fixed subscriptions for channels that need some time to actually show up, it all feels a bit hacky tho
* fix incorrect despawn of entity paths
* remove todo comment
* error handling
* fix websocket not sending pipeline, hotfix more or less might keep
* change back to unbounded
* Imu support (#8)
* add imu logging, exclude it from regular space views
* fix imu logging
* POC imu plotting
* Imu accelerometer and gyroscope plotting
* add orientation to imu log, make device id a String
* fix imu charts layout
* imu log add magnetometer
* fix right panel ui as much as it makes sense to fix rn
* sadly idk how to create Option::None in pyarrow for the magnetometer field
* imu logging fixed, magnetometer value is now None when not logged
* fix plot scrolling
* Merge upstream (#10)
* `arrow2_convert` primitive (de)serialization benchmarks (#1742)
* arrow2_convert primitive benchmarks
* addressing PR comments
* Fix logged obb being displayed with half of the requested size (#1749)
* benchmarks for common vector ops across `smallvec`/`tinyvec`/std (#1747)
* benchmarks for common vector ops
* handle N=1
* Tracked 3D cameras lead now to on-hover rays in other space views that show the same camera but don't track it. (#1751)
In the same way as a 2D scene causes a on-hover ray in all space views that contain the space camera at which the 2D view "sits".
* Improve dealing with raw buffers for texture read/write (#1744)
* Replace TextureRowDataInfo with the more versatile Texture2DBufferInfo
* comment & naming fixes
* `arrow2` erased refcounted clones benchmarks (#1745)
* arrow2 erased refcounted clone benchmarks
* lint
* addressing PR comments
* dude
* `arrow2` estimated_bytes_size benchmarks (#1743)
* arrow2 estimated_bytes_size benchmarks
* cleanup
* Fix crash when trying to do picking on depth clouds
* Readback depth from GPU picking (#1752)
* gpu picking in the viewer picks up depth now
* WebGL workarounds
* Add new ARKitScenes example (#1538)
Co-authored-by: Nikolaus West
Co-authored-by: Emil Ernerfeldt
* Fix log_obb usage (#1761)
* Make sure all log_obb uses uses half_size correctly
* Remove outdated link from README
* Fix docstring of save
* Force named arguments of log_scalar
* Add link to --memory-limit docs
* update ros example
* Python SDK: document that we also accept colors in 0-1 floats (#1740)
* Python SDK: document that we also accept colors in 0-1 floats
* Assume float colors to be in gamma-space, and document that
* Update arkitscenes example
* Fix bug
* typo
* py-format
* Collapse space-view by default if there is only one child (#1762)
* Always create the log_time timeline (#1763)
* Columnar timepoints in data tables and during transport (#1767)
* columnar timepoints
* self review
* Fix undo/redo selection shortcut/action changing selection history without changing selection (#1765)
* Fix undo/redo selection shortcut/action changing selection history without changing selection
Fixes #1172
* typo fix
* Don't initialize an SDK session if we are only going to be launching the app (#1768)
* Allow torch tensors for log_rigid3 (#1769)
* Option to show scene bounding box (#1770)
* Include depth clouds in bounding box calculation
* Don't wrap text when showing bbox in ui
* Handle projective transforms
* Nicer selection view: don't wrap second column too early
* Add checkbox to show the scene bounding box
* Fix a whole lot of crashes, all at once (#1780)
* Add typing_extensions to requirements-doc.txt (#1786)
* auto_color class-ids if they are present (#1783)
* auto_color class-ids if they are present
* Update log line in segmentation demo
* Avoid tuple structs
* Don't run 3rd party bench suites on CI (#1787)
* dont run 3rd party bench suites on CI
* typo
* and other annoyances
* Use copilot markers in PR template (#1784)
* Use copilot markers in PR template
* remove poem
Co-authored-by: Clement Rey
---------
Co-authored-by: Clement Rey
* re_format: barebone support for custom formatting (#1776)
* implement barebone support for custom formatting and apply to Tuid
* unwrap
* rather than []
* use re_tuid
* Always send recording_id as part of LogMsg (#1778)
* Always send recording_id as part of LogMsg
* Rename build_chunk_from_components -> build_data_table_from_components
* Don't make RecordingInfo optional
* Always default the recording id
* Log an error if we hit the initialization issue
* Refactor: Add new helper crate `re_log_encoding` (#1772)
* CI: Check `rerun` with --no-default features and/or with --features sdk
* Create a new helper crate re_transport containing stream_rrd_from_http
* Fix warnings
* Move file sink to re_transport
* wasm compilation fix
* Move LogMsg encoding/decoding into re_transport
* Fix typo
* Fix web build
* Fix tests
* Remove a lot of unused dependencies with `cargo machete`
* Build fix
* Clarify
* Rename the crate to re_log_encoding
* better docstring
Co-authored-by: Jeremy Leibs
* better readme
Co-authored-by: Jeremy Leibs
---------
Co-authored-by: Jeremy Leibs
* New example code for facebook research segment anything (#1788)
* New example code for facebook research segment anything
* Add segmentation workaround for users still on 0.4.0
* Images should use class-id as label
* Add an alternative tensor-based view
* Implement `re_tuid::Tuid::random()` on web (#1796)
* Implement `re_tuid::Tuid::random()` on web
* Fix bad error message
* ci: fix benchmarks (#1799)
* workflow: just run --all
* datastore: skip bucket permutations etc on CI
* i give up, just replace re_log_types by re_log_encoding
* Add `minimal_options` example (`RerunArgs`) (#1773)
* Allows connecting to remote server through rerun's RerunArgs.
Co-authored-by: Clement Rey
* Add `pacman` support to `setup_web.sh` (#1797)
Co-authored-by: Clement Rey
* fix ci (cargo-deny): cargo update -p crossbeam-channel (#1806)
* Compile with `panic = "abort"` (#1813)
* Compile with `panic = "abort"`
This PR sets `panic = "abort"` for both debug and release builds.
This cuts down the `rerun` binary size in release builds from
29.9 MB to 22.7 MB - a 25% reduction!
## Details
The default panic behavior in Rust is to unwind the stack.
This leads to a lot of extra code bloat, and some missed
opportunities for optimization.
The benefit is that one can let a thread die without crashing the whole
application, and one can use `std::panic::catch_unwind` as a kind of
try-catch block.
We don't make use of these features at all (at least not intentionally),
and so are paying a cost for something we don't need.
I would also argue that a panic SHOULD lead to a hard crash unless
you are building an Erlang-like robust actor system where you use
defensive programming to protect against programmer errors
(all panics are programmer errors - user errors should use `Result`).
* Quiet clippy
* Add `rerun --strict`: crash if any warning or error is logged (#1812)
* Add `rerun --strict`: crash if any warning or error is logged
Part of https://github.com/rerun-io/rerun/issues/1483
* Can't doc-test private functions
* Refactor: Remove `TensorTrait` (#1819)
* Refactor: Remove `TensorTrait`
We don't need it anymore
* End-to-end testing of python logging -> store ingestion (#1817)
* Sort the arguments to `rerun`
* Pass on `LogMsg::Goodbye` just like any other message
* Add `rerun --test-receive`
* `just py-build --quiet` is now possible
* Add scripts/run_python_e2e_test.py
* replace `cargo r -p rerun` with `python3 -m rerun`
* lint and explain choice of examples
* Add to CI
* check returncode
* Fix e2e test on CI: Don't try to re-build rerun-sdk (#1821)
* Use gpu picking for points, streamline/share picking code some more (#1814)
* use gpu picking for picking points
* gpu based picking no longer works like a fallback but integrates with other picking sources
* fix incorrect cursor rounding for picking
* refactor picking context to be a pub struct with exposed state
* unify ui picking method for 2d & 3d space views
* less indentation for picking method
* picking rect size is dynamically chosen
* fix accidental z scaling in projection correction for picking & make cropped_projection_from_projection easier to read
* CI: install pip requirements for Python e2e test
* Process 2d points always in batches (#1820)
* Fix CI syntax error
* New option to disable persistent storage (#1825)
* New option to disable persistent storage
* New API to reset_time (#1826)
* Datastore revamp 1: new indexing model & core datastructures (#1727)
* Datastore revamp 2: serialization & formatting (#1735)
* Datastore revamp 3: efficient incremental stats (#1739)
* Datastore revamp 4: sunset `MsgId` (#1785)
* Datastore revamp 5: (#1791)
* Datastore revamp 6: sunset `LogMsg` storage + save store to disk (#1795)
* Datastore revamp 7: garbage collection (#1801)
* Don't assert if inserting a rowid with a matching timepoint does not create a conflict (#1832)
* CI: Try installing the correct wheel on CI
* CI: try again with the CI
* re_query: up to date with latest data types and structures (#1828)
* No more raw arrays for primary components
* Don't need to carry around component names no more
* Cluster keys are now raw-array-less and _not_ optional anymore
* that is done indeed
* helpers
* datastore: incremental metadata registry stats (#1833)
* add profile scopes for stats
* implement incremental metadata registry stats
* lint
* future proofing comment
* RFC: datastore state of the union & end-to-end batching (#1610)
* add batching rfc
* Update design/batching.md
Co-authored-by: Emil Ernerfeldt
* Update design/batching.md
Co-authored-by: Emil Ernerfeldt
* Update design/batching.md
Co-authored-by: Emil Ernerfeldt
* Update design/batching.md
Co-authored-by: Emil Ernerfeldt
* qa component instances vs. instance keys
* no sticky
* qa are there any special components & non-integer instance keys
* give some clue about cell incompatibility
* temporary constructs
* zstd is already setup
* more planning
* date and links
---------
Co-authored-by: Emil Ernerfeldt
* Python CI: use bash as shell
* Fix too many points crash (#1822)
* Simplify point cloud builder and fix crash on too many points
Fixes #1779
* faster point cloud population by not chaining iterators with default values
* Use GPU picking for line(like) primitives, fix `interactive` flags (#1829)
* line strip builder no longer has user data, exposes picking id instead (not implemented yet)
* handle interactive object property when evaluating picking code
* take line strip builder directly when building up line draw data
* finish implementing picking for lines
* remove unused iter_strips_with_vertices
* Simplify picking handling now that there are a lot less types. Labels & textured rects are always picked now, fixes #1021
* CI: try to fix mac wheel build
* Reduce memory used by staging belts on Web (#1836)
In particular this prevents crashing with out of memory on a run-away belt memory usage caused by failure to unmap buffers. A bit concerningly, the fix uses our knowledge of how `wgpu::Device::poll` is broken in the current wgpu version.
I took the opportunity to sharpens the definition of `HardwareTier` a bit.
* CI: only test the x86_64 wheel on macos
* Always flush when we remove a sink (#1830)
Whenever we disconnect (or implicitly disconnect by swapping a sink) we should flush the pending messages. Additionally disconnect and flush calls both require releasing the GIL (for the same reason as shutdown previously).
* GPU colormapping, first step (#1835)
* Add TextureManager2D::get_or_create_with
* Small code cleanup
* Add code to upload a Tensor to a GPU texture
* Add helper method Tensor::image_height_width_depth
* Minor code cleanup (multiplicative_tint)
* Hook up color textures via the new path
* Refactor: introduce ColormappedTexture
* Start working on an uint sampler
* merge fix
* Dumb colormapping of depth textures!
* Use turbo for depth maps (and single-channel images :grimace:)
* Use grayscale for luminance
* ColorMap -> Colormap
* Apply annotation context colormaps
* Support sint textures too
* cleanup
* merge fix
* Fix RGB images
* More cleanup
* Better error-handlign and nicer error message
* Clean up the SAMPLE_TYPE with constants
* Nicer shader interface
* Better error handling
* Remove dead code
* Self-review cleanup
* Fix bug in shader when sampling sint textures
* Use textureSampleLevel
* Apply a gamma to the image (unused as of now)
* image_height_width_channels
* fix various review comments
* Optimize narrow_f64_to_f32s: avoid one allocation
* Test and handle all tensor dtypes as images (#1840)
* Support i64 and u64 tensors
* api_demo: log all image types
* Don't even print out the contents of a tensor
* Handle unfilterable float textures
* fix typo
* py-format
* Simplify is_float_filterable
* Add a helper function pad_and_narrow_and_cast
* Reuse existing image
* Exclude image_tensors demo from default api_demo
* Still run all api demos in e2e test
* pyformat
* Install the rerun-sdk in CI using --no-index and split out linux wheel build to run first. (#1838)
* Install the rerun-sdk by the expected version
* Fix comment
* typo
* Use --no-index when installing the rerun wheel
* Use the cargo_version, not the new_version
* Split dependency install into its own step
* Don't use force-reinstall
* Refactor setting of expected_version variable.
* Use bash when setting env
* Always run the linux job first and use its rrds for the other wheels
* GPU tensor colormapping (#1841)
* Refactor: introduce struct SliceSelection
* Refactor: use SliceSelection inside of ViewTensorState
* MVP of tensor colormapping on GPU
* Remove old ui code
* Support 64-bit tensors by narrowing to f32
* Allow more colormap options
* Clippy
* Report range errors instead of ignoring them
* Sort colormaps
* Shorten function name
* Create module gpu_bridge
* Move some code around
* Simnplify API
* Create ViewBuilder::new
* Fix missing colon in lint.py
* fix typos and formatting
* Disable texture filtering options for tensors for now
* Update docstrings
* Add profile scopes
* ViewBuilder cleanup
* Make ViewBuilder::setup non-Option
* Remove Result from thing that cannot fail
* Fix colormap numbering
* review cleanup
* pass in debug_name
* Unify the `range` function
* typo
* Show previews of colormaps when selecting them (#1846)
* Make infallible version of get_or_create_texture
* Show colormap previews in UI
* Spelling
* Implement billinear filtering of textures (#1850)
* Implement opt-in billinear filtering of textures
* bilinear
* MVP Support for inline-rendering of Rerun within jupyter notebooks (#1798) (#1834) (#1844)
* Introduce the ability to push an rrd binary via iframe.contentWindow.postMessage
* New API to output the current buffered messages as a cell in jupyter
* Example notebook with the cube demo
* Track that we need to send another recording msg after draining the backlog
* Dynamically resolve the app location based on git commit. Allow override to use self-hosted assets
* Add some crude timeout logic in case the iframe fails to load
* Don't persist app state in notebooks
* Introduce new MemoryRecording for use with Jupyter notebooks (#1834)
* Refactor the relationship between the assorted web / websocket servers (#1844)
* Rename RemoteViewerServer to WebViewerSink
* CLI arguments for specifying ports
* Proper typing for the ports
* Disable wheel tests for x86_64-apple-darwin (#1853)
* Fix typos in notebook readme (#1852)
* Fix the python build when running without web_viewer enabled (#1856)
* Error instead of expect inside msg_encode. (#1857)
* Restore: New API to reset_time (#1826) (#1854)
* Revert "Implement billinear filtering of textures (#1850)" (#1859)
This reverts commit d33dab6e7a33f82ab2513058d0f85744e3ce6ef4.
* Add Restart command and keyboard shortcut for moving time to start of timeline (#1802)
* Add Restart button to timeline UI. This sets the timeline back to zero.
* Adds Restart Command & Timeline Command
* Adds Ctrl-Shift-Space keyboard modifier
* Remove restart button from timeline UI.
* Use cmd(Key::LeftArrow) as key combo for restart timeline.
* Add TimeControl::restart to restart the current timeline.
* Use this from the kb_shortcut function
* fix some code nits
---------
Co-authored-by: Emil Ernerfeldt
* Fix shutdown race condition in `re_sdk_comms` client (#1861)
* Wait for encoder to shut down before shutting down the other threads
* Remove unused dependencies (#1863)
* Gpu picking for depth clouds (#1849)
* wip
* allow for hovering depth clouds via gpu picking
* Use `[x, y]: [u32; 2]` as argument
---------
Co-authored-by: Emil Ernerfeldt
* Remove manual depth projection from car and nyud examples (#1869)
* Remove manual depth projection from car and nyud examples
* revert change to cube.ipynb
* revert changes to cube.ipynb
* third times a charm for cube.ipynb
* Improve end-to-end testing slightly (#1862)
* CI: Run e2e tests with RUST_LOG=debug
* Move installing of pip packaged from CI to e2e script
* Re-enable bilinear interpolation again (#1860)
* Revert "Revert "Implement billinear filtering of textures (#1850)" (#1859)"
This reverts commit 625d2bdd241c09ff9d0ae394ba91565fa48455ec.
* Split rectangle.wgsl into fragme/vertex parts to work around naga bug
* Use GPU colormapping when showing images in the GUI (#1865)
* Cleanup: move Default close to the struct definition
* Simplify code: use if-let-else-return
* Simplify code: no need for Arc
* Add EntityDataUi so that the Tensor ui function knows entity path
* Better naming: selection -> item
* Simplify code: no optional tensor stats
* Less use of anyhow
* Use GPU colormapping when showing tensors in GUI
* Link to issue
* Optimize pad_to_four_elements for debug builds
* Refactor: simpler arguments to show_zoomed_image_region_area_outline
* Fix missing meter argument
* Refactor: break up long function
* Less use of Arc
* Pipe annotation context to the hover preview
* Simplify `AnnotationMap::find`
* Use new GPU colormapper for the hover-zoom-in tooltip
* Refactor
* Add helper function for turning a Tensor into an image::DynamicImage
* Fix warning on web builds
* Add helper function `Tensor::could_be_dynamic_image`
* Implement click-to-copy and click-to-save for tensors without egui
* Convert histogram to the new system
* Remove the TensorImageCache
* Fix TODO formatting
* bug fixes and cleanups
* Rename some stuff
* Build-fix
* Simplify some code
* Turn off benchmakrs comment on each PR (#1872)
* Refactor: remove `GpuTexture2DHandle::invalid` (#1866)
* Refactor TexturedRect
* Remove GpuTexture2DHandle::invalid
* `GpuTexture2DHandle` is always valid
* spacing
* Update enumflags2 to non-yanked version (#1874)
* Update enumflags2 to non-yanked version
```
❯ cargo update -p enumflags2
Updating crates.io index
Updating enumflags2 v0.7.5 -> v0.7.7
Updating enumflags2_derive v0.7.4 -> v0.7.7
Updating proc-macro2 v1.0.47 -> v1.0.56
Updating quote v1.0.21 -> v1.0.26
Adding syn v2.0.15
```
Unfortunately this adds the syn v2 dependency for some platforms
* Updating dependencies is a valid label
* cargo deny: check more platforms
* fix stuff broken from merging upstream
---------
Co-authored-by: Clement Rey
Co-authored-by: benjamin de charmoy
Co-authored-by: Andreas Reich
Co-authored-by: Emil Ernerfeldt
Co-authored-by: Pablo Vela
Co-authored-by: Nikolaus West
Co-authored-by: Jeremy Leibs
Co-authored-by: h3mosphere <129932586+h3mosphere@users.noreply.github.com>
Co-authored-by: Urho Laukkarinen
* expose depth config, get available sensor resolutions for the selected device
* move removing entities to a place where the removal will always be tried, not just when expanding space view header
* added depth alignment
* added stream enabled buttons
* Depth cloud textures are now cached frame-to-frame (#1913)
* Depth cloud textures are now cached frame-to-frame
Simplified logic a bit by enforcing F32 texture conversion (there was a u16 path for native only)
* doc fix
* naming consistency, format check, remove unnecessary scaling
* improve depth cloud texture check
* fixes after merging
* Smooth out scroll wheel input for camera zooming (#1920)
* Always spawn instead of fork in multiprocessing example (#1922)
* Add `--num-frames` arg to canny (webcam) example (#1923)
* fix formatting issues
* rerun format fix
* fix spelling
* lint check fixes
* mypy
* some more lint fixes
* some more fixes for python lint checks
* Collect extra egui features into the main Cargo.toml (#1926)
* just rs-run-all
* `just py-run-all-{native|web|rrd}` (#1927)
* make all python examples handle unknown arguments gracefully
* just py-run-all-{native|web|rrd}
* bump version
* comment out clang
* Join threads at end of multi-threading example (#1934)
* Add argument parsing to the rerun_demo (#1925)
* More robust wait for exit condition during .serve() (#1939)
* More robust wait for exit condition during .serve()
* lint
* Use zipfile python library instead of `unzip` command in arkitscene (#1936)
* Use zipfile python library instead of `unzip` command in arkitscene
Windows doesn't have unzip!
* Nit: import sort order
---------
Co-authored-by: Nikolaus West
* Fix annotation images sometimes drawn in the background. (#1933)
This caused fairly ugly rendering whenever that happened. Also cleaned up redundant image/textured_rect defintions in spatial scene buildup
* Fix backslashes in arkitscene rigid transformation path (#1938)
* Fix backslashes in arkitscene rigid transformation path
Should be fixed properly by https://github.com/rerun-io/rerun/issues/1937
* Use PosixPath instead of .replace("\\", "/")
---------
Co-authored-by: Nikolaus West
* Fix hover/select highlights when picking single points in a scene with multiple point clouds (#1942)
Batch vertex offset for single highlights wasn't correctly computed. Different parts of the code made different assumptions what offsets referred to
* Fix hovering depth clouds (#1943)
We didn't add to `scene.primitives.image`. Instead of adding to this list, it is instead now no longer needed for picking since we can very easily query for tensor again.
* change python workflow for testing purposes, remove windows and macos wheels
* add back one macos so the matrix is valid
* 2.5GB before GC kick in on web (#1944)
* change name to depthai-viewer
* change pip install/uninstalls from rerun-sdk to depthai-viewer
* change all occurances of rerun-sdk to depthai-viewer
* change windows runner to windows-latest for now when using my personal gh
* Release `0.5.0` (#1919)
* changelog
* 0.5.0-alpha.0
* more changelog
* re_format: fix implicit recursive feature flags
* publish_crates.sh: fix crate ordering
* Join threads at end of multi-threading example (#1934)
* Add argument parsing to the rerun_demo (#1925)
* More robust wait for exit condition during .serve() (#1939)
* More robust wait for exit condition during .serve()
* lint
* Use zipfile python library instead of `unzip` command in arkitscene (#1936)
* Use zipfile python library instead of `unzip` command in arkitscene
Windows doesn't have unzip!
* Nit: import sort order
---------
Co-authored-by: Nikolaus West
* Fix annotation images sometimes drawn in the background. (#1933)
This caused fairly ugly rendering whenever that happened. Also cleaned up redundant image/textured_rect defintions in spatial scene buildup
* Fix backslashes in arkitscene rigid transformation path (#1938)
* Fix backslashes in arkitscene rigid transformation path
Should be fixed properly by https://github.com/rerun-io/rerun/issues/1937
* Use PosixPath instead of .replace("\\", "/")
---------
Co-authored-by: Nikolaus West
* changelog
* Fix hover/select highlights when picking single points in a scene with multiple point clouds (#1942)
Batch vertex offset for single highlights wasn't correctly computed. Different parts of the code made different assumptions what offsets referred to
* changelog
* Fix hovering depth clouds (#1943)
We didn't add to `scene.primitives.image`. Instead of adding to this list, it is instead now no longer needed for picking since we can very easily query for tensor again.
* changelog
* 2.5GB before GC kick in on web (#1944)
* changelog
* 0.5.0
---------
Co-authored-by: Jeremy Leibs
Co-authored-by: Andreas Reich
Co-authored-by: Nikolaus West
* Fix imu plots scrolling past their container
* fix bottom/top panel sizing after showing the spinner on config setting
* Lint error names in `map_err` (#1948)
* Lint: Properly name errors in `map_err`
* Use correct names for errors
* fix config and stats tabs not being able to be viewed at the same time, renamed stats to IMU
* New dispatch-only workflow for running the lint-job (#1950)
* Fix secret in dispatch_lint.yml
* Only maintain a single manual-dispatch job for testing workflows
* apply button, have to make it look a bit nicer, but will do that when I fix scrolling in device configuration panel
* Bump hyper version due to RUSTSEC-2023-0034 (#1951)
* Add other build parameterizations to manual_dispatch.yml
* Use proper if gates on the manual_dispatch.yml jobs
* Add ability to save cache to manual_disaptch.yml
* Standard case of inputs
* Add manual step for packaging to 'manual_dispatch.yml'
* add back panels when the underlying subscription reappears
* Fix crash for missing class ids causing zero sized texture (#1947)
* Fix crash for missing class ids causing zero sized texture
Two things fixed actually:
* texture manager now checks for zero sized texture, this ripples out in a lot more error handling
* class id texture texture handles not having any classes gracefully
* Use Display for all errors
* typo
* Better naming of error
* Better docs and names
* Fix off-by-one error
* some use of `context`, change which error is implicitly converted on texture manager2d
---------
Co-authored-by: Emil Ernerfeldt
* fixes LR stream subscriptions (maybe breaks panels reappearing after sub is gone) (#15)
* make config ui scrollable, fix padding
* Move clippy_wasm/clippy.toml to under scripts (#1949)
* Move clippy_wasm/clippy.toml to under scripts
This is just to clean up the root a bit, and to move it closer
to where it is actually used.
* Fix comment typo
---------
Co-authored-by: Andreas Reich
* change crate version to 0.6.0-alpha.0 (#1952)
* New workflow_dispatch for building wheels for a PR
* initial light mode, luxonis depthai viewer
* Rename build_wheels_for_pr.yml -> manual_build_wheels_for_pr.yml
* Fix run-wasm crash on trying to wait for server (#1959)
This ruined my dev experience for re_renderer examples a bit. Not sure what made the previous hack stop working, might be a timing issue. It ended up crashing the `cargo_run_wasm` web server
* Update egui to latest and wgpu to 0.16 (#1958)
* update to wgpu 0.16 and egui using this version
* shader fixup for type aliases and rectangle shader
* shader signed/unsigned shenanigans
* more signed/unsigned issues
* fix texture component count
* fix picking layer depth readback crash on web
* patch wgpu
* better texture size estimate
* fix patches
* Handle leaking of prerelease into alpha version (#1953)
* Make device config panel remember it's height throughout loading
* hide time panel, make ai model dropdown wider
* Fix incorrect memory usage stats for destroyed on-creation-mapped buffers (#1963)
We actually don't have anywhere where we discard this kind of buffer yet, but if we would the stats would be wrong (noticed while doing quick & dirty experiments on the staging belt)
* New manual workflow for running benches
* Introduce new reusable workflow jobs and cleanup manual trigger (#1954)
There are 8 reusable workflow "components" that we can use to build different scenarios:
reusable_checks.yml - These are all the checks that run to ensure the code is formatted,
reusable_bench.yml - This job runs the benchmarks to check for performance regressions.
reusable_deploy_docs- This job deploys the python and rust documentation to https://ref.rerun.io
reusable_build_and_test_wheels.yml - This job builds the wheels, runs the
end-to-end test, and produces a sample RRD. The artifacts are accessible via GitHub artifacts, but not otherwise
uploaded anywhere.
reusable_upload_wheels.yml- This job uploads the wheels to google cloud
reusable_build_web.yml - This job builds the wasm artifacts for the web.
reusable_upload_web.yml - This job uploads the web assets to google cloud. By default this
only uploads to: app.rerun.io/commit//
reusable_pr_summary.yml - This job updates the PR summary with the results of the CI run.
Example summary can be found at:
https://storage.googleapis.com/rerun-builds/pull_request/1954/index.html
This also introduces a manual_dispatch.yml helper as a convenience for testing these workflows and their different parameterizations.
* New manual workflow for adhoc web builds
* Use new CI workflows for pull-request and merge to main (#1955)
on_pull_request.yml includes the following pieces:
- reusable_checks.yml -- Run all of the lints, code-formatting, tests, etc.
- reusable_build_and_test_wheels.yml -- Configured in a "minimal" mode with SDK includes end-to-end test and produces an rrd.
- reusable_build_web.yml -- Verifies we can build the wasm
- reusable_upload_web.yml -- Uploads the RRD and Wasm to app.rerun.io to confirm the demo works as well as support notebook testing.
- reusable_pr_summary.yml -- Create a manifest page with a link to the
on_push_main.yml includes the following pieces:
- reusable_checks.yml -- Run all of the lints, code-formatting, tests, etc.
- reusable_bench.yml -- Run the benchmarks
- reusable_build_and_test_wheels.yml -- Builds wheels for all platforms
- reusable_upload_wheel.yml -- Uploads the all the wheels to gcloud
- reusable_build_web.yml -- Builds the wasm bundle
- reusable_upload_web.yml -- Uploads the RRD and Wasm to app.rerun.io
- reusable_pip_index.yml -- Generates a pip index page which can be used to install packages with, e.g.
* Fix name of on_push_main.yml
* Fix usage of long commit in generate_prerelease_pip_index.py
* Try making pull-request workflows non-concurrent (#1970)
* Try making pull-request workflows non-concurrent
* Concurrency groups for push_main as well
* Each sub-workflow needs its own name or they fight
* Another attempt to make jobs non-concurrent on a per-PR basis (#1974)
* Another attempt to make jobs non-concurrent on a per-PR basis
* Move concurrency into the reusable job
* Jobs with duplicated instances still need separate concurrency keys based on platform
* Round to nearest color_index when doing color mapping (#1969)
* Full (experimental) WebGPU support (#1965)
* always build with unstable web sys apis
* Make shader Tint friendly
* expose webgl feature flag on re_renderer & re_viewer
* fix bug link on negative hexadecimal
* hardware tier is now created from wgpu adapter
* sort out build flags for webgpu & document building webviewer
* introduce shader text replacement workarounds to workaround current chrome issue
* latest egui master
* typo fix
* doc fixes, use if cfg! instead of attribute cfg
* move backend to rerun
* If there's a `{{ pr-build-summary }}` in the PR description, update it. (#1971)
* If there's a `{{ pr-build-summary }}` in the PR description, update it.
* Add comment to the PR template
* Add pull-requests permission to pr_summary job
* Run the cube notebook on PR (#1972)
* Run the cube notebook on PR
* Add notebooks to the build summary
* Use the new concurrency model
* reformat py files
* reformat
* fix pylint errors
* Add ability to manually run a web build to upload to an adhoc name (#1966)
* Add ability to manually run a web build to upload to an adhoc name
* Pass through ADHOC_NAME
* Add a concurrency criteria for the new adhoc job
* Make input description more explicit
* change entity paths
* merged wip albedo colormap into latest depth_cloud
* remove pointclouds generated in sdk
* fix compiler error, trying to compile frame.close for wasm
* Default to albedo texture for depth cloud, added support for mono albedo textures
* restart backend on failure, added oak_cam.device.close seems to really close the cam
* py lint fix
* don't run notebooks
* remove run-notebook dependency
---------
Co-authored-by: Clement Rey
Co-authored-by: benjamin de charmoy
Co-authored-by: Andreas Reich
Co-authored-by: Emil Ernerfeldt
Co-authored-by: Pablo Vela
Co-authored-by: Nikolaus West
Co-authored-by: Jeremy Leibs
Co-authored-by: h3mosphere <129932586+h3mosphere@users.noreply.github.com>
Co-authored-by: Urho Laukkarinen
Co-authored-by: Nikolaus West
---
.cargo/config.toml | 16 +
.github/pull_request_template.md | 9 +-
.github/workflows/README.md | 66 +
.github/workflows/manual_adhoc_web.yml | 48 +
.../workflows/manual_build_wheels_for_pr.yml | 129 ++
.github/workflows/manual_dispatch.yml | 270 +++
.github/workflows/manual_run_bench.yml | 59 +
.github/workflows/misc.yml | 32 -
.github/workflows/on_pull_request.yml | 64 +
.github/workflows/on_push_main.yml | 189 ++
.github/workflows/python.yml | 629 -------
.github/workflows/reusable_bench.yml | 164 ++
.../reusable_build_and_test_wheels.yml | 300 ++++
.github/workflows/reusable_build_web.yml | 94 +
.github/workflows/reusable_checks.yml | 328 ++++
.github/workflows/reusable_deploy_docs.yml | 158 ++
.github/workflows/reusable_pip_index.yml | 52 +
.github/workflows/reusable_pr_summary.yml | 60 +
.github/workflows/reusable_run_notebook.yml | 82 +
.github/workflows/reusable_upload_web.yml | 143 ++
.github/workflows/reusable_upload_wheels.yml | 103 ++
.github/workflows/rust.yml | 368 ----
.github/workflows/toml.yml | 43 -
.github/workflows/typos.yml | 17 -
.vscode/extensions.json | 17 +-
.vscode/settings.json | 153 +-
BUILD.md | 36 +-
CHANGELOG.md | 173 +-
Cargo.lock | 1599 +++++++++--------
Cargo.toml | 77 +-
README.md | 40 +-
RELEASES.md | 202 ++-
ci_docker/Dockerfile | 3 +-
clippy.toml | 4 +-
crates/re_analytics/src/cli.rs | 2 +-
crates/re_analytics/src/lib.rs | 2 +-
crates/re_build_info/src/crate_version.rs | 18 +-
crates/re_build_web_viewer/src/lib.rs | 9 +-
crates/re_build_web_viewer/src/main.rs | 7 +-
crates/re_data_store/src/entity_properties.rs | 29 +-
crates/re_format/Cargo.toml | 2 +-
crates/re_log_types/src/arrow_msg.rs | 6 +-
.../component_types/arrow_convert_shims.rs | 1 +
.../re_log_types/src/component_types/imu.rs | 25 +
.../re_log_types/src/component_types/mod.rs | 9 +-
.../src/component_types/node_graph.rs | 40 +
.../src/component_types/tensor.rs | 2 +-
crates/re_log_types/src/lib.rs | 2 +-
crates/re_renderer/Cargo.toml | 18 +-
crates/re_renderer/examples/2d.rs | 23 +-
crates/re_renderer/examples/depth_cloud.rs | 94 +-
crates/re_renderer/examples/framework.rs | 3 +-
crates/re_renderer/shader/colormap.wgsl | 10 +-
crates/re_renderer/shader/depth_cloud.wgsl | 33 +-
crates/re_renderer/shader/lines.wgsl | 17 +-
crates/re_renderer/shader/point_cloud.wgsl | 9 +-
crates/re_renderer/shader/rectangle_fs.wgsl | 10 +-
.../shader/screen_triangle_vertex.wgsl | 6 +-
crates/re_renderer/shader/types.wgsl | 26 +-
.../re_renderer/shader/utils/sphere_quad.wgsl | 4 +-
.../src/allocator/cpu_write_gpu_read_belt.rs | 11 +-
.../src/allocator/gpu_readback_belt.rs | 28 +-
crates/re_renderer/src/allocator/mod.rs | 3 +-
crates/re_renderer/src/colormap.rs | 6 +
crates/re_renderer/src/config.rs | 54 +-
crates/re_renderer/src/context.rs | 27 +-
crates/re_renderer/src/draw_phases/mod.rs | 3 +-
.../src/draw_phases/picking_layer.rs | 40 +-
.../re_renderer/src/draw_phases/screenshot.rs | 11 +-
crates/re_renderer/src/global_bindings.rs | 4 +-
crates/re_renderer/src/importer/gltf.rs | 12 +-
crates/re_renderer/src/lib.rs | 1 +
.../re_renderer/src/renderer/debug_overlay.rs | 27 +-
.../re_renderer/src/renderer/depth_cloud.rs | 281 +--
crates/re_renderer/src/renderer/lines.rs | 9 +-
crates/re_renderer/src/renderer/mod.rs | 4 +-
.../re_renderer/src/renderer/point_cloud.rs | 4 +-
crates/re_renderer/src/renderer/rectangles.rs | 60 +-
.../re_renderer/src/resource_managers/mod.rs | 5 +-
.../src/resource_managers/texture_manager.rs | 117 +-
crates/re_renderer/src/texture_info.rs | 206 +++
crates/re_renderer/src/view_builder.rs | 25 +-
.../wgpu_resources/dynamic_resource_pool.rs | 13 +-
crates/re_renderer/src/wgpu_resources/mod.rs | 110 --
.../src/wgpu_resources/sampler_pool.rs | 7 +-
.../src/wgpu_resources/shader_module_pool.rs | 23 +-
.../src/wgpu_resources/texture_pool.rs | 19 +-
crates/re_ui/Cargo.toml | 7 +-
crates/re_ui/data/design_tokens.json | 1287 +++++++------
crates/re_ui/data/icons/rerun_menu.png | Bin 896 -> 11051 bytes
crates/re_ui/data/logo_dark_mode.png | Bin 12227 -> 4402 bytes
crates/re_ui/data/logo_light_mode.png | Bin 12287 -> 4402 bytes
crates/re_ui/src/command.rs | 4 +-
crates/re_ui/src/design_tokens.rs | 46 +-
crates/re_viewer/Cargo.toml | 37 +-
crates/re_viewer/src/app.rs | 120 +-
crates/re_viewer/src/depthai/api.rs | 76 +
crates/re_viewer/src/depthai/depthai.rs | 729 ++++++++
crates/re_viewer/src/depthai/mod.rs | 3 +
crates/re_viewer/src/depthai/ws.rs | 246 +++
crates/re_viewer/src/gpu_bridge/mod.rs | 23 +-
.../re_viewer/src/gpu_bridge/tensor_to_gpu.rs | 22 +-
crates/re_viewer/src/lib.rs | 22 +-
crates/re_viewer/src/misc/viewer_context.rs | 3 +
crates/re_viewer/src/native.rs | 3 +-
crates/re_viewer/src/ui/auto_layout.rs | 1 +
crates/re_viewer/src/ui/blueprint.rs | 2 +-
crates/re_viewer/src/ui/data_ui/image.rs | 4 +-
crates/re_viewer/src/ui/memory_panel.rs | 4 +-
crates/re_viewer/src/ui/mod.rs | 1 +
crates/re_viewer/src/ui/selection_panel.rs | 751 +++++++-
crates/re_viewer/src/ui/space_view.rs | 26 +-
.../re_viewer/src/ui/space_view_heuristics.rs | 1 +
crates/re_viewer/src/ui/view_category.rs | 8 +-
.../re_viewer/src/ui/view_node_graph/mod.rs | 5 +
.../re_viewer/src/ui/view_node_graph/scene.rs | 42 +
crates/re_viewer/src/ui/view_node_graph/ui.rs | 96 +
crates/re_viewer/src/ui/view_spatial/eye.rs | 84 +-
.../src/ui/view_spatial/scene/mod.rs | 18 +-
.../src/ui/view_spatial/scene/picking.rs | 28 +-
.../src/ui/view_spatial/scene/primitives.rs | 22 +-
.../view_spatial/scene/scene_part/images.rs | 209 ++-
.../src/ui/view_spatial/space_camera_3d.rs | 2 +-
crates/re_viewer/src/ui/view_spatial/ui.rs | 115 +-
crates/re_viewer/src/ui/view_spatial/ui_3d.rs | 38 +-
.../src/ui/view_spatial/ui_renderer_bridge.rs | 6 +-
.../src/ui/view_tensor/tensor_slice_to_gpu.rs | 12 +-
crates/re_viewer/src/ui/view_tensor/ui.rs | 5 +-
.../re_viewer/src/ui/view_time_series/ui.rs | 3 +-
crates/re_viewer/src/ui/viewport.rs | 59 +
crates/re_viewer/src/viewer_analytics.rs | 4 +-
crates/re_viewer/src/web.rs | 5 +-
crates/re_web_viewer_server/build.rs | 20 +-
crates/re_web_viewer_server/src/lib.rs | 2 +-
crates/re_ws_comms/src/server.rs | 2 +-
crates/rerun/Cargo.toml | 5 +-
crates/rerun/src/lib.rs | 2 +-
crates/rerun/src/native_viewer.rs | 1 +
crates/rerun/src/run.rs | 4 +-
examples/.gitignore | 1 +
examples/python/README.md | 12 +-
examples/python/api_demo/main.py | 3 +-
examples/python/api_demo/requirements.txt | 2 +-
.../python/arkitscenes/download_dataset.py | 6 +-
examples/python/arkitscenes/main.py | 9 +-
examples/python/arkitscenes/requirements.txt | 2 +-
examples/python/car/main.py | 3 +-
examples/python/car/requirements.txt | 2 +-
examples/python/clock/main.py | 3 +-
examples/python/clock/requirements.txt | 2 +-
examples/python/colmap/main.py | 3 +-
examples/python/colmap/requirements.txt | 2 +-
examples/python/deep_sdf/main.py | 3 +-
examples/python/deep_sdf/requirements.txt | 2 +-
examples/python/dicom/main.py | 3 +-
examples/python/dicom/requirements.txt | 2 +-
examples/python/dna/main.py | 5 +-
examples/python/dna/requirements.txt | 2 +-
examples/python/minimal/main.py | 8 +-
examples/python/minimal/requirements.txt | 2 +-
examples/python/mp_pose/main.py | 3 +-
examples/python/mp_pose/requirements.txt | 2 +-
examples/python/multiprocessing/main.py | 8 +-
.../python/multiprocessing/requirements.txt | 2 +-
examples/python/multithreading/main.py | 8 +-
.../python/multithreading/requirements.txt | 2 +-
examples/python/notebook/cube.ipynb | 1 -
examples/python/notebook/requirements.txt | 2 +-
examples/python/nyud/main.py | 3 +-
examples/python/nyud/requirements.txt | 2 +-
examples/python/objectron/main.py | 3 +-
examples/python/objectron/requirements.txt | 2 +-
examples/python/opencv_canny/main.py | 12 +-
examples/python/opencv_canny/requirements.txt | 2 +-
examples/python/plots/main.py | 3 +-
examples/python/plots/requirements.txt | 2 +-
examples/python/raw_mesh/main.py | 3 +-
examples/python/raw_mesh/requirements.txt | 2 +-
examples/python/ros/requirements.txt | 2 +-
examples/python/segment_anything/main.py | 3 +-
.../python/segment_anything/requirements.txt | 2 +-
examples/python/stable_diffusion/main.py | 3 +-
.../python/stable_diffusion/requirements.txt | 2 +-
examples/python/text_logging/main.py | 3 +-
examples/python/text_logging/requirements.txt | 2 +-
examples/python/tracking_hf_opencv/main.py | 3 +-
.../tracking_hf_opencv/requirements.txt | 2 +-
justfile | 36 +-
rerun_py/Cargo.toml | 4 +-
rerun_py/README.md | 49 +-
rerun_py/docs/gen_common_index.py | 6 +-
rerun_py/pyproject.toml | 23 +-
.../depthai_viewer_backend/.gitignore | 5 +
.../depthai_viewer_backend/README.md | 31 +
.../depthai_viewer_backend/__init__.py | 3 +
.../rerun_sdk/depthai_viewer_backend/back.py | 294 +++
.../classification_labels.py | 107 ++
.../depthai_viewer_backend/config_api.py | 164 ++
.../device_configuration.py | 183 ++
.../depthai_viewer_backend/pyproject.toml | 12 +
.../depthai_viewer_backend/sdk_callbacks.py | 190 ++
.../rerun_sdk/depthai_viewer_backend/store.py | 53 +
.../rerun_sdk/depthai_viewer_backend/topic.py | 24 +
rerun_py/rerun_sdk/rerun/__init__.py | 15 +-
rerun_py/rerun_sdk/rerun/components/imu.py | 38 +
rerun_py/rerun_sdk/rerun/log/__init__.py | 1 +
rerun_py/rerun_sdk/rerun/log/imu.py | 56 +
.../rerun_sdk/rerun/log/pipeline_graph.py | 60 +
rerun_py/rerun_sdk/rerun/script_helpers.py | 12 +-
rerun_py/rerun_sdk/rerun_demo/__init__.py | 2 +-
rerun_py/rerun_sdk/rerun_demo/__main__.py | 34 +-
rerun_py/src/arrow.rs | 4 +-
run_wasm/Cargo.toml | 2 +-
run_wasm/src/main.rs | 19 +-
scripts/cargo_deny.sh | 19 +
scripts/clippy_wasm.sh | 4 +-
.../clippy_wasm}/clippy.toml | 0
scripts/generate_pr_summary.py | 107 ++
scripts/generate_prerelease_pip_index.py | 71 +
scripts/lint.py | 8 +-
scripts/publish_crates.sh | 2 +-
scripts/run_python_e2e_test.py | 8 +-
scripts/templates/pip_index.html | 42 +
scripts/templates/pr_results_summary.html | 65 +
scripts/version_util.py | 34 +-
web_viewer/manifest.json | 2 +-
226 files changed, 9821 insertions(+), 3588 deletions(-)
create mode 100644 .github/workflows/README.md
create mode 100644 .github/workflows/manual_adhoc_web.yml
create mode 100644 .github/workflows/manual_build_wheels_for_pr.yml
create mode 100644 .github/workflows/manual_dispatch.yml
create mode 100644 .github/workflows/manual_run_bench.yml
delete mode 100644 .github/workflows/misc.yml
create mode 100644 .github/workflows/on_pull_request.yml
create mode 100644 .github/workflows/on_push_main.yml
delete mode 100644 .github/workflows/python.yml
create mode 100644 .github/workflows/reusable_bench.yml
create mode 100644 .github/workflows/reusable_build_and_test_wheels.yml
create mode 100644 .github/workflows/reusable_build_web.yml
create mode 100644 .github/workflows/reusable_checks.yml
create mode 100644 .github/workflows/reusable_deploy_docs.yml
create mode 100644 .github/workflows/reusable_pip_index.yml
create mode 100644 .github/workflows/reusable_pr_summary.yml
create mode 100644 .github/workflows/reusable_run_notebook.yml
create mode 100644 .github/workflows/reusable_upload_web.yml
create mode 100644 .github/workflows/reusable_upload_wheels.yml
delete mode 100644 .github/workflows/rust.yml
delete mode 100644 .github/workflows/toml.yml
delete mode 100644 .github/workflows/typos.yml
create mode 100644 crates/re_log_types/src/component_types/imu.rs
create mode 100644 crates/re_log_types/src/component_types/node_graph.rs
create mode 100644 crates/re_renderer/src/texture_info.rs
create mode 100644 crates/re_viewer/src/depthai/api.rs
create mode 100644 crates/re_viewer/src/depthai/depthai.rs
create mode 100644 crates/re_viewer/src/depthai/mod.rs
create mode 100644 crates/re_viewer/src/depthai/ws.rs
create mode 100644 crates/re_viewer/src/ui/view_node_graph/mod.rs
create mode 100644 crates/re_viewer/src/ui/view_node_graph/scene.rs
create mode 100644 crates/re_viewer/src/ui/view_node_graph/ui.rs
create mode 100644 examples/.gitignore
create mode 100644 rerun_py/rerun_sdk/depthai_viewer_backend/.gitignore
create mode 100644 rerun_py/rerun_sdk/depthai_viewer_backend/README.md
create mode 100644 rerun_py/rerun_sdk/depthai_viewer_backend/__init__.py
create mode 100644 rerun_py/rerun_sdk/depthai_viewer_backend/back.py
create mode 100644 rerun_py/rerun_sdk/depthai_viewer_backend/classification_labels.py
create mode 100644 rerun_py/rerun_sdk/depthai_viewer_backend/config_api.py
create mode 100644 rerun_py/rerun_sdk/depthai_viewer_backend/device_configuration.py
create mode 100644 rerun_py/rerun_sdk/depthai_viewer_backend/pyproject.toml
create mode 100644 rerun_py/rerun_sdk/depthai_viewer_backend/sdk_callbacks.py
create mode 100644 rerun_py/rerun_sdk/depthai_viewer_backend/store.py
create mode 100644 rerun_py/rerun_sdk/depthai_viewer_backend/topic.py
create mode 100644 rerun_py/rerun_sdk/rerun/components/imu.py
create mode 100644 rerun_py/rerun_sdk/rerun/log/imu.py
create mode 100644 rerun_py/rerun_sdk/rerun/log/pipeline_graph.py
create mode 100755 scripts/cargo_deny.sh
rename {clippy_wasm => scripts/clippy_wasm}/clippy.toml (100%)
create mode 100644 scripts/generate_pr_summary.py
create mode 100644 scripts/generate_prerelease_pip_index.py
create mode 100644 scripts/templates/pip_index.html
create mode 100644 scripts/templates/pr_results_summary.html
diff --git a/.cargo/config.toml b/.cargo/config.toml
index b44a938e2904..3bd9e9b437d3 100644
--- a/.cargo/config.toml
+++ b/.cargo/config.toml
@@ -7,3 +7,19 @@ run-wasm = "run --release --package run_wasm --"
# Some of our build.rs files only run if this is set,
# so that we don't run them on cargo publish or on users machines.
IS_IN_RERUN_WORKSPACE = "yes"
+
+
+# [target.x86_64-unknown-linux-gnu]
+# linker = "clang"
+# rustflags = [
+# "-C",
+# "link-arg=-fuse-ld=/usr/bin/mold",
+# "-C",
+# "split-debuginfo=unpacked",
+# ]
+# web_sys_unstable_apis is required to enable the web_sys clipboard API which egui_web uses,
+# https://rustwasm.github.io/wasm-bindgen/api/web_sys/struct.Clipboard.html
+# as well as WebGPU apis.
+# https://rustwasm.github.io/docs/wasm-bindgen/web-sys/unstable-apis.html
+[target.wasm32-unknown-unknown]
+rustflags = ["--cfg=web_sys_unstable_apis"]
diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md
index 99f0096817a2..f2e91a7e8adf 100644
--- a/.github/pull_request_template.md
+++ b/.github/pull_request_template.md
@@ -13,5 +13,10 @@ To get an auto-generated PR description you can put "copilot:summary" or "copilo
### What
### Checklist
-* [ ] I have read and agree to [Contributor Guide](https://github.com/rerun-io/rerun/blob/main/CONTRIBUTING.md) and the [Code of Conduct](https://github.com/rerun-io/rerun/blob/main/CODE_OF_CONDUCT.md)
-* [ ] I've included a screenshot or gif (if applicable)
+
+- [ ] I have read and agree to [Contributor Guide](https://github.com/rerun-io/rerun/blob/main/CONTRIBUTING.md) and the [Code of Conduct](https://github.com/rerun-io/rerun/blob/main/CODE_OF_CONDUCT.md)
+- [ ] I've included a screenshot or gif (if applicable)
+
+
+
+PR Build Summary: {{ pr-build-summary }}
diff --git a/.github/workflows/README.md b/.github/workflows/README.md
new file mode 100644
index 000000000000..e93f751b7327
--- /dev/null
+++ b/.github/workflows/README.md
@@ -0,0 +1,66 @@
+# Overview
+
+Our CI workflows make heavy usage of [Reusable Workflows](https://docs.github.com/en/actions/using-workflows/reusing-workflows). These reusable workflows can then be tested manually via the `manual_dispatch.yml` workflow.
+Or integrated into CI jobs such has `on_pull_request.yml` or `on_main.yml`.
+
+By convention:
+- All reusable workflows start with the `reusable_` prefix.
+- All workflows that are triggered via `workflow_dispatch` start with the `manual_` prefix.
+- All workflows that are triggered via an event start with the `on_` prefix.
+ - `on_pull_request` is triggered on pull requests.
+ - `on_push_main` is triggered on pushes to the main branch.
+
+If you are going to be doing any editing of workflows, the
+[VS Code extension](https://marketplace.visualstudio.com/items?itemName=cschleiden.vscode-github-actions)
+for GitHub Actions is highly recommended.
+
+## Reusable Workflows
+- [reusable_checks.yml](reusable_checks.yml) - These are all the checks that run to ensure the code is formatted,
+ linted, and tested. This job produces no artifacts other than a pass/fail criteria for the build.
+ - `SAVE_CACHE` - If true, the rust cache will be saved. Generally we only do this for builds on `main`
+- [reusable_bench.yml](reusable_bench.yml) - This job runs the benchmarks to check for performance regressions.
+ - `SAVE_BENCH` - If true, then the benchmark results are saved to update https://ref.rerun.io/dev/bench/
+- [reusable_deploy_docs](reusable_deploy_docs.yml) - This job deploys the python and rust documentation to https://ref.rerun.io
+ - `PY_DOCS_VERSION_NAME` - The name to use for versioning the python docs. This should generally match the version in
+ `Cargo.toml`.
+ - `UPDATE_LATEST` - If true, then the docs will be deployed to `latest/` as well as the versioned directory.
+- [reusable_build_and_test_wheels.yml](reusable_build_and_test_wheels.yml) - This job builds the wheels, runs the
+end-to-end test, and produces a sample RRD. The artifacts are accessible via GitHub artifacts, but not otherwise
+uploaded anywhere.
+ - `MATURIN_FEATURE_FLAGS` - The feature flags to pass to maturin.
+ - `PLATFORM` - Which platform to build for: `linux`, `macos-arm`, `macos-intel`, or `windows`.
+ - `RELEASE_VERSION` - If producing a release, the version number. This must match the version in `Cargo.toml`.
+ - `RRD_ARTIFACT_NAME` - Intermediate name of the GitHub rrd artifact for passing to `reusable_upload_wheels.yml`
+ - `SAVE_CACHE` - If true, the rust cache will be saved. Generally we only do this for builds on `main`
+ - `WHEEL_ARTIFACT_NAME` - Intermediate name of the GitHub wheel artifact for passing to `reusable_upload_wheels.yml`
+- [reusable_upload_wheels.yml](reusable_upload_wheels.yml) - This job uploads the wheels to google cloud
+ - `RRD_ARTIFACT_NAME` - Intermediate name of the GitHub rrd artifact. This should match the name passed to
+ `reusable_build_and_test_wheels.yml`
+ - `WHEEL_ARTIFACT_NAME` - Intermediate name of the GitHub wheel artifact. This should match the name passed to
+ `reusable_build_and_test_wheels.yml`
+- [reusable_build_web.yml](reusable_build_web.yml) - This job builds the wasm artifacts for the web.
+ - `RELEASE_VERSION` - If producing a release, the version number. This must match the version in `Cargo.toml`.
+- [reusable_upload_web.yml](reusable_upload_web.yml) - This job uploads the web assets to google cloud. By default this
+ only uploads to: `app.rerun.io/commit//`
+ - `MARK_PRERELEASE_FOR_MAINLINE` - If true, then the web assets will go to `app.rerun.io/preleease/
+ - `MARK_TAGGED_VERSION` - If true, then the web assets will go to `app.rerun.io/version/`
+ - `RELEASE_VERSION` - If producing a release, the version number.
+ - `RRD_ARTIFACT_NAME` - Intermediate name of the GitHub rrd artifact. This should match the name passed to
+ `reusable_build_and_test_wheels.yml`
+ - `UPLOAD_COMMIT_OVERRIDE` - If set, will replace the value of ``. This is necessary because we want pull
+ request builds associated with their originating commit, even if the web-build happens on an ephemeral merge-commit.
+- [reusable_pr_summary.yml](reusable_pr_summary.yml) - This job updates the PR summary with the results of the CI run.
+ - This summary can be found at:
+ `https://build.rerun.io/pr//`
+ - `PR_NUMBER` - The PR number to update. This will generally be set by the `on_pull_request.yml` workflow using:
+ `${{github.event.pull_request.number}}`
+
+## Manual Workflows
+- [manual_dispatch](manual_dispatch.yml) - This workflow is used to manually trigger the assorted reusable workflows for
+ testing.
+ - See the workflow file for the list of parameters.
+- [manual_build_wheels_for_pr.yml](manual_build_wheels_for_pr.yml) - This workflow can be dispatched on a branch and
+ will build all of the wheels for the associated pull-request. Uses:
+ - [reusable_build_and_test_wheels.yml](reusable_build_and_test_wheels.yml)
+ - [reusable_upload_wheels.yml](reusable_upload_wheels.yml)
+ - [reusable_pr_summary.yml](reusable_pr_summary.yml)
diff --git a/.github/workflows/manual_adhoc_web.yml b/.github/workflows/manual_adhoc_web.yml
new file mode 100644
index 000000000000..b0d8a6e9d939
--- /dev/null
+++ b/.github/workflows/manual_adhoc_web.yml
@@ -0,0 +1,48 @@
+name: Run an adhoc web build
+
+on:
+ workflow_dispatch:
+ inputs:
+ EXTRA_FLAGS:
+ type: string
+ description: 'Extra flags to pass to `re_build_web_viewer`'
+ required: false
+ default: ''
+ ADHOC_NAME:
+ type: string
+ description: 'Name of the stored adhoc build'
+ required: true
+
+jobs:
+
+ min-test-wheel:
+ name: 'Minimum Test Wheel'
+ # The upload-web job uses the min-test-wheel to get the RRD
+ uses: ./.github/workflows/reusable_build_and_test_wheels.yml
+ with:
+ CONCURRENCY: adhoc-web-${{ github.event.inputs.ADHOC_NAME }}
+ PLATFORM: linux
+ MATURIN_FEATURE_FLAGS: '--no-default-features --features extension-module'
+ WHEEL_ARTIFACT_NAME: ''
+ RRD_ARTIFACT_NAME: linux-rrd-fast
+ secrets: inherit
+
+ build-web-adhoc:
+ name: 'Build Web'
+ uses: ./.github/workflows/reusable_build_web.yml
+ with:
+ CONCURRENCY: adhoc-web-${{ github.event.inputs.ADHOC_NAME }}
+ EXTRA_FLAGS: ${{ github.event.inputs.EXTRA_FLAGS }}
+ secrets: inherit
+
+ upload-web:
+ name: 'Upload Web'
+ needs: [min-test-wheel, build-web-adhoc]
+ uses: ./.github/workflows/reusable_upload_web.yml
+ with:
+ CONCURRENCY: adhoc-web-${{ github.event.inputs.ADHOC_NAME }}
+ MARK_PRERELEASE_FOR_MAINLINE: false
+ MARK_TAGGED_VERSION: false
+ ADHOC_NAME: ${{ github.event.inputs.ADHOC_NAME }}
+ RRD_ARTIFACT_NAME: linux-rrd-fast
+ secrets: inherit
diff --git a/.github/workflows/manual_build_wheels_for_pr.yml b/.github/workflows/manual_build_wheels_for_pr.yml
new file mode 100644
index 000000000000..4f9c23beee09
--- /dev/null
+++ b/.github/workflows/manual_build_wheels_for_pr.yml
@@ -0,0 +1,129 @@
+name: Build and Upload Wheels for PR
+
+on:
+ workflow_dispatch:
+
+jobs:
+
+ check-for-pr:
+ runs-on: ubuntu-latest
+ outputs:
+ PR_NUMBER: ${{ steps.get_pr.outputs.PR_NUMBER }}
+ steps:
+ - name: Check if commit belongs to a PR
+ id: get_pr
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ run: |
+ pr_number=$(curl --silent --header "Authorization: Bearer ${GITHUB_TOKEN}" \
+ --url "https://api.github.com/repos/${GITHUB_REPOSITORY}/commits/${GITHUB_SHA}/pulls" \
+ | jq '.[] | .number')
+
+ if [ -z "$pr_number" ]; then
+ echo "No PR associated with this commit"
+ exit 1
+ else
+ echo "Commit is associated with PR: $pr_number"
+ echo "PR_NUMBER=$pr_number" >> "$GITHUB_OUTPUT"
+ fi
+
+ build-linux:
+ needs: [check-for-pr]
+ name: 'Linux: Build/Test Wheels'
+ uses: ./.github/workflows/reusable_build_and_test_wheels.yml
+ with:
+ CONCURRENCY: manual-wheels-linux-${{ needs.check-for-pr.outputs.PR_NUMBER }}
+ PLATFORM: linux
+ WHEEL_ARTIFACT_NAME: linux-wheel
+ RRD_ARTIFACT_NAME: linux-rrd
+ secrets: inherit
+
+ build-windows:
+ needs: [check-for-pr]
+ name: 'Windows: Build/Test Wheels'
+ uses: ./.github/workflows/reusable_build_and_test_wheels.yml
+ with:
+ CONCURRENCY: manual-wheels-windows-${{ needs.check-for-pr.outputs.PR_NUMBER }}
+ PLATFORM: windows
+ WHEEL_ARTIFACT_NAME: windows-wheel
+ RRD_ARTIFACT_NAME: ''
+ secrets: inherit
+
+ build-macos-arm:
+ needs: [check-for-pr]
+ name: 'Macos-Arm: Build/Test Wheels'
+ uses: ./.github/workflows/reusable_build_and_test_wheels.yml
+ with:
+ CONCURRENCY: manual-wheels-macos-arm-${{ needs.check-for-pr.outputs.PR_NUMBER }}
+ PLATFORM: macos-arm
+ WHEEL_ARTIFACT_NAME: macos-arm-wheel
+ RRD_ARTIFACT_NAME: ''
+ secrets: inherit
+
+ build-macos-intel:
+ needs: [check-for-pr]
+ name: 'Macos-Intel: Build/Test Wheels'
+ uses: ./.github/workflows/reusable_build_and_test_wheels.yml
+ with:
+ CONCURRENCY: manual-wheels-macos-intel-${{ needs.check-for-pr.outputs.PR_NUMBER }}
+ PLATFORM: macos-intel
+ WHEEL_ARTIFACT_NAME: 'macos-intel-wheel'
+ RRD_ARTIFACT_NAME: ''
+ secrets: inherit
+
+ upload-wheels-linux:
+ name: 'Linux: Upload Wheels'
+ needs: [build-linux]
+ uses: ./.github/workflows/reusable_upload_wheels.yml
+ with:
+ CONCURRENCY: manual-wheels-linux-${{ needs.check-for-pr.outputs.PR_NUMBER }}
+ WHEEL_ARTIFACT_NAME: linux-wheel
+ RRD_ARTIFACT_NAME: linux-rrd
+ secrets: inherit
+
+ upload-wheels-windows:
+ name: 'Windows: Upload Wheels'
+ needs: [build-linux, build-windows]
+ uses: ./.github/workflows/reusable_upload_wheels.yml
+ with:
+ CONCURRENCY: manual-wheels-windows-${{ needs.check-for-pr.outputs.PR_NUMBER }}
+ WHEEL_ARTIFACT_NAME: windows-wheel
+ RRD_ARTIFACT_NAME: linux-rrd
+ secrets: inherit
+
+ upload-wheels-macos-arm:
+ name: 'Macos-Arm: Upload Wheels'
+ needs: [build-linux, build-macos-arm]
+ uses: ./.github/workflows/reusable_upload_wheels.yml
+ with:
+ CONCURRENCY: manual-wheels--macos-arm-${{ needs.check-for-pr.outputs.PR_NUMBER }}
+ WHEEL_ARTIFACT_NAME: macos-arm-wheel
+ RRD_ARTIFACT_NAME: linux-rrd
+ secrets: inherit
+
+ upload-wheels-macos-intel:
+ name: 'Macos-Intel: Upload Wheels'
+ needs: [build-linux, build-macos-intel]
+ uses: ./.github/workflows/reusable_upload_wheels.yml
+ with:
+ CONCURRENCY: manual-wheels-macos-intel-${{ needs.check-for-pr.outputs.PR_NUMBER }}
+ WHEEL_ARTIFACT_NAME: macos-intel-wheel
+ RRD_ARTIFACT_NAME: linux-rrd
+ secrets: inherit
+
+ generate-wheel-index:
+ name: 'Generate Pip Index'
+ needs: [check-for-pr, upload-wheels-linux, upload-wheels-windows, upload-wheels-macos-arm, upload-wheels-macos-intel]
+ uses: ./.github/workflows/reusable_pip_index.yml
+ with:
+ CONCURRENCY: manual-wheels-${{ needs.check-for-pr.outputs.PR_NUMBER }}
+ secrets: inherit
+
+ update-pr-summary:
+ name: 'Update PR Summary'
+ needs: [check-for-pr, upload-wheels-linux, upload-wheels-windows, upload-wheels-macos-arm, upload-wheels-macos-intel]
+ uses: ./.github/workflows/reusable_pr_summary.yml
+ with:
+ CONCURRENCY: manual-wheels-${{ needs.check-for-pr.outputs.PR_NUMBER }}
+ PR_NUMBER: ${{ needs.check-for-pr.outputs.PR_NUMBER}}
+ secrets: inherit
diff --git a/.github/workflows/manual_dispatch.yml b/.github/workflows/manual_dispatch.yml
new file mode 100644
index 000000000000..43722ddde620
--- /dev/null
+++ b/.github/workflows/manual_dispatch.yml
@@ -0,0 +1,270 @@
+name: Manually Dispatch Workflows
+
+on:
+ workflow_dispatch:
+ # NOTE: boolean inputs are still actually strings
+ # See: https://github.com/actions/runner/issues/1483
+ inputs:
+ # Sorted based on job workflow logic rather than alphabetical
+ CHECKS:
+ description: 'Run reuseable_checks'
+ type: boolean
+ required: false
+ default: true
+
+ DEPLOY_DOCS:
+ description: 'Run reusable_deploy_docs'
+ type: boolean
+ required: false
+ default: false
+
+ BENCHES:
+ description: 'Run reusable_bench.yml'
+ type: boolean
+ required: false
+ default: false
+
+ MIN_TEST_WHEEL:
+ description: 'Run reuseable_build_and_test_wheels (Minimal Wheel Linux Only)'
+ type: boolean
+ required: false
+
+ WHEEL_PLATFORMS:
+ description: 'Run reusable_build_and_test_wheels (Full build: linux,windows,macos-arm,macos-intel)'
+ type: string
+ required: false
+ default: 'linux'
+
+ BUILD_WEB:
+ description: 'Run reusable_build_web'
+ type: boolean
+ required: false
+ default: true
+
+ RELEASE_VERSION:
+ description: 'Release Version Number (Must match Cargo.toml)'
+ type: string
+ required: false
+ default: 'prerelease'
+
+ UPLOAD_GCLOUD:
+ description: 'Upload wheels and wasm to gcloud'
+ type: boolean
+ required: false
+ default: false
+
+ UPDATE_PR_SUMMARY:
+ description: 'Update the PR Summary'
+ type: boolean
+ required: false
+ default: false
+
+ SAVE_CACHE:
+ description: 'Save the rust-cache where relevant'
+ type: boolean
+ required: false
+ default: false
+
+jobs:
+
+ checks:
+ name: Run All Checks
+ if: ${{ github.event.inputs.CHECKS == 'true' }}
+ uses: ./.github/workflows/reusable_checks.yml
+ with:
+ CONCURRENCY: manual-dispatch-${{ github.run_id}}
+ SAVE_CACHE: ${{ github.event.inputs.SAVE_CACHE == 'true' }}
+ secrets: inherit
+
+ deploy-docs:
+ # Never deploy docs if checks haven't passed
+ needs: [checks]
+ name: Deploy Docs
+ if: ${{ github.event.inputs.DEPLOY_DOCS == 'true' }}
+ uses: ./.github/workflows/reusable_deploy_docs.yml
+ with:
+ CONCURRENCY: manual-dispatch-${{ github.run_id}}
+ PY_DOCS_VERSION_NAME: "test"
+ UPDATE_LATEST: false
+ secrets: inherit
+
+ benches:
+ name: Benchmarks
+ if: ${{ github.event.inputs.BENCHES == 'true' }}
+ uses: ./.github/workflows/reusable_bench.yml
+ with:
+ CONCURRENCY: manual-dispatch-${{ github.run_id}}
+ secrets: inherit
+
+ min-test-wheel:
+ name: 'Minimum Test Wheel'
+ # The upload-web job uses the min-test-wheel to get the RRD
+ if: ${{ (github.event.inputs.MIN_TEST_WHEEL == 'true') || ((github.event.inputs.UPLOAD_GCLOUD == 'true') && ( github.event.inputs.BUILD_WEB == 'true') ) }}
+ uses: ./.github/workflows/reusable_build_and_test_wheels.yml
+ with:
+ CONCURRENCY: manual-dispatch-${{ github.run_id}}
+ SAVE_CACHE: ${{ github.event.inputs.SAVE_CACHE == 'true' }}
+ PLATFORM: linux
+ MATURIN_FEATURE_FLAGS: '--no-default-features --features extension-module'
+ WHEEL_ARTIFACT_NAME: ''
+ RRD_ARTIFACT_NAME: linux-rrd-fast
+ secrets: inherit
+
+ build-linux:
+ name: 'Linux: Build/Test Wheels'
+ # The upload-wheels jobs all use the linux build to get the RRD
+ # TODO(jleibs): Debug why multi-line if statements don't work here
+ if: ${{ contains(github.event.inputs.WHEEL_PLATFORMS, 'linux') || ((github.event.inputs.UPLOAD_GCLOUD == 'true') && ( github.event.inputs.WHEEL_PLATFORMS != '') ) }}
+
+ uses: ./.github/workflows/reusable_build_and_test_wheels.yml
+ with:
+ CONCURRENCY: manual-dispatch-linux-${{ github.run_id}}
+ SAVE_CACHE: ${{ github.event.inputs.SAVE_CACHE == 'true' }}
+ PLATFORM: linux
+ WHEEL_ARTIFACT_NAME: linux-wheel
+ RRD_ARTIFACT_NAME: linux-rrd
+ RELEASE_VERSION: ${{ github.event.inputs.RELEASE_VERSION }}
+ secrets: inherit
+
+ build-windows:
+ name: 'Windows: Build/Test Wheels'
+ if: ${{ contains(github.event.inputs.WHEEL_PLATFORMS, 'windows') }}
+ uses: ./.github/workflows/reusable_build_and_test_wheels.yml
+ with:
+ CONCURRENCY: manual-dispatch-windows-${{ github.run_id}}
+ SAVE_CACHE: ${{ github.event.inputs.SAVE_CACHE == 'true' }}
+ PLATFORM: windows
+ WHEEL_ARTIFACT_NAME: windows-wheel
+ RRD_ARTIFACT_NAME: ''
+ RELEASE_VERSION: ${{ github.event.inputs.RELEASE_VERSION }}
+ secrets: inherit
+
+ build-macos-arm:
+ name: 'Macos-Arm: Build/Test Wheels'
+ if: ${{ contains(github.event.inputs.WHEEL_PLATFORMS, 'macos-arm') }}
+ uses: ./.github/workflows/reusable_build_and_test_wheels.yml
+ with:
+ CONCURRENCY: manual-dispatch-macos-arm-${{ github.run_id}}
+ SAVE_CACHE: ${{ github.event.inputs.SAVE_CACHE == 'true' }}
+ PLATFORM: macos-arm
+ WHEEL_ARTIFACT_NAME: macos-arm-wheel
+ RRD_ARTIFACT_NAME: ''
+ RELEASE_VERSION: ${{ github.event.inputs.RELEASE_VERSION }}
+ secrets: inherit
+
+ build-macos-intel:
+ name: 'Macos-Intel: Build/Test Wheels'
+ if: ${{ contains(github.event.inputs.WHEEL_PLATFORMS, 'macos-intel') }}
+ uses: ./.github/workflows/reusable_build_and_test_wheels.yml
+ with:
+ CONCURRENCY: manual-dispatch-macos-intel-${{ github.run_id}}
+ SAVE_CACHE: ${{ github.event.inputs.SAVE_CACHE == 'true' }}
+ PLATFORM: macos-intel
+ WHEEL_ARTIFACT_NAME: 'macos-intel-wheel'
+ RRD_ARTIFACT_NAME: ''
+ RELEASE_VERSION: ${{ github.event.inputs.RELEASE_VERSION }}
+
+ secrets: inherit
+
+ upload-wheels-linux:
+ name: 'Linux: Upload Wheels'
+ needs: [build-linux]
+ if: ${{ contains(github.event.inputs.WHEEL_PLATFORMS, 'linux') && (github.event.inputs.UPLOAD_GCLOUD == 'true') }}
+ uses: ./.github/workflows/reusable_upload_wheels.yml
+ with:
+ CONCURRENCY: manual-dispatch-linux-${{ github.run_id}}
+ WHEEL_ARTIFACT_NAME: linux-wheel
+ RRD_ARTIFACT_NAME: linux-rrd
+ secrets: inherit
+
+ upload-wheels-windows:
+ name: 'Windows: Upload Wheels'
+ needs: [build-linux, build-windows]
+ if: ${{ contains(github.event.inputs.WHEEL_PLATFORMS, 'windows') && (github.event.inputs.UPLOAD_GCLOUD == 'true') }}
+ uses: ./.github/workflows/reusable_upload_wheels.yml
+ with:
+ CONCURRENCY: manual-dispatch-windows-${{ github.run_id}}
+ WHEEL_ARTIFACT_NAME: windows-wheel
+ RRD_ARTIFACT_NAME: linux-rrd
+ secrets: inherit
+
+ upload-wheels-macos-arm:
+ name: 'Macos-Arm: Upload Wheels'
+ needs: [build-linux, build-macos-arm]
+ if: ${{ contains(github.event.inputs.WHEEL_PLATFORMS, 'macos-arm') && (github.event.inputs.UPLOAD_GCLOUD == 'true') }}
+ uses: ./.github/workflows/reusable_upload_wheels.yml
+ with:
+ CONCURRENCY: manual-dispatch-macos-arm-${{ github.run_id}}
+ WHEEL_ARTIFACT_NAME: macos-arm-wheel
+ RRD_ARTIFACT_NAME: linux-rrd
+ secrets: inherit
+
+ upload-wheels-macos-intel:
+ name: 'Macos-Intel: Upload Wheels'
+ needs: [build-linux, build-macos-intel]
+ if: ${{ contains(github.event.inputs.WHEEL_PLATFORMS, 'macos-intel') && (github.event.inputs.UPLOAD_GCLOUD == 'true') }}
+ uses: ./.github/workflows/reusable_upload_wheels.yml
+ with:
+ CONCURRENCY: manual-dispatch-macos-intel-${{ github.run_id}}
+ WHEEL_ARTIFACT_NAME: macos-intel-wheel
+ RRD_ARTIFACT_NAME: linux-rrd
+ secrets: inherit
+
+ build-web:
+ name: 'Build Web'
+ if: ${{ github.event.inputs.BUILD_WEB == 'true'}}
+ uses: ./.github/workflows/reusable_build_web.yml
+ with:
+ CONCURRENCY: manual-dispatch-${{ github.run_id}}
+ RELEASE_VERSION: ${{ github.event.inputs.RELEASE_VERSION }}
+ secrets: inherit
+
+ upload-web:
+ name: 'Upload Web'
+ needs: [min-test-wheel, build-web]
+ if: ${{ (github.event.inputs.BUILD_WEB == 'true') && (github.event.inputs.UPLOAD_GCLOUD == 'true') }}
+ uses: ./.github/workflows/reusable_upload_web.yml
+ with:
+ CONCURRENCY: manual-dispatch-${{ github.run_id}}
+ MARK_PRERELEASE_FOR_MAINLINE: false
+ MARK_TAGGED_VERSION: false
+ RRD_ARTIFACT_NAME: linux-rrd-fast
+ secrets: inherit
+
+ check-for-pr:
+ runs-on: ubuntu-latest
+ if: ${{ github.event.inputs.UPDATE_PR_SUMMARY == 'true' }}
+ outputs:
+ PR_NUMBER: ${{ steps.get_pr.outputs.PR_NUMBER }}
+ steps:
+ - name: Check if commit belongs to a PR
+ id: get_pr
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ run: |
+ pr_number=$(curl --silent --header "Authorization: Bearer ${GITHUB_TOKEN}" \
+ --url "https://api.github.com/repos/${GITHUB_REPOSITORY}/commits/${GITHUB_SHA}/pulls" \
+ | jq '.[] | .number')
+
+ if [ -z "$pr_number" ]; then
+ echo "No PR associated with this commit"
+ exit 1
+ else
+ echo "Commit is associated with PR: $pr_number"
+ echo "PR_NUMBER=$pr_number" >> "$GITHUB_OUTPUT"
+ fi
+
+ update-pr-summary:
+ name: 'Update PR Summary'
+ # TODO(jleibs): There's no good way to have an optional needs.
+ # If we leave this here the job fails if we don't build all the wheels + web.
+ # Since this just just for testing, leave this out. We can manually run it to update
+ # a PR if we want to see changes.
+ #needs: [check-for-pr, upload-web, upload-wheels-linux, upload-wheels-windows, upload-wheels-macos-arm, upload-wheels-macos-intel]
+ needs: [check-for-pr]
+ if: ${{ github.event.inputs.UPDATE_PR_SUMMARY == 'true' }}
+ uses: ./.github/workflows/reusable_pr_summary.yml
+ with:
+ CONCURRENCY: manual-dispatch-${{ github.run_id}}
+ PR_NUMBER: ${{ needs.check-for-pr.outputs.PR_NUMBER }}
+ secrets: inherit
diff --git a/.github/workflows/manual_run_bench.yml b/.github/workflows/manual_run_bench.yml
new file mode 100644
index 000000000000..05bb2cbc409d
--- /dev/null
+++ b/.github/workflows/manual_run_bench.yml
@@ -0,0 +1,59 @@
+name: Manually run the benchmarks
+
+on:
+ workflow_dispatch:
+ inputs:
+ BENCH_NAME:
+ description: 'Name of the benchmark to save'
+ type: string
+ required: false
+ default: ''
+ COMPARE_TO:
+ description: 'Saved Benchmark to compare to'
+ type: string
+ required: false
+ default: 'main'
+
+jobs:
+
+ check-for-pr:
+ runs-on: ubuntu-latest
+ outputs:
+ PR_NUMBER: ${{ steps.get_pr.outputs.PR_NUMBER }}
+ steps:
+ - name: Check if commit belongs to a PR
+ id: get_pr
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ run: |
+ pr_number=$(curl --silent --header "Authorization: Bearer ${GITHUB_TOKEN}" \
+ --url "https://api.github.com/repos/${GITHUB_REPOSITORY}/commits/${GITHUB_SHA}/pulls" \
+ | jq '.[] | .number')
+
+ if [ -z "$pr_number" ]; then
+ echo "No PR associated with this commit"
+ exit 1
+ else
+ echo "Commit is associated with PR: $pr_number"
+ echo "PR_NUMBER=$pr_number" >> "$GITHUB_OUTPUT"
+ fi
+
+ run-benches:
+ name: Benchmarks
+ needs: [check-for-pr]
+ uses: ./.github/workflows/reusable_bench.yml
+ with:
+ CONCURRENCY: manual-bench-${{ needs.check-for-pr.outputs.PR_NUMBER }}
+ BENCH_NAME: ${{ github.event.inputs.BENCH_NAME }}
+ COMPARE_TO: ${{ github.event.inputs.COMPARE_TO }}
+ secrets: inherit
+
+
+ update-pr-summary:
+ name: 'Update PR Summary'
+ needs: [check-for-pr, run-benches]
+ uses: ./.github/workflows/reusable_pr_summary.yml
+ with:
+ CONCURRENCY: manual-bench-${{ needs.check-for-pr.outputs.PR_NUMBER }}
+ PR_NUMBER: ${{ needs.check-for-pr.outputs.PR_NUMBER}}
+ secrets: inherit
diff --git a/.github/workflows/misc.yml b/.github/workflows/misc.yml
deleted file mode 100644
index acdcfff2cd7d..000000000000
--- a/.github/workflows/misc.yml
+++ /dev/null
@@ -1,32 +0,0 @@
-name: CI (Misc)
-
-on:
- workflow_dispatch:
- pull_request:
- push:
- branches:
- - "main"
-
-concurrency:
- group: ${{ github.workflow }}-${{ github.event.pull_request.number }} # Cancel previous CI jobs on the same branch
- cancel-in-progress: true
-
-jobs:
- misc-rerun-lints:
- name: Rerun lints
- runs-on: ubuntu-latest
- steps:
- - uses: actions/checkout@v3
-
- - name: Set up Python
- uses: actions/setup-python@v4
- with:
- python-version: "3.8"
-
- - name: Rerun lints
- run: |
- ./scripts/lint.py
-
- - name: Check for too large files
- run: |
- ./scripts/check_large_files.sh
diff --git a/.github/workflows/on_pull_request.yml b/.github/workflows/on_pull_request.yml
new file mode 100644
index 000000000000..877f34ba392c
--- /dev/null
+++ b/.github/workflows/on_pull_request.yml
@@ -0,0 +1,64 @@
+name: Pull-Request
+
+on:
+ pull_request:
+ types:
+ - opened
+ - synchronize
+
+# These jobs use fairly short names as they are a prefix in the display hierarchy
+jobs:
+ checks:
+ name: Checks
+ uses: ./.github/workflows/reusable_checks.yml
+ with:
+ CONCURRENCY: pr-${{ github.event.pull_request.number }}
+ secrets: inherit
+
+ min-test-wheel:
+ name: "Minimum Wheel"
+ uses: ./.github/workflows/reusable_build_and_test_wheels.yml
+ with:
+ CONCURRENCY: pr-${{ github.event.pull_request.number }}
+ SAVE_CACHE: false
+ PLATFORM: linux
+ MATURIN_FEATURE_FLAGS: "--no-default-features --features extension-module"
+ WHEEL_ARTIFACT_NAME: "linux-wheel-fast"
+ RRD_ARTIFACT_NAME: linux-rrd-fast
+ secrets: inherit
+
+ build-web:
+ name: "Build Web"
+ uses: ./.github/workflows/reusable_build_web.yml
+ with:
+ CONCURRENCY: pr-${{ github.event.pull_request.number }}
+ secrets: inherit
+
+ upload-web:
+ name: "Upload Web"
+ needs: [min-test-wheel, build-web]
+ uses: ./.github/workflows/reusable_upload_web.yml
+ with:
+ CONCURRENCY: pr-${{ github.event.pull_request.number }}
+ RRD_ARTIFACT_NAME: linux-rrd-fast
+ UPLOAD_COMMIT_OVERRIDE: ${{ github.event.pull_request.head.sha }}
+ secrets: inherit
+
+ # run-notebook:
+ # name: 'Run Notebook'
+ # needs: [min-test-wheel]
+ # uses: ./.github/workflows/reusable_run_notebook.yml
+ # with:
+ # CONCURRENCY: pr-${{ github.event.pull_request.number }}
+ # WHEEL_ARTIFACT_NAME: linux-wheel-fast
+ # UPLOAD_COMMIT_OVERRIDE: ${{ github.event.pull_request.head.sha }}
+ # secrets: inherit
+
+ save-pr-summary:
+ name: "Save PR Summary"
+ needs: [upload-web] #run-notebook]
+ uses: ./.github/workflows/reusable_pr_summary.yml
+ with:
+ CONCURRENCY: pr-${{ github.event.pull_request.number }}
+ PR_NUMBER: ${{ github.event.pull_request.number }}
+ secrets: inherit
diff --git a/.github/workflows/on_push_main.yml b/.github/workflows/on_push_main.yml
new file mode 100644
index 000000000000..59d759f63aa3
--- /dev/null
+++ b/.github/workflows/on_push_main.yml
@@ -0,0 +1,189 @@
+name: Push To Main
+
+on:
+ push:
+ branches:
+ - "main"
+
+jobs:
+ checks:
+ name: Checks
+ uses: ./.github/workflows/reusable_checks.yml
+ with:
+ CONCURRENCY: push-${{ github.ref_name }}
+ secrets: inherit
+
+ benches:
+ name: Benchmarks
+ uses: ./.github/workflows/reusable_bench.yml
+ with:
+ CONCURRENCY: push-${{ github.ref_name }}
+ SAVE_BENCHES: true
+ BENCH_NAME: main
+ COMPARE_TO: main
+ secrets: inherit
+
+ deploy-docs:
+ needs: [checks, benches]
+ name: Deploy Docs
+ uses: ./.github/workflows/reusable_deploy_docs.yml
+ with:
+ CONCURRENCY: push-${{ github.ref_name }}
+ PY_DOCS_VERSION_NAME: "HEAD"
+ UPDATE_LATEST: false
+ secrets: inherit
+
+ build-web:
+ name: 'Build Web'
+ uses: ./.github/workflows/reusable_build_web.yml
+ with:
+ CONCURRENCY: push-${{ github.ref_name }}
+ secrets: inherit
+
+ upload-web:
+ name: 'Upload Web'
+ needs: [build-linux, build-web]
+ uses: ./.github/workflows/reusable_upload_web.yml
+ with:
+ CONCURRENCY: push-${{ github.ref_name }}
+ RRD_ARTIFACT_NAME: linux-rrd
+ MARK_PRERELEASE_FOR_MAINLINE: true
+ secrets: inherit
+
+ build-linux:
+ needs: [checks]
+ name: 'Linux: Build/Test Wheels'
+ uses: ./.github/workflows/reusable_build_and_test_wheels.yml
+ with:
+ CONCURRENCY: push-linux-${{ github.ref_name }}
+ PLATFORM: linux
+ WHEEL_ARTIFACT_NAME: linux-wheel
+ RRD_ARTIFACT_NAME: linux-rrd
+ secrets: inherit
+
+ build-windows:
+ needs: [checks]
+ name: 'Windows: Build/Test Wheels'
+ uses: ./.github/workflows/reusable_build_and_test_wheels.yml
+ with:
+ CONCURRENCY: push-windows-${{ github.ref_name }}
+ PLATFORM: windows
+ WHEEL_ARTIFACT_NAME: windows-wheel
+ RRD_ARTIFACT_NAME: ''
+ secrets: inherit
+
+ build-macos-arm:
+ needs: [checks]
+ name: 'Macos-Arm: Build/Test Wheels'
+ uses: ./.github/workflows/reusable_build_and_test_wheels.yml
+ with:
+ CONCURRENCY: push-macos-arm-${{ github.ref_name }}
+ PLATFORM: macos-arm
+ WHEEL_ARTIFACT_NAME: macos-arm-wheel
+ RRD_ARTIFACT_NAME: ''
+ secrets: inherit
+
+ build-macos-intel:
+ needs: [checks]
+ name: 'Macos-Intel: Build/Test Wheels'
+ uses: ./.github/workflows/reusable_build_and_test_wheels.yml
+ with:
+ CONCURRENCY: push-macos-intel-${{ github.ref_name }}
+ PLATFORM: macos-intel
+ WHEEL_ARTIFACT_NAME: 'macos-intel-wheel'
+ RRD_ARTIFACT_NAME: ''
+ secrets: inherit
+
+ upload-wheels-linux:
+ name: 'Linux: Upload Wheels'
+ needs: [build-linux]
+ uses: ./.github/workflows/reusable_upload_wheels.yml
+ with:
+ CONCURRENCY: push-linux-${{ github.ref_name }}
+ WHEEL_ARTIFACT_NAME: linux-wheel
+ RRD_ARTIFACT_NAME: linux-rrd
+ secrets: inherit
+
+ upload-wheels-windows:
+ name: 'Windows: Upload Wheels'
+ needs: [build-linux, build-windows]
+ uses: ./.github/workflows/reusable_upload_wheels.yml
+ with:
+ CONCURRENCY: push-windows-${{ github.ref_name }}
+ WHEEL_ARTIFACT_NAME: windows-wheel
+ RRD_ARTIFACT_NAME: linux-rrd
+ secrets: inherit
+
+ upload-wheels-macos-arm:
+ name: 'Macos-Arm: Upload Wheels'
+ needs: [build-linux, build-macos-arm]
+ uses: ./.github/workflows/reusable_upload_wheels.yml
+ with:
+ CONCURRENCY: push-macos-arm-${{ github.ref_name }}
+ WHEEL_ARTIFACT_NAME: macos-arm-wheel
+ RRD_ARTIFACT_NAME: linux-rrd
+ secrets: inherit
+
+ upload-wheels-macos-intel:
+ name: 'Macos-Intel: Upload Wheels'
+ needs: [build-linux, build-macos-intel]
+ uses: ./.github/workflows/reusable_upload_wheels.yml
+ with:
+ CONCURRENCY: push-macos-intel-${{ github.ref_name }}
+ WHEEL_ARTIFACT_NAME: macos-intel-wheel
+ RRD_ARTIFACT_NAME: linux-rrd
+ secrets: inherit
+
+ generate-pip-index:
+ name: 'Generate Pip Index'
+ needs: [upload-wheels-linux, upload-wheels-windows, upload-wheels-macos-arm, upload-wheels-macos-intel]
+ uses: ./.github/workflows/reusable_pip_index.yml
+ with:
+ CONCURRENCY: push-${{ github.ref_name }}
+ secrets: inherit
+
+ pre-release:
+ name: Pre Release
+ concurrency:
+ group: push-${{ github.ref_name }}-prerelease
+ cancel-in-progress: true
+ needs: [upload-web, generate-pip-index]
+ runs-on: "ubuntu-latest"
+ steps:
+ - name: Add SHORT_SHA env property with commit short sha
+ run: echo "SHORT_SHA=`echo ${{github.sha}} | cut -c1-7`" >> $GITHUB_ENV
+
+ # First delete the old prerelease. If we don't do this, we don't get things like
+ # proper source-archives and changelog info.
+ # https://github.com/dev-drprasad/delete-tag-and-release
+ - uses: dev-drprasad/delete-tag-and-release@v0.2.1
+ with:
+ tag_name: prerelease
+ delete_release: true
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+
+ # Create the actual prerelease
+ # https://github.com/ncipollo/release-action
+ - name: GitHub Release
+ uses: ncipollo/release-action@v1.12.0
+ with:
+ body: |
+ This is a prerelease. It is not intended for production use.
+ Please report any issues you find.
+
+ ## Example Hosted App
+ https://app.rerun.io/commit/${{ env.SHORT_SHA }}
+
+ ## Wheels can be installed with:
+ ```
+ pip install --pre -f https://build.rerun.io/commit/${{ env.SHORT_SHA}}/wheels --upgrade rerun-sdk
+ ```
+ prerelease: true
+ name: "Development Build"
+ tag: "prerelease"
+ token: ${{ secrets.GITHUB_TOKEN }}
+ generateReleaseNotes: true
+ allowUpdates: true
+ removeArtifacts: true
+ replacesArtifacts: true
diff --git a/.github/workflows/python.yml b/.github/workflows/python.yml
deleted file mode 100644
index 491c5353550a..000000000000
--- a/.github/workflows/python.yml
+++ /dev/null
@@ -1,629 +0,0 @@
-name: CI (Python)
-
-on:
- pull_request:
- types: [labeled, synchronize, opened]
- push:
- branches:
- - "main"
- tags:
- - "v*.*.*" # on release tag
- workflow_dispatch:
- inputs:
- force_build_wheel:
- description: "Build python wheels"
- required: true
- default: false
- type: boolean
-
-env:
- PYTHON_VERSION: "3.8"
- PRE_RELEASE_INSTRUCTIONS: |
- ## Installing the pre-release Python SDK
- 1. Download the correct `.whl`.
- 2. Run `pip install rerun_sdk<...>.whl` (replace `<...>` with the actual filename)
- 3. Test it: `rerun --version`
- UBUNTU_REQUIRED_PKGS: libgtk-3-dev libxcb-render0-dev libxcb-shape0-dev libxcb-xfixes0-dev libxkbcommon-dev libssl-dev libfontconfig1-dev libatk-bridge2.0 libfreetype6-dev libglib2.0-dev
-
-concurrency:
- group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} # Cancel previous CI jobs only on pull-requests
- cancel-in-progress: true
-
-jobs:
- lint:
- name: Python lints (black, mypy, flake8)
- runs-on: ubuntu-latest
- steps:
- - uses: actions/checkout@v3
-
- - uses: extractions/setup-just@v1
- env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- with:
- just-version: 1.5
-
- - name: Set up Python
- uses: actions/setup-python@v4
- with:
- python-version: ${{ env.PYTHON_VERSION }}
- cache: "pip"
- cache-dependency-path: "rerun_py/requirements-lint.txt"
-
- - name: Install Python dependencies
- run: |
- pip install --upgrade pip
- pip install -r rerun_py/requirements-lint.txt
-
- - name: Lint Python
- run: |
- just py-lint
-
- - name: Check requirements
- run: |
- just py-requirements
-
- # ---------------------------------------------------------------------------
- # We need one wheel-build to be special so the other builds (namely mac arm) can use its rrd
- # This copy-paste is awful, but we'll refactor the build soon.
- wheels-linux:
- if: github.event_name == 'push' || github.event.inputs.force_build_wheel
- name: Build Python Wheels (Linux)
- runs-on: ubuntu-latest
- container:
- image: rerunio/ci_docker:0.6
- steps:
- - uses: actions/checkout@v3
-
- # These should already be in the docker container, but run for good measure. A no-op install
- # should be fast, and this way things don't break if we add new packages without rebuilding
- # docker
- - name: Cache APT Packages
- uses: awalsh128/cache-apt-pkgs-action@v1.2.2
- with:
- packages: ${{ env.UBUNTU_REQUIRED_PKGS }}
- version: 2.0 # Increment this to pull newer packages
- execute_install_scripts: true
-
- - name: Set up cargo cache
- uses: Swatinem/rust-cache@v2
- with:
- env-vars: CARGO CC CFLAGS CXX CMAKE RUST CACHE_KEY
- # Don't update the cache -- it will be updated by the lint job
- # TODO(jleibs): this job will likely run before rust.yml updates
- # the cache. Better cross-job sequencing would be nice here
- save-if: False
-
- # These should already be in the docker container, but run for good measure. A no-op install
- # should be fast, and this way things don't break if we add new packages without rebuilding
- # docker
- - run: pip install -r rerun_py/requirements-build.txt
-
- # ----------------------------------------------------------------------------------
-
- - name: Patch Cargo.toml for pre-release
- if: github.ref == 'refs/heads/main'
- # After patching the pre-release version, run cargo update.
- # This updates the cargo.lock file with the new version numbers and keeps the wheel build from failing
- run: |
- python3 scripts/version_util.py --patch_prerelease
- cargo update -w
-
- - name: Version check for tagged-release
- if: startsWith(github.ref, 'refs/tags/v')
- # This call to version_util.py will assert version from Cargo.toml matches git tagged version vX.Y.Z
- run: |
- python3 scripts/version_util.py --check_version
-
- - name: Store the expected version
- # Find the current cargo version and store it in the GITHUB_ENV var: `expected_version`
- shell: bash
- run: |
- echo "expected_version=$(python3 scripts/version_util.py --bare_cargo_version)" >> $GITHUB_ENV
-
- - name: Build Wheel
- uses: PyO3/maturin-action@v1
- with:
- maturin-version: "0.14.10"
- manylinux: manylinux_2_31
- container: off
- command: build
- args: |
- --manifest-path rerun_py/Cargo.toml
- --release
- --target x86_64-unknown-linux-gnu
- --no-default-features
- --features pypi
- --out pre-dist
-
- - name: Install wheel dependencies
- # First we install the dependencies manually so we can use `--no-index` when installing the wheel.
- # This needs to be a separate step for some reason or the following step fails
- # TODO(jleibs): pull these deps from pyproject.toml
- # TODO(jleibs): understand why deps can't be installed in the same step as the wheel
- shell: bash
- run: |
- pip install deprecated numpy>=1.23 pyarrow==10.0.1
-
- - name: Install built wheel
- # Now install the wheel using a specific version and --no-index to guarantee we get the version from
- # the pre-dist folder. Note we don't use --force-reinstall here because --no-index means it wouldn't
- # find the dependencies to reinstall them.
- shell: bash
- run: |
- pip uninstall rerun-sdk
- pip install rerun-sdk==${{ env.expected_version }} --no-index --find-links pre-dist
-
- - name: Verify built wheel version
- shell: bash
- run: |
- python3 -m rerun --version
- which rerun
- rerun --version
-
- - name: Run unit tests
- shell: bash
- run: cd rerun_py/tests && pytest
-
- - name: Run e2e test
- shell: bash
- run: RUST_LOG=debug scripts/run_python_e2e_test.py --no-build # rerun-sdk is already built and installed
-
- - name: Unpack the wheel
- shell: bash
- run: |
- mkdir unpack-dist
- wheel unpack pre-dist/*.whl --dest unpack-dist
-
- - name: Get the folder name
- shell: bash
- run: |
- echo "pkg_folder=$(ls unpack-dist)" >> $GITHUB_ENV
-
- - name: Cache RRD dataset
- id: dataset
- uses: actions/cache@v3
- with:
- path: examples/python/colmap/dataset/
- # TODO(jleibs): Derive this key from the invocation below
- key: colmap-dataset-colmap-fiat-v0
-
- - name: Generate Embedded RRD file
- shell: bash
- # If you change the line below you should almost definitely change the `key:` line above by giving it a new, unique name
- run: |
- mkdir rrd
- pip install -r examples/python/colmap/requirements.txt
- python3 examples/python/colmap/main.py --dataset colmap_fiat --resize 800x600 --save rrd/colmap_fiat.rrd
- cp rrd/colmap_fiat.rrd unpack-dist/${{ env.pkg_folder }}/rerun_sdk/rerun_demo/colmap_fiat.rrd
-
- - name: Repack the wheel
- shell: bash
- run: |
- mkdir dist
- wheel pack unpack-dist/${{ env.pkg_folder }} --dest dist/
-
- - name: Upload wheels
- uses: actions/upload-artifact@v3
- with:
- name: wheels
- path: dist
-
- # All platforms are currently creating the same rrd file, upload one of them
- - name: Save RRD artifact
- uses: actions/upload-artifact@v3
- with:
- name: rrd
- path: rrd
-
- # ---------------------------------------------------------------------------
- matrix-setup:
- # Building all the wheels is expensive, so we only run this job when we push (to main or release tags),
- # or if the job was manually triggered with `force_build_wheel` set to true.
- if: github.event_name == 'push' || github.event.inputs.force_build_wheel
- runs-on: ubuntu-latest
-
- outputs:
- matrix: ${{ steps.set-matrix.outputs.matrix }}
-
- steps:
- - name: Dump GitHub context
- env:
- GITHUB_CONTEXT: ${{ toJson(github) }}
- run: echo "$GITHUB_CONTEXT"
- - name: Dump job context
- env:
- JOB_CONTEXT: ${{ toJson(job) }}
- run: echo "$JOB_CONTEXT"
-
- - id: set-matrix
- shell: bash
- # TODO(jleibs): figure out why tests are failing to complete on `x86_64-apple-darwin`
- # See: https://github.com/rerun-io/rerun/pull/1853
- run: |
- matrix=()
- matrix+=('{"platform": "macos", "target": "x86_64-apple-darwin", "run_tests": false, "runs_on": "macos-latest" },')
- matrix+=('{"platform": "macos", "target": "aarch64-apple-darwin", "run_tests": false, "runs_on": "macos-latest" },') # NOTE: we can't run tests on arm since our macos runner is x86_64
- matrix+=('{"platform": "windows", "target": "x86_64-pc-windows-msvc", "run_tests": true, "runs_on": "windows-latest-8-cores"},')
-
- echo "Matrix values: ${matrix[@]}"
-
- echo "matrix={\"include\":[${matrix[@]}]}" >> $GITHUB_OUTPUT
-
- wheels:
- name: Build Remaining Python Wheels
- needs: [lint, matrix-setup, wheels-linux]
-
- strategy:
- matrix: ${{fromJson(needs.matrix-setup.outputs.matrix)}}
-
- runs-on: ${{ matrix.runs_on }}
-
- steps:
- - uses: actions/checkout@v3
-
- - name: Set up cargo cache
- uses: Swatinem/rust-cache@v2
- with:
- env-vars: CARGO CC CFLAGS CXX CMAKE RUST CACHE_KEY
- # Don't update the cache -- it will be updated by the lint job
- # TODO(jleibs): this job will likely run before rust.yml updates
- # the cache. Better cross-job sequencing would be nice here
- save-if: False
-
- # The pip-cache setup logic doesn't work in the ubuntu docker container
- # That's probably fine since we bake these deps into the container already
- - name: Setup python
- uses: actions/setup-python@v4
- with:
- python-version: ${{ env.PYTHON_VERSION }}
- cache: "pip"
- cache-dependency-path: "rerun_py/requirements-build.txt"
-
- # These should already be in the docker container, but run for good measure. A no-op install
- # should be fast, and this way things don't break if we add new packages without rebuilding
- # docker
- - run: pip install -r rerun_py/requirements-build.txt
-
- # ----------------------------------------------------------------------------------
- # Install prerequisites for building the web-viewer Wasm
-
- # We have a nice script for that: ./scripts/setup_web.sh
- # Unfortunately, we can't run that on Windows, because Windows doesn't come with
- # a package manager like grown-up OSes do (at least not the CI version of Windows).
- # Also we can't run it on linux because the 20.04 Docker container will install
- # an old version of binaryen/wasm-opt that barfs on the `--fast-math` flag
- # So we only run the script on macos, and then on Windows we do the parts of the script manually.
- # On ubuntu, the correct packages are pre-installed in our docker container.
-
- - name: Install prerequisites for building the web-viewer Wasm (non-Windows)
- if: matrix.platform == 'macos'
- shell: bash
- run: ./scripts/setup_web.sh
-
- # The first steps of setup_web.sh, for Windows:
- - name: Install wasm32 and wasm-bindgen-cli for building the web-viewer Wasm on windows
- if: matrix.platform == 'windows'
- shell: bash
- run: rustup target add wasm32-unknown-unknown && cargo install wasm-bindgen-cli --version 0.2.84
-
- # The last step of setup_web.sh, for Windows.
- # Since 'winget' is not available within the GitHub runner, we download the package directly:
- # See: https://github.com/marketplace/actions/engineerd-configurator
- - name: Install binaryen for building the web-viewer Wasm on windows
- if: matrix.platform == 'windows'
- uses: engineerd/configurator@v0.0.9
- with:
- name: "wasm-opt.exe"
- url: "https://github.com/WebAssembly/binaryen/releases/download/version_111/binaryen-version_111-x86_64-windows.tar.gz"
- pathInArchive: "binaryen-version_111/bin/wasm-opt.exe"
-
- # ----------------------------------------------------------------------------------
-
- - name: Patch Cargo.toml for pre-release
- if: github.ref == 'refs/heads/main'
- # After patching the pre-release version, run cargo update.
- # This updates the cargo.lock file with the new version numbers and keeps the wheel build from failing
- run: |
- python3 scripts/version_util.py --patch_prerelease
- cargo update -w
-
- - name: Version check for tagged-release
- if: startsWith(github.ref, 'refs/tags/v')
- # This call to version_util.py will assert version from Cargo.toml matches git tagged version vX.Y.Z
- run: |
- python3 scripts/version_util.py --check_version
-
- - name: Store the expected version
- # Find the current cargo version and store it in the GITHUB_ENV var: `expected_version`
- shell: bash
- run: |
- echo "expected_version=$(python3 scripts/version_util.py --bare_cargo_version)" >> $GITHUB_ENV
-
- - name: Build Wheel
- uses: PyO3/maturin-action@v1
- with:
- maturin-version: "0.14.10"
- manylinux: manylinux_2_31
- container: off
- command: build
- args: |
- --manifest-path rerun_py/Cargo.toml
- --release
- --target ${{ matrix.target }}
- --no-default-features
- --features pypi
- --out pre-dist
-
- - name: Install built wheel
- if: ${{ matrix.run_tests }}
- # First we install the dependencies manually so we can use `--no-index` when installing the wheel.
- # Then install the wheel using a specific version and --no-index to guarantee we get the version from
- # the pre-dist folder. Note we don't use --force-reinstall here because --no-index means it wouldn't
- # find the dependencies to reinstall them.
- # TODO(jleibs): pull these deps from pyproject.toml
- shell: bash
- run: |
- pip uninstall rerun-sdk
- pip install deprecated numpy>=1.23 pyarrow==10.0.1
- pip install rerun-sdk==${{ env.expected_version }} --no-index --find-links pre-dist
-
- - name: Verify built wheel version
- if: ${{ matrix.run_tests }}
- shell: bash
- run: |
- python3 -m rerun --version
- which rerun
- rerun --version
-
- - name: Run unit tests
- if: ${{ matrix.run_tests }}
- shell: bash
- run: cd rerun_py/tests && pytest
-
- - name: Run e2e test
- if: ${{ matrix.run_tests }}
- shell: bash
- run: RUST_LOG=debug scripts/run_python_e2e_test.py --no-build # rerun-sdk is already built and installed
-
- - name: Unpack the wheel
- shell: bash
- run: |
- mkdir unpack-dist
- wheel unpack pre-dist/*.whl --dest unpack-dist
-
- - name: Get the folder name
- shell: bash
- run: |
- echo "pkg_folder=$(ls unpack-dist)" >> $GITHUB_ENV
-
- - name: Download RRD
- uses: actions/download-artifact@v3
- with:
- name: rrd
- path: rrd
-
- - name: Insert the rrd
- shell: bash
- # If you change the line below you should almost definitely change the `key:` line above by giving it a new, unique name
- run: |
- cp rrd/colmap_fiat.rrd unpack-dist/${{ env.pkg_folder }}/rerun_sdk/rerun_demo/colmap_fiat.rrd
-
- - name: Repack the wheel
- shell: bash
- run: |
- mkdir dist
- wheel pack unpack-dist/${{ env.pkg_folder }} --dest dist/
-
- - name: Upload wheels
- uses: actions/upload-artifact@v3
- with:
- name: wheels
- path: dist
-
- # ---------------------------------------------------------------------------
-
- upload_rrd:
- name: Upload RRD to GCloud
- permissions:
- contents: "read"
- id-token: "write"
- needs: [wheels]
- runs-on: "ubuntu-latest"
- steps:
- - name: Download Artifact
- uses: actions/download-artifact@v3
- with:
- name: rrd
- path: rrd
-
- - id: "auth"
- uses: google-github-actions/auth@v1
- with:
- workload_identity_provider: ${{ secrets.GOOGLE_WORKLOAD_IDENTITY_PROVIDER }}
- service_account: ${{ secrets.GOOGLE_SERVICE_ACCOUNT }}
-
- - name: Add SHORT_SHA env property with commit short sha
- run: echo "SHORT_SHA=`echo ${{github.sha}} | cut -c1-7`" >> $GITHUB_ENV
-
- - name: "Upload RRD (commit)"
- uses: google-github-actions/upload-cloud-storage@v1
- with:
- path: "rrd"
- destination: "rerun-example-rrd/commit/${{env.SHORT_SHA}}"
- parent: false
-
- - name: "Upload RRD (prerelease)"
- if: "!startsWith(github.ref , 'refs/tags/v')"
- uses: google-github-actions/upload-cloud-storage@v1
- with:
- path: "rrd"
- destination: "rerun-example-rrd/prerelease"
- parent: false
-
- - name: "Upload RRD (tagged)"
- if: startsWith(github.ref, 'refs/tags/v')
- uses: google-github-actions/upload-cloud-storage@v1
- with:
- path: "rrd"
- destination: "rerun-example-rrd/version/${{github.ref_name}}"
- parent: false
-
- - name: "Upload RRD (latest release)"
- if: github.ref == 'latest'
- uses: google-github-actions/upload-cloud-storage@v1
- with:
- path: "rrd"
- destination: "rerun-example-rrd/latest"
- parent: false
-
- # See https://github.com/ncipollo/release-action
- pre-release:
- name: Pre Release
- needs: [wheels]
- if: github.ref == 'refs/heads/main'
- runs-on: "ubuntu-latest"
- steps:
- - name: Download Artifact
- uses: actions/download-artifact@v3
- with:
- name: wheels
- path: dist
-
- # First delete the old prerelease. If we don't do this, we don't get things like
- # proper source-archives and changelog info.
- # https://github.com/dev-drprasad/delete-tag-and-release
- - uses: dev-drprasad/delete-tag-and-release@v0.2.1
- with:
- tag_name: prerelease
- delete_release: true
- env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
-
- # Create the actual prerelease
- # https://github.com/ncipollo/release-action
- - name: GitHub Release
- uses: ncipollo/release-action@v1.12.0
- with:
- body: ${{ env.PRE_RELEASE_INSTRUCTIONS }}
- prerelease: true
- artifacts: dist/*
- name: "Development Build"
- tag: "prerelease"
- token: ${{ secrets.GITHUB_TOKEN }}
- generateReleaseNotes: true
- allowUpdates: true
- removeArtifacts: true
- replacesArtifacts: true
-
- # ---------------------------------------------------------------------------
-
- # This job is run on tags starting with "v", e.g., "v0.1.0"
- tagged-release:
- name: Release
- runs-on: ubuntu-latest
- if: startsWith(github.ref, 'refs/tags/v')
- needs: [wheels]
- steps:
- - name: Download Artifact
- uses: actions/download-artifact@v3
- with:
- name: wheels
- path: dist
-
- # https://github.com/ncipollo/release-action
- - name: GitHub Release
- uses: ncipollo/release-action@v1.12.0
- with:
- prerelease: true
- artifacts: dist/*
- token: ${{ secrets.GITHUB_TOKEN }}
- generateReleaseNotes: true
-
- - name: Publish to PyPI
- uses: PyO3/maturin-action@v1
- env:
- # These are both set in the GitHub project configuration
- MATURIN_REPOSITORY: ${{ vars.PYPI_REPOSITORY }}
- MATURIN_PYPI_TOKEN: ${{ secrets.MATURIN_PYPI_TOKEN }}
- with:
- command: upload
- args: --skip-existing dist/*
-
- # ---------------------------------------------------------------------------
-
- py-test-docs:
- name: Verify the docs build
- runs-on: ubuntu-latest
- steps:
- - uses: actions/checkout@v3
-
- - name: Set up Python
- uses: actions/setup-python@v4
- with:
- python-version: "3.8"
- cache: "pip"
- cache-dependency-path: "rerun_py/requirements-doc.txt"
-
- - name: Install Python dependencies
- run: |
- pip install --upgrade pip
- pip install -r rerun_py/requirements-doc.txt
-
- - name: Build via mkdocs
- run: |
- mkdocs build -f rerun_py/mkdocs.yml
-
- py-docs:
- name: Build and deploy docs
- if: ${{ github.event_name == 'push' }}
- runs-on: ubuntu-latest
- steps:
- - uses: actions/checkout@v3
- with:
- fetch-depth: 0 # Don't do a shallow clone
-
- - name: Set up Python
- uses: actions/setup-python@v4
- with:
- python-version: "3.8"
- cache: "pip"
- cache-dependency-path: "rerun_py/requirements-doc.txt"
-
- - name: Install Python dependencies
- run: |
- pip install --upgrade pip
- pip install -r rerun_py/requirements-doc.txt
-
- - name: Set up git author
- run: |
- remote_repo="https://${GITHUB_TOKEN}@github.com/${GITHUB_REPOSITORY}.git"
- git config --global user.name "${GITHUB_ACTOR}"
- git config --global user.email "${GITHUB_ACTOR}@users.noreply.github.com"
- env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
-
- # Mike will incrementally update the existing gh-pages branch
- # We then check it out, and reset it to a new orphaned branch, which we force-push to origin
- # to make sure we don't accumulate unnecessary history in gh-pages branch
- - name: Deploy via mike # https://github.com/jimporter/mike
- if: startsWith(github.ref, 'refs/tags/v')
- run: |
- git fetch
- mike deploy -F rerun_py/mkdocs.yml --rebase -b gh-pages --prefix docs/python -u ${{github.ref_name}} latest
- git checkout gh-pages
- git checkout --orphan gh-pages-orphan
- git commit -m "Update docs for ${GITHUB_SHA}"
- git push origin gh-pages-orphan:gh-pages -f
-
- # Mike will incrementally update the existing gh-pages branch
- # We then check it out, and reset it to a new orphaned branch, which we force-push to origin
- # to make sure we don't accumulate unnecessary history in gh-pages branch
- - name: Deploy tag via mike # https://github.com/jimporter/mike
- if: github.ref == 'refs/heads/main'
- run: |
- git fetch
- mike deploy -F rerun_py/mkdocs.yml --rebase -b gh-pages --prefix docs/python HEAD
- git checkout gh-pages
- git checkout --orphan gh-pages-orphan
- git commit -m "Update docs for ${GITHUB_SHA}"
- git push origin gh-pages-orphan:gh-pages -f
diff --git a/.github/workflows/reusable_bench.yml b/.github/workflows/reusable_bench.yml
new file mode 100644
index 000000000000..d155af72ce72
--- /dev/null
+++ b/.github/workflows/reusable_bench.yml
@@ -0,0 +1,164 @@
+name: Reusable Bench
+
+on:
+ workflow_call:
+ inputs:
+ CONCURRENCY:
+ required: true
+ type: string
+ SAVE_BENCHES:
+ required: false
+ type: boolean
+ default: false
+ BENCH_NAME:
+ required: false
+ type: string
+ default: ''
+ COMPARE_TO:
+ required: false
+ type: string
+ default: ''
+ FAIL_ON_ALERT:
+ required: false
+ type: boolean
+ default: false
+
+concurrency:
+ group: ${{ inputs.CONCURRENCY }}-bench
+ cancel-in-progress: true
+
+env:
+ PYTHON_VERSION: "3.8"
+ # web_sys_unstable_apis is required to enable the web_sys clipboard API which egui_web uses
+ # https://rustwasm.github.io/wasm-bindgen/api/web_sys/struct.Clipboard.html
+ # https://rustwasm.github.io/docs/wasm-bindgen/web-sys/unstable-apis.html
+ RUSTFLAGS: --cfg=web_sys_unstable_apis --deny warnings
+
+ # See https://github.com/ericseppanen/cargo-cranky/issues/8
+ RUSTDOCFLAGS: --deny warnings --deny rustdoc::missing_crate_level_docs
+
+ # See: https://github.com/marketplace/actions/sccache-action
+ SCCACHE_GHA_ENABLED: "true"
+ RUSTC_WRAPPER: "sccache"
+
+jobs:
+
+# ---------------------------------------------------------------------------
+
+ rs-benchmarks:
+ name: Rust Criterion benchmarks
+
+ permissions:
+ # contents permission to update benchmark contents in gh-pages branch
+ contents: write
+ id-token: "write"
+ # deployments permission to deploy GitHub pages website
+ deployments: write
+
+ runs-on: ubuntu-latest-16-cores
+
+ container:
+ image: rerunio/ci_docker:0.6
+
+ steps:
+ - uses: actions/checkout@v3
+
+ - name: Set up cargo cache
+ uses: Swatinem/rust-cache@v2
+ with:
+ shared-key: "build-linux"
+ env-vars: CARGO CC CFLAGS CXX CMAKE RUST CACHE_KEY
+ # Don't update the cache -- it will be updated by the lint job
+ # TODO(jleibs): this job will likely run before rust.yml updates
+ # the cache. Better cross-job sequencing would be nice here
+ save-if: false
+
+ # Sccache will cache everything else
+ # See: https://github.com/marketplace/actions/sccache-action
+ - name: Run sccache-cache
+ uses: mozilla-actions/sccache-action@v0.0.3
+
+ - name: Add SHORT_SHA env property with commit short sha
+ run: echo "SHORT_SHA=`echo ${{github.sha}} | cut -c1-7`" >> $GITHUB_ENV
+
+ - name: Run benchmark
+ # Use bash shell so we get pipefail behavior with tee
+ shell: bash
+ run: |
+ cargo bench \
+ --all-features \
+ -p re_arrow_store \
+ -p re_data_store \
+ -p re_log_encoding \
+ -p re_query \
+ -p re_tuid \
+ -- --output-format=bencher | tee /tmp/${{ env.SHORT_SHA }}
+
+ - id: "auth"
+ uses: google-github-actions/auth@v1
+ with:
+ workload_identity_provider: ${{ secrets.GOOGLE_WORKLOAD_IDENTITY_PROVIDER }}
+ service_account: ${{ secrets.GOOGLE_SERVICE_ACCOUNT }}
+
+ - name: 'Set up Cloud SDK'
+ uses: 'google-github-actions/setup-gcloud@v1'
+ with:
+ version: '>= 363.0.0'
+
+ # TODO(jleibs) make this whole thing a python script
+ - name: "Upload bench to GCS based on SHA"
+ uses: google-github-actions/upload-cloud-storage@v1
+ with:
+ path: /tmp/${{ env.SHORT_SHA }}
+ destination: "rerun-builds/benches/"
+
+ - name: Download comparison bench from GCS
+ if: ${{ inputs.COMPARE_TO != '' }}
+ run: |
+ mkdir /tmp/compare/
+ gsutil cp gs://rerun-builds/benches/${{inputs.COMPARE_TO}} /tmp/compare/${{ inputs.COMPARE_TO }}
+
+ - name: Compare results with benchcmp
+ if: ${{ inputs.COMPARE_TO != '' }}
+ run: cargo benchcmp /tmp/compare/${{ inputs.COMPARE_TO }} /tmp/${{ env.SHORT_SHA }} > /tmp/bench_results.txt
+
+ - name: "Upload bench-results to GCS"
+ if: ${{ inputs.COMPARE_TO != '' }}
+ uses: google-github-actions/upload-cloud-storage@v1
+ with:
+ path: /tmp/bench_results.txt
+ destination: "rerun-builds/commit/${{env.SHORT_SHA}}/"
+
+ - name: Store benchmark result
+ # https://github.com/benchmark-action/github-action-benchmark
+ uses: benchmark-action/github-action-benchmark@v1
+ with:
+ name: Rust Benchmark
+ tool: "cargo"
+ output-file-path: /tmp/${{ env.SHORT_SHA }}
+ github-token: ${{ secrets.GITHUB_TOKEN }}
+
+ # Show alert with commit comment on detecting possible performance regression
+ comment-on-alert: true
+ alert-threshold: "125%"
+ fail-on-alert: ${{ inputs.FAIL_ON_ALERT }}
+ comment-always: false # Generates too much GitHub notification spam
+
+ # Save, results and push to GitHub only on main
+ save-data-file: ${{ inputs.SAVE_BENCHES }}
+ auto-push: ${{ inputs.SAVE_BENCHES }}
+ gh-pages-branch: gh-pages
+ benchmark-data-dir-path: dev/bench
+ max-items-in-chart: 30
+
+ - name: "Copy bench to named file"
+ if: ${{ inputs.BENCH_NAME != '' }}
+ run: cp /tmp/${{ env.SHORT_SHA }} /tmp/${{ inputs.BENCH_NAME }}
+
+ # Don't upload the new named bench until the end in case the names are the same
+ - name: "Upload named bench to GCS"
+ if: ${{ inputs.BENCH_NAME != '' }}
+ uses: google-github-actions/upload-cloud-storage@v1
+ with:
+ path: /tmp/${{ inputs.BENCH_NAME }}
+ destination: "rerun-builds/benches/"
diff --git a/.github/workflows/reusable_build_and_test_wheels.yml b/.github/workflows/reusable_build_and_test_wheels.yml
new file mode 100644
index 000000000000..753eac83b394
--- /dev/null
+++ b/.github/workflows/reusable_build_and_test_wheels.yml
@@ -0,0 +1,300 @@
+name: Reusable Build and Test Wheels
+
+on:
+ workflow_call:
+ inputs:
+ CONCURRENCY:
+ required: true
+ type: string
+ MATURIN_FEATURE_FLAGS:
+ required: false
+ type: string
+ default: '--no-default-features --features pypi'
+ PLATFORM:
+ required: true
+ type: string
+ RELEASE_VERSION:
+ required: false
+ type: string
+ default: 'prerelease'
+ RRD_ARTIFACT_NAME:
+ required: false
+ type: string
+ default: ''
+ SAVE_CACHE:
+ required: false
+ type: boolean
+ default: false
+ WHEEL_ARTIFACT_NAME:
+ required: false
+ type: string
+ default: ''
+
+concurrency:
+ group: ${{ inputs.CONCURRENCY }}-build-wheels
+ cancel-in-progress: true
+
+env:
+ PYTHON_VERSION: "3.8"
+ # web_sys_unstable_apis is required to enable the web_sys clipboard API which egui_web uses
+ # https://rustwasm.github.io/wasm-bindgen/api/web_sys/struct.Clipboard.html
+ # https://rustwasm.github.io/docs/wasm-bindgen/web-sys/unstable-apis.html
+
+ # TODO(jleibs) --deny warnings causes installation of wasm-bindgen to fail on mac
+ # RUSTFLAGS: --cfg=web_sys_unstable_apis --deny warnings
+ RUSTFLAGS: --cfg=web_sys_unstable_apis
+
+ # See https://github.com/ericseppanen/cargo-cranky/issues/8
+ RUSTDOCFLAGS: --deny warnings --deny rustdoc::missing_crate_level_docs
+
+ # See: https://github.com/marketplace/actions/sccache-action
+ SCCACHE_GHA_ENABLED: "true"
+ RUSTC_WRAPPER: "sccache"
+
+jobs:
+
+# ---------------------------------------------------------------------------
+
+ set-config:
+ name: Set Config
+ runs-on: ubuntu-latest
+ outputs:
+ RUNNER: ${{ steps.set-config.outputs.runner }}
+ TARGET: ${{ steps.set-config.outputs.target }}
+ RUN_TESTS: ${{ steps.set-config.outputs.run_tests }}
+ CONTAINER: ${{ steps.set-config.outputs.container }}
+ steps:
+ - name: Set runner and target based on platform
+ id: set-config
+ run: |
+ case "${{ inputs.platform }}" in
+ linux)
+ runner="ubuntu-latest"
+ target="x86_64-unknown-linux-gnu"
+ run_tests="true"
+ container="{'image': 'rerunio/ci_docker:0.6'}"
+ ;;
+ windows)
+ runner="windows-latest"
+ target="x86_64-pc-windows-msvc"
+ run_tests="true"
+ container="null"
+ ;;
+ macos-arm)
+ runner="macos-latest"
+ target="aarch64-apple-darwin"
+ run_tests="false"
+ container="null"
+ ;;
+ macos-intel)
+ runner="macos-latest"
+ target="x86_64-apple-darwin"
+ run_tests="false"
+ container="null"
+ ;;
+ *) echo "Invalid platform" && exit 1 ;;
+ esac
+ echo "runner=$runner" >> "$GITHUB_OUTPUT"
+ echo "target=$target" >> "$GITHUB_OUTPUT"
+ echo "run_tests=$run_tests" >> "$GITHUB_OUTPUT"
+ echo "container=$container" >> "$GITHUB_OUTPUT"
+
+# ---------------------------------------------------------------------------
+
+ build-wheels:
+ name: Build Wheels
+
+ needs: [set-config]
+
+ runs-on: ${{ needs.set-config.outputs.RUNNER }}
+ container: ${{ fromJson(needs.set-config.outputs.CONTAINER) }}
+
+ steps:
+ - name: Show context
+ run: |
+ echo "GITHUB_CONTEXT": $GITHUB_CONTEXT
+ echo "JOB_CONTEXT": $JOB_CONTEXT
+ echo "INPUTS_CONTEXT": $INPUTS_CONTEXT
+ echo "ENV_CONTEXT": $ENV_CONTEXT
+ env:
+ ENV_CONTEXT: ${{ toJson(env) }}
+ GITHUB_CONTEXT: ${{ toJson(github) }}
+ JOB_CONTEXT: ${{ toJson(job) }}
+ INPUTS_CONTEXT: ${{ toJson(inputs) }}
+
+ - uses: actions/checkout@v3
+
+ # Rust-cache will cache our dependencies, which is a large chunk of the build
+ # See: https://github.com/Swatinem/rust-cache
+ - name: Set up cargo cache
+ uses: Swatinem/rust-cache@v2
+ with:
+ shared-key: "build-${{ inputs.PLATFORM }}"
+ env-vars: CARGO CC CFLAGS CXX CMAKE RUST CACHE_KEY
+ # Don't update the cache -- it will be updated by the lint job
+ # TODO(jleibs): this job will likely run before rust.yml updates
+ # the cache. Better cross-job sequencing would be nice here
+ save-if: ${{ inputs.SAVE_CACHE }}
+
+ # Sccache will cache everything else
+ # See: https://github.com/marketplace/actions/sccache-action
+ - name: Run sccache-cache
+ uses: mozilla-actions/sccache-action@v0.0.3
+
+ # The pip-cache setup logic doesn't work in the ubuntu docker container
+ # That's probably fine since we bake these deps into the container already
+ - name: Setup python
+ if: ${{ inputs.PLATFORM != 'linux' }}
+ uses: actions/setup-python@v4
+ with:
+ python-version: ${{ env.PYTHON_VERSION }}
+ cache: "pip"
+ cache-dependency-path: "rerun_py/requirements-build.txt"
+
+ # These should already be in the docker container, but run for good measure. A no-op install
+ # should be fast, and this way things don't break if we add new packages without rebuilding
+ # docker
+ - run: pip install -r rerun_py/requirements-build.txt
+
+ # We have a nice script for that: ./scripts/setup_web.sh
+ # Unfortunately, we can't run that on Windows, because Windows doesn't come with
+ # a package manager like grown-up OSes do (at least not the CI version of Windows).
+ # Also we can't run it on linux because the 20.04 Docker container will install
+ # an old version of binaryen/wasm-opt that barfs on the `--fast-math` flag
+ # So we only run the script on macos, and then on Windows we do the parts of the script manually.
+ # On ubuntu, the correct packages are pre-installed in our docker container.
+
+ - name: Install prerequisites for building the web-viewer Wasm (non-Windows)
+ if: (inputs.PLATFORM == 'macos-intel') || (inputs.PLATFORM == 'macos-arm')
+ shell: bash
+ run: ./scripts/setup_web.sh
+
+ # The first steps of setup_web.sh, for Windows:
+ - name: Install wasm32 and wasm-bindgen-cli for building the web-viewer Wasm on windows
+ if: inputs.platform == 'windows'
+ shell: bash
+ run: rustup target add wasm32-unknown-unknown && cargo install wasm-bindgen-cli --version 0.2.84
+
+ # The last step of setup_web.sh, for Windows.
+ # Since 'winget' is not available within the GitHub runner, we download the package directly:
+ # See: https://github.com/marketplace/actions/engineerd-configurator
+ - name: Install binaryen for building the web-viewer Wasm on windows
+ if: inputs.platform == 'windows'
+ uses: engineerd/configurator@v0.0.9
+ with:
+ name: "wasm-opt.exe"
+ url: "https://github.com/WebAssembly/binaryen/releases/download/version_111/binaryen-version_111-x86_64-windows.tar.gz"
+ pathInArchive: "binaryen-version_111/bin/wasm-opt.exe"
+
+ - name: Patch Cargo.toml for pre-release
+ if: ${{ inputs.RELEASE_VERSION == 'prerelease' }}
+ # After patching the pre-release version, run cargo update.
+ # This updates the cargo.lock file with the new version numbers and keeps the wheel build from failing
+ run: |
+ python3 scripts/version_util.py --patch_prerelease
+ cargo update -w
+
+ - name: Store the expected version
+ # Find the current cargo version and store it in the output: `expected_version`
+ shell: bash
+ id: expected_version
+ run: |
+ echo "EXPECTED_VERSION=$(python3 scripts/version_util.py --bare_cargo_version)" >> "$GITHUB_OUTPUT"
+
+ - name: Check the expected version
+ if: ${{ inputs.RELEASE_VERSION != 'prerelease' }}
+ run: |
+ if [ "${{steps.expected_version.outputs.EXPECTED_VERSION}}" != "${{inputs.RELEASE_VERSION}}" ]; then
+ echo "Error: EXPECTED_VERSION (${{steps.expected_version.outputs.EXPECTED_VERSION}}) does not match RELEASE_VERSION (${{inputs.RELEASE_VERSION}})"
+ exit 1
+ fi
+
+ - name: Build Wheel
+ uses: PyO3/maturin-action@v1
+ with:
+ maturin-version: "0.14.10"
+ manylinux: manylinux_2_31
+ container: off
+ command: build
+ sccache: 'true'
+ args: |
+ --manifest-path rerun_py/Cargo.toml
+ --release
+ --target ${{ needs.set-config.outputs.TARGET }}
+ ${{ inputs.MATURIN_FEATURE_FLAGS }}
+ --out dist
+
+ - name: Save wheel artifact
+ if: ${{ inputs.WHEEL_ARTIFACT_NAME != '' }}
+ uses: actions/upload-artifact@v3
+ with:
+ name: ${{inputs.WHEEL_ARTIFACT_NAME}}
+ path: dist
+
+ # ---------------------------------------------------------------------------
+ # Test the wheel
+
+ - name: Install wheel dependencies
+ if: needs.set-config.outputs.RUN_TESTS == 'true'
+ # First we install the dependencies manually so we can use `--no-index` when installing the wheel.
+ # This needs to be a separate step for some reason or the following step fails
+ # TODO(jleibs): pull these deps from pyproject.toml
+ # TODO(jleibs): understand why deps can't be installed in the same step as the wheel
+ shell: bash
+ run: |
+ pip install deprecated numpy>=1.23 pyarrow==10.0.1 pytest==7.1.2
+
+ - name: Install built wheel
+ if: needs.set-config.outputs.RUN_TESTS == 'true'
+ # Now install the wheel using a specific version and --no-index to guarantee we get the version from
+ # the pre-dist folder. Note we don't use --force-reinstall here because --no-index means it wouldn't
+ # find the dependencies to reinstall them.
+ shell: bash
+ run: |
+ pip uninstall rerun-sdk
+ pip install rerun-sdk==${{ steps.expected_version.outputs.EXPECTED_VERSION }} --no-index --find-links dist
+
+ - name: Verify built wheel version
+ if: needs.set-config.outputs.RUN_TESTS == 'true'
+ shell: bash
+ run: |
+ python3 -m rerun --version
+ which rerun
+ rerun --version
+
+ - name: Run unit tests
+ if: needs.set-config.outputs.RUN_TESTS == 'true'
+ shell: bash
+ run: cd rerun_py/tests && pytest
+
+ - name: Run e2e test
+ if: needs.set-config.outputs.RUN_TESTS == 'true'
+ shell: bash
+ run: RUST_LOG=debug scripts/run_python_e2e_test.py --no-build # rerun-sdk is already built and installed
+
+ - name: Cache RRD dataset
+ if: needs.set-config.outputs.RUN_TESTS == 'true'
+ id: dataset
+ uses: actions/cache@v3
+ with:
+ path: examples/python/colmap/dataset/
+ # TODO(jleibs): Derive this key from the invocation below
+ key: colmap-dataset-colmap-fiat-v0
+
+ - name: Generate Embedded RRD file
+ if: needs.set-config.outputs.RUN_TESTS == 'true'
+ shell: bash
+ # If you change the line below you should almost definitely change the `key:` line above by giving it a new, unique name
+ run: |
+ mkdir rrd
+ pip install -r examples/python/colmap/requirements.txt
+ python3 examples/python/colmap/main.py --dataset colmap_fiat --resize 800x600 --save rrd/colmap_fiat.rrd
+
+ # All platforms are currently creating the same rrd file, upload one of them
+ - name: Save RRD artifact
+ if: ${{ (needs.set-config.outputs.RUN_TESTS == 'true') && (inputs.RRD_ARTIFACT_NAME != '') }}
+ uses: actions/upload-artifact@v3
+ with:
+ name: ${{ inputs.RRD_ARTIFACT_NAME }}
+ path: rrd
+
diff --git a/.github/workflows/reusable_build_web.yml b/.github/workflows/reusable_build_web.yml
new file mode 100644
index 000000000000..21b085356689
--- /dev/null
+++ b/.github/workflows/reusable_build_web.yml
@@ -0,0 +1,94 @@
+name: Reusable Build Web
+
+on:
+ workflow_call:
+ inputs:
+ CONCURRENCY:
+ required: true
+ type: string
+ RELEASE_VERSION:
+ required: false
+ type: string
+ default: 'prerelease'
+ EXTRA_FLAGS:
+ required: false
+ type: string
+ default: ''
+
+concurrency:
+ group: ${{ inputs.CONCURRENCY }}-build-web
+ cancel-in-progress: true
+
+env:
+ # web_sys_unstable_apis is required to enable the web_sys clipboard API which egui_web uses
+ # https://rustwasm.github.io/wasm-bindgen/api/web_sys/struct.Clipboard.html
+ # https://rustwasm.github.io/docs/wasm-bindgen/web-sys/unstable-apis.html
+ RUSTFLAGS: --cfg=web_sys_unstable_apis --deny warnings
+
+ # See https://github.com/ericseppanen/cargo-cranky/issues/8
+ RUSTDOCFLAGS: --deny warnings --deny rustdoc::missing_crate_level_docs
+
+jobs:
+
+ rs-build-web-viewer:
+ name: Build Web (wasm32 + wasm-bindgen)
+ permissions:
+ contents: "read"
+ id-token: "write"
+
+ runs-on: ubuntu-latest-16-cores
+
+ container:
+ image: rerunio/ci_docker:0.6
+
+ steps:
+ - uses: actions/checkout@v3
+
+ - uses: actions-rs/toolchain@v1
+ with:
+ profile: minimal
+ toolchain: 1.67.0
+ target: wasm32-unknown-unknown
+ override: true
+
+ - name: Set up cargo cache
+ uses: Swatinem/rust-cache@v2
+ with:
+ env-vars: CARGO CC CFLAGS CXX CMAKE RUST CACHE_KEY
+ # See: https://github.com/rerun-io/rerun/pull/497
+ save-if: false
+
+ - name: Patch Cargo.toml for pre-release
+ if: ${{ inputs.RELEASE_VERSION == 'prerelease' }}
+ # After patching the pre-release version, run cargo update.
+ # This updates the cargo.lock file with the new version numbers and keeps the wheel build from failing
+ run: |
+ python3 scripts/version_util.py --patch_prerelease
+ cargo update -w
+
+ - name: Store the expected version
+ # Find the current cargo version and store it in the output: `expected_version`
+ shell: bash
+ id: expected_version
+ run: |
+ echo "EXPECTED_VERSION=$(python3 scripts/version_util.py --bare_cargo_version)" >> "$GITHUB_OUTPUT"
+
+ - name: Check the expected version
+ if: ${{ inputs.RELEASE_VERSION != 'prerelease' }}
+ run: |
+ if [ "${{steps.expected_version.outputs.EXPECTED_VERSION}}" != "${{inputs.RELEASE_VERSION}}" ]; then
+ echo "Error: EXPECTED_VERSION (${{steps.expected_version.outputs.EXPECTED_VERSION}}) does not match RELEASE_VERSION (${{inputs.RELEASE_VERSION}})"
+ exit 1
+ fi
+
+ - name: Build web-viewer (release)
+ uses: actions-rs/cargo@v1
+ with:
+ command: run
+ args: --locked -p re_build_web_viewer -- --release ${{ inputs.EXTRA_FLAGS }}
+
+ - name: Upload web assets
+ uses: actions/upload-artifact@v3
+ with:
+ name: web_viewer
+ path: web_viewer
diff --git a/.github/workflows/reusable_checks.yml b/.github/workflows/reusable_checks.yml
new file mode 100644
index 000000000000..5377077e2843
--- /dev/null
+++ b/.github/workflows/reusable_checks.yml
@@ -0,0 +1,328 @@
+name: 'Checks: Lints, Tests, Docs'
+
+on:
+ workflow_call:
+ inputs:
+ CONCURRENCY:
+ required: true
+ type: string
+ SAVE_CACHE:
+ required: false
+ type: boolean
+ default: false
+ SAVE_PY_DOCS:
+ required: false
+ type: boolean
+ default: false
+ SAVE_PY_DOCS_AS:
+ required: false
+ type: string
+ default: ""
+ SAVE_RUST_DOCS:
+ required: false
+ type: boolean
+ default: false
+
+concurrency:
+ group: ${{ inputs.CONCURRENCY }}-checks
+ cancel-in-progress: true
+
+env:
+ PYTHON_VERSION: "3.8"
+ # web_sys_unstable_apis is required to enable the web_sys clipboard API which egui_web uses
+ # https://rustwasm.github.io/wasm-bindgen/api/web_sys/struct.Clipboard.html
+ # https://rustwasm.github.io/docs/wasm-bindgen/web-sys/unstable-apis.html
+ RUSTFLAGS: --cfg=web_sys_unstable_apis --deny warnings
+
+ # See https://github.com/ericseppanen/cargo-cranky/issues/8
+ RUSTDOCFLAGS: --deny warnings --deny rustdoc::missing_crate_level_docs
+
+ # See: https://github.com/marketplace/actions/sccache-action
+ SCCACHE_GHA_ENABLED: "true"
+ RUSTC_WRAPPER: "sccache"
+
+jobs:
+
+# ---------------------------------------------------------------------------
+
+ py-lints:
+ name: Python lints (black, mypy, flake8)
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v3
+ - uses: extractions/setup-just@v1
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ with:
+ just-version: 1.5
+
+ - name: Set up Python
+ uses: actions/setup-python@v4
+ with:
+ python-version: ${{ env.PYTHON_VERSION }}
+ cache: "pip"
+ cache-dependency-path: "rerun_py/requirements-lint.txt"
+
+ - name: Install Python dependencies
+ run: |
+ pip install --upgrade pip
+ pip install -r rerun_py/requirements-lint.txt
+
+ - name: Lint Python
+ run: |
+ just py-lint
+
+ - name: Check requirements
+ run: |
+ just py-requirements
+
+# ---------------------------------------------------------------------------
+
+ py-test-docs:
+ name: Test Python Docs
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v3
+
+ - name: Set up Python
+ uses: actions/setup-python@v4
+ with:
+ python-version: "3.8"
+ cache: "pip"
+ cache-dependency-path: "rerun_py/requirements-doc.txt"
+
+ - name: Install Python dependencies
+ run: |
+ pip install --upgrade pip
+ pip install -r rerun_py/requirements-doc.txt
+
+ - name: Build via mkdocs
+ run: |
+ mkdocs build -f rerun_py/mkdocs.yml
+
+# ---------------------------------------------------------------------------
+
+ rs-lints:
+ name: Rust lints (fmt, check, cranky, tests, doc)
+ runs-on: ubuntu-latest-16-cores
+ container:
+ image: rerunio/ci_docker:0.6
+ steps:
+ - name: Show context
+ run: |
+ echo "GITHUB_CONTEXT": $GITHUB_CONTEXT
+ echo "JOB_CONTEXT": $JOB_CONTEXT
+ echo "INPUTS_CONTEXT": $INPUTS_CONTEXT
+ echo "ENV_CONTEXT": $ENV_CONTEXT
+ env:
+ ENV_CONTEXT: ${{ toJson(env) }}
+ GITHUB_CONTEXT: ${{ toJson(github) }}
+ JOB_CONTEXT: ${{ toJson(job) }}
+ INPUTS_CONTEXT: ${{ toJson(inputs) }}
+
+ - uses: actions/checkout@v3
+
+ # Rust-cache will cache our dependencies, which is a large chunk of the build
+ # See: https://github.com/Swatinem/rust-cache
+ - name: Set up cargo cache
+ uses: Swatinem/rust-cache@v2
+ with:
+ shared-key: "build-linux"
+ env-vars: CARGO CC CFLAGS CXX CMAKE RUST CACHE_KEY
+ # Don't update the cache -- it will be updated by the lint job
+ # TODO(jleibs): this job will likely run before rust.yml updates
+ # the cache. Better cross-job sequencing would be nice here
+ save-if: ${{ inputs.SAVE_CACHE }}
+
+ # Sccache will cache everything else
+ # See: https://github.com/marketplace/actions/sccache-action
+ - name: Run sccache-cache
+ uses: mozilla-actions/sccache-action@v0.0.3
+
+
+ # First do our check with --locked to make sure `Cargo.lock` is up to date
+ - name: Check all features
+ uses: actions-rs/cargo@v1
+ with:
+ command: check
+ args: --locked --all-features
+
+ - name: Rustfmt
+ uses: actions-rs/cargo@v1
+ with:
+ command: fmt
+ args: --all -- --check
+
+ - name: Cranky
+ uses: actions-rs/cargo@v1
+ with:
+ command: cranky
+ args: --all-targets --all-features -- --deny warnings
+
+ # Check a few important permutations of the feature flags for our `rerun` library:
+ - name: Check rerun with `--no-default-features``
+ uses: actions-rs/cargo@v1
+ with:
+ command: cranky
+ args: --locked -p rerun --no-default-features
+
+ - name: Check rerun with `--features sdk`
+ uses: actions-rs/cargo@v1
+ with:
+ command: cranky
+ args: --locked -p rerun --no-default-features --features sdk
+
+ - name: Test doc-tests
+ uses: actions-rs/cargo@v1
+ with:
+ command: test
+ args: --doc --all-features
+
+ - name: cargo doc
+ uses: actions-rs/cargo@v1
+ with:
+ command: doc
+ args: --no-deps --all-features
+
+ - name: cargo doc --document-private-items
+ uses: actions-rs/cargo@v1
+ with:
+ command: doc
+ args: --document-private-items --no-deps --all-features
+
+ - name: Test
+ uses: actions-rs/cargo@v1
+ with:
+ command: test
+ args: --all-targets --all-features
+
+# ---------------------------------------------------------------------------
+
+ rs-check-wasm:
+ name: Check Rust web build (wasm32 + wasm-bindgen)
+ runs-on: ubuntu-latest-16-cores
+ container:
+ image: rerunio/ci_docker:0.6
+ steps:
+ - uses: actions/checkout@v3
+
+ - uses: actions-rs/toolchain@v1
+ with:
+ profile: default
+ toolchain: 1.67.1
+ target: wasm32-unknown-unknown
+ override: true
+
+ - name: Set up cargo cache
+ uses: Swatinem/rust-cache@v2
+ with:
+ shared-key: "build-wasm"
+ env-vars: CARGO CC CFLAGS CXX CMAKE RUST CACHE_KEY
+ # See: https://github.com/rerun-io/rerun/pull/497
+ save-if: ${{ inputs.SAVE_CACHE }}
+
+ # See: https://github.com/marketplace/actions/sccache-action
+ - name: Run sccache-cache
+ uses: mozilla-actions/sccache-action@v0.0.3
+
+ - name: clippy check re_viewer wasm32
+ run: ./scripts/clippy_wasm.sh
+
+ - name: Check re_renderer examples wasm32
+ uses: actions-rs/cargo@v1
+ with:
+ command: check
+ args: --locked --target wasm32-unknown-unknown --target-dir target_wasm -p re_renderer --examples
+
+ - name: Build web-viewer (debug)
+ uses: actions-rs/cargo@v1
+ with:
+ command: run
+ args: --locked -p re_build_web_viewer -- --debug
+
+# ---------------------------------------------------------------------------
+
+ toml-lints:
+ name: Lint TOML files
+ runs-on: ubuntu-latest
+ steps:
+
+ - uses: actions/checkout@v3
+
+ - uses: actions-rs/toolchain@v1
+ with:
+ profile: minimal
+ toolchain: 1.67.1
+ override: true
+
+ - name: Set up cargo cache
+ uses: Swatinem/rust-cache@v2
+ with:
+ # See: https://github.com/rerun-io/rerun/pull/497
+ env-vars: CARGO CC CFLAGS CXX CMAKE RUST CACHE_KEY
+ # Don't update the cache -- it will be updated by the lint job
+ # TODO(jleibs): this job will likely run before rust.yml updates
+ # the cache. Better cross-job sequencing would be nice here
+ save-if: false
+
+ - name: Install taplo-cli
+ uses: baptiste0928/cargo-install@v1
+ with:
+ crate: taplo-cli
+
+ - name: Taplo check
+ run: |
+ taplo fmt --check
+
+# ---------------------------------------------------------------------------
+
+ misc-rerun-lints:
+ name: Rerun lints
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v3
+
+ - name: Set up Python
+ uses: actions/setup-python@v4
+ with:
+ python-version: "3.8"
+
+ - name: Rerun lints
+ run: |
+ ./scripts/lint.py
+
+ - name: Check for too large files
+ run: |
+ ./scripts/check_large_files.sh
+
+# ---------------------------------------------------------------------------
+
+ spell-check:
+ name: Spell Check
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout Actions Repository
+ uses: actions/checkout@v3
+
+ - name: Check spelling of entire workspace
+ uses: crate-ci/typos@master
+
+# ---------------------------------------------------------------------------
+
+ rs-cargo-deny:
+ name: Cargo Deny ${{ matrix.platform }}
+ runs-on: ubuntu-latest
+ container:
+ image: rerunio/ci_docker:0.6
+
+ steps:
+ - uses: actions/checkout@v3
+
+ # See: https://github.com/marketplace/actions/sccache-action
+ - name: Run sccache-cache
+ uses: mozilla-actions/sccache-action@v0.0.3
+
+ - name: Cargo Deny
+ shell: bash
+ id: expected_version
+ run: ./scripts/cargo_deny.sh
diff --git a/.github/workflows/reusable_deploy_docs.yml b/.github/workflows/reusable_deploy_docs.yml
new file mode 100644
index 000000000000..7f65d55ed540
--- /dev/null
+++ b/.github/workflows/reusable_deploy_docs.yml
@@ -0,0 +1,158 @@
+name: 'Reusable Deploy Docs'
+
+on:
+ workflow_call:
+ inputs:
+ CONCURRENCY:
+ required: true
+ type: string
+ PY_DOCS_VERSION_NAME:
+ required: true
+ type: string
+ UPDATE_LATEST:
+ required: false
+ type: boolean
+ default: false
+
+concurrency:
+ group: ${{ inputs.CONCURRENCY }}-deploy-docs
+ cancel-in-progress: true
+
+env:
+ PYTHON_VERSION: "3.8"
+ # web_sys_unstable_apis is required to enable the web_sys clipboard API which egui_web uses
+ # https://rustwasm.github.io/wasm-bindgen/api/web_sys/struct.Clipboard.html
+ # https://rustwasm.github.io/docs/wasm-bindgen/web-sys/unstable-apis.html
+ RUSTFLAGS: --cfg=web_sys_unstable_apis --deny warnings
+
+ # See https://github.com/ericseppanen/cargo-cranky/issues/8
+ RUSTDOCFLAGS: --deny warnings --deny rustdoc::missing_crate_level_docs
+
+ # See: https://github.com/marketplace/actions/sccache-action
+ SCCACHE_GHA_ENABLED: "true"
+ RUSTC_WRAPPER: "sccache"
+
+jobs:
+
+# ---------------------------------------------------------------------------
+
+ py-deploy-docs:
+ name: Python
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v3
+ with:
+ fetch-depth: 0 # Don't do a shallow clone
+
+ - name: Set up Python
+ uses: actions/setup-python@v4
+ with:
+ python-version: "3.8"
+ cache: "pip"
+ cache-dependency-path: "rerun_py/requirements-doc.txt"
+
+ - name: Install Python dependencies
+ run: |
+ pip install --upgrade pip
+ pip install -r rerun_py/requirements-doc.txt
+
+ - name: Set up git author
+ run: |
+ remote_repo="https://${GITHUB_TOKEN}@github.com/${GITHUB_REPOSITORY}.git"
+ git config --global user.name "${GITHUB_ACTOR}"
+ git config --global user.email "${GITHUB_ACTOR}@users.noreply.github.com"
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+
+ # Mike will incrementally update the existing gh-pages branch
+ # We then check it out, and reset it to a new orphaned branch, which we force-push to origin
+ # to make sure we don't accumulate unnecessary history in gh-pages branch
+ - name: Deploy via mike # https://github.com/jimporter/mike
+ if: ${{ inputs.UPDATE_LATEST }}
+ run: |
+ git fetch
+ mike deploy -F rerun_py/mkdocs.yml --rebase -b gh-pages --prefix docs/python -u ${{inputs.PY_DOCS_VERSION_NAME}} latest
+ git checkout gh-pages
+ git checkout --orphan gh-pages-orphan
+ git commit -m "Update docs for ${GITHUB_SHA}"
+ git push origin gh-pages-orphan:gh-pages -f
+
+ # Mike will incrementally update the existing gh-pages branch
+ # We then check it out, and reset it to a new orphaned branch, which we force-push to origin
+ # to make sure we don't accumulate unnecessary history in gh-pages branch
+ - name: Deploy tag via mike # https://github.com/jimporter/mike
+ if: ${{ ! inputs.UPDATE_LATEST }}
+ run: |
+ git fetch
+ mike deploy -F rerun_py/mkdocs.yml --rebase -b gh-pages --prefix docs/python ${{inputs.PY_DOCS_VERSION_NAME}}
+ git checkout gh-pages
+ git checkout --orphan gh-pages-orphan
+ git commit -m "Update docs for ${GITHUB_SHA}"
+ git push origin gh-pages-orphan:gh-pages -f
+
+
+# ---------------------------------------------------------------------------
+
+ rs-deploy-docs:
+ name: Rust
+ runs-on: ubuntu-latest-16-cores
+ container:
+ image: rerunio/ci_docker:0.6
+ steps:
+ - name: Show context
+ run: |
+ echo "GITHUB_CONTEXT": $GITHUB_CONTEXT
+ echo "JOB_CONTEXT": $JOB_CONTEXT
+ echo "INPUTS_CONTEXT": $INPUTS_CONTEXT
+ echo "ENV_CONTEXT": $ENV_CONTEXT
+ env:
+ ENV_CONTEXT: ${{ toJson(env) }}
+ GITHUB_CONTEXT: ${{ toJson(github) }}
+ JOB_CONTEXT: ${{ toJson(job) }}
+ INPUTS_CONTEXT: ${{ toJson(inputs) }}
+
+ - uses: actions/checkout@v3
+ with:
+ fetch-depth: 0 # Don't do a shallow clone since we need to push gh-pages
+
+ # Rust-cache will cache our dependencies, which is a large chunk of the build
+ # See: https://github.com/Swatinem/rust-cache
+ - name: Set up cargo cache
+ uses: Swatinem/rust-cache@v2
+ with:
+ shared-key: "build-linux"
+ env-vars: CARGO CC CFLAGS CXX CMAKE RUST CACHE_KEY
+ save-if: false
+
+ # Sccache will cache everything else
+ # See: https://github.com/marketplace/actions/sccache-action
+ - name: Run sccache-cache
+ uses: mozilla-actions/sccache-action@v0.0.3
+
+ - name: cargo doc --document-private-items
+ uses: actions-rs/cargo@v1
+ with:
+ command: doc
+ args: --document-private-items --no-deps --all-features
+
+ - name: Set up git author
+ run: |
+ remote_repo="https://${GITHUB_TOKEN}@github.com/${GITHUB_REPOSITORY}.git"
+ git config --global user.name "${GITHUB_ACTOR}"
+ git config --global user.email "${GITHUB_ACTOR}@users.noreply.github.com"
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+
+ - name: Set up ghp-import
+ run: pip install ghp-import
+
+ - name: Patch in a redirect page
+ run: echo "" > target/doc/index.html
+ env:
+ REDIRECT_CRATE: rerun
+
+ # See: https://github.com/c-w/ghp-import
+ - name: Deploy the docs
+ run: |
+ git fetch
+ python3 -m ghp_import -n -p -x docs/rust/head target/doc/ -m "Update the rust docs"
diff --git a/.github/workflows/reusable_pip_index.yml b/.github/workflows/reusable_pip_index.yml
new file mode 100644
index 000000000000..6e3203a011a0
--- /dev/null
+++ b/.github/workflows/reusable_pip_index.yml
@@ -0,0 +1,52 @@
+name: Reusable Pip Index
+
+on:
+ workflow_call:
+ inputs:
+ CONCURRENCY:
+ required: true
+ type: string
+
+concurrency:
+ group: ${{ inputs.CONCURRENCY }}-pip-index
+ cancel-in-progress: true
+
+jobs:
+ pr-summary:
+ name: Create a Pip Index file
+
+ permissions:
+ contents: "read"
+ id-token: "write"
+
+ runs-on: ubuntu-latest
+
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@v3
+
+ - name: Set up Python
+ uses: actions/setup-python@v2
+ with:
+ python-version: 3.x
+
+ - id: "auth"
+ uses: google-github-actions/auth@v1
+ with:
+ workload_identity_provider: ${{ secrets.GOOGLE_WORKLOAD_IDENTITY_PROVIDER }}
+ service_account: ${{ secrets.GOOGLE_SERVICE_ACCOUNT }}
+
+ - name: 'Set up Cloud SDK'
+ uses: 'google-github-actions/setup-gcloud@v1'
+ with:
+ version: '>= 363.0.0'
+
+ - name: Install deps
+ run: pip install google-cloud-storage Jinja2
+
+ - name: Render pip index and upload to gcloud
+ run: |
+ python scripts/generate_prerelease_pip_index.py \
+ --commit ${{ github.sha }} \
+ --upload
+
diff --git a/.github/workflows/reusable_pr_summary.yml b/.github/workflows/reusable_pr_summary.yml
new file mode 100644
index 000000000000..b74d8c0799a8
--- /dev/null
+++ b/.github/workflows/reusable_pr_summary.yml
@@ -0,0 +1,60 @@
+name: Reusable PR Summary
+
+on:
+ workflow_call:
+ inputs:
+ CONCURRENCY:
+ required: true
+ type: string
+ PR_NUMBER:
+ required: true
+ type: string
+
+concurrency:
+ group: ${{ inputs.CONCURRENCY }}-pr-summary
+ cancel-in-progress: true
+
+jobs:
+ pr-summary:
+ name: Create HTML summary for PR
+
+ permissions:
+ contents: "read"
+ id-token: "write"
+ pull-requests: "write"
+
+ runs-on: ubuntu-latest
+
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@v3
+
+ - name: Set up Python
+ uses: actions/setup-python@v2
+ with:
+ python-version: 3.x
+
+ - id: "auth"
+ uses: google-github-actions/auth@v1
+ with:
+ workload_identity_provider: ${{ secrets.GOOGLE_WORKLOAD_IDENTITY_PROVIDER }}
+ service_account: ${{ secrets.GOOGLE_SERVICE_ACCOUNT }}
+
+ - name: 'Set up Cloud SDK'
+ uses: 'google-github-actions/setup-gcloud@v1'
+ with:
+ version: '>= 363.0.0'
+
+ - name: Install deps
+ run: pip install google-cloud-storage Jinja2 PyGithub # NOLINT
+
+ - name: Render HTML template
+ run: |
+ python scripts/generate_pr_summary.py \
+ --github-token ${{secrets.GITHUB_TOKEN}} \
+ --github-repository ${GITHUB_REPOSITORY} \
+ --pr-number ${{ inputs.PR_NUMBER }} \
+ --upload
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ PR_NUMBER: ${{ inputs.PR_NUMBER }}
diff --git a/.github/workflows/reusable_run_notebook.yml b/.github/workflows/reusable_run_notebook.yml
new file mode 100644
index 000000000000..c2ccd4377316
--- /dev/null
+++ b/.github/workflows/reusable_run_notebook.yml
@@ -0,0 +1,82 @@
+name: Reusable Buld and Upload Notebook
+
+on:
+ workflow_call:
+ inputs:
+ CONCURRENCY:
+ required: true
+ type: string
+ WHEEL_ARTIFACT_NAME:
+ required: false
+ type: string
+ default: ''
+ # We need this because PRs use a merged commit but we really want
+ # to track uploads based on the source commit.
+ UPLOAD_COMMIT_OVERRIDE:
+ required: false
+ type: string
+ default: ''
+
+concurrency:
+ group: ${{ inputs.CONCURRENCY }}-run-notebook
+ cancel-in-progress: true
+
+jobs:
+
+ run-notebook:
+ name: Run notebook
+
+ permissions:
+ contents: "read"
+ id-token: "write"
+
+ runs-on: ubuntu-latest
+
+ container:
+ image: rerunio/ci_docker:0.6
+
+ steps:
+ - uses: actions/checkout@v3
+
+ - name: Download Wheel
+ uses: actions/download-artifact@v3
+ with:
+ name: ${{ inputs.WHEEL_ARTIFACT_NAME }}
+ path: wheel
+
+ - name: Install built wheel
+ shell: bash
+ run: |
+ pip install --find-links wheel rerun-sdk
+
+ - name: Install Deps
+ shell: bash
+ run: |
+ pip install -r examples/python/notebook/requirements.txt
+
+ - name: Create notebook
+ shell: bash
+ run: |
+ jupyter nbconvert --to=html --ExecutePreprocessor.enabled=True examples/python/notebook/cube.ipynb --output /tmp/cube.html
+
+ - id: "auth"
+ uses: google-github-actions/auth@v1
+ with:
+ workload_identity_provider: ${{ secrets.GOOGLE_WORKLOAD_IDENTITY_PROVIDER }}
+ service_account: ${{ secrets.GOOGLE_SERVICE_ACCOUNT }}
+
+ - name: Add SHORT_SHA env property with commit short sha
+ run: |
+ if [ -z "${{ inputs.UPLOAD_COMMIT_OVERRIDE }}" ]; then
+ USED_SHA=${{ github.sha }}
+ else
+ USED_SHA=${{ inputs.UPLOAD_COMMIT_OVERRIDE }}
+ fi
+ echo "SHORT_SHA=$(echo $USED_SHA | cut -c1-7)" >> $GITHUB_ENV
+
+ - name: "Upload Notebook"
+ uses: google-github-actions/upload-cloud-storage@v1
+ with:
+ path: "/tmp/cube.html"
+ destination: "rerun-builds/commit/${{env.SHORT_SHA}}/notebooks"
+ parent: false
diff --git a/.github/workflows/reusable_upload_web.yml b/.github/workflows/reusable_upload_web.yml
new file mode 100644
index 000000000000..41bcd4896d11
--- /dev/null
+++ b/.github/workflows/reusable_upload_web.yml
@@ -0,0 +1,143 @@
+name: Reusable Upload Web
+
+on:
+ workflow_call:
+ inputs:
+ CONCURRENCY:
+ required: true
+ type: string
+ ADHOC_NAME:
+ type: string
+ required: false
+ default: ''
+ MARK_PRERELEASE_FOR_MAINLINE:
+ required: false
+ type: boolean
+ default: false
+ MARK_TAGGED_VERSION:
+ required: false
+ type: boolean
+ default: false
+ RELEASE_VERSION:
+ required: false
+ type: string
+ default: 'prerelease'
+ RRD_ARTIFACT_NAME:
+ required: false
+ type: string
+ default: ''
+ # We need this because PRs use a merged commit but we really want
+ # to track uploads based on the source commit.
+ UPLOAD_COMMIT_OVERRIDE:
+ required: false
+ type: string
+ default: ''
+
+concurrency:
+ group: ${{ inputs.CONCURRENCY }}-upload-web
+ cancel-in-progress: true
+
+jobs:
+
+ upload-web:
+ name: Upload web build to google cloud (wasm32 + wasm-bindgen)
+ permissions:
+ contents: "read"
+ id-token: "write"
+
+ runs-on: ubuntu-latest
+
+ steps:
+ - uses: actions/checkout@v3
+
+ - name: Download RRD
+ uses: actions/download-artifact@v3
+ with:
+ name: ${{ inputs.RRD_ARTIFACT_NAME }}
+ path: rrd
+
+ - name: Download Web Viewer
+ uses: actions/download-artifact@v3
+ with:
+ name: web_viewer
+ path: web_viewer
+
+
+ # Upload the wasm, html etc to a Google cloud bucket:
+ - id: "auth"
+ uses: google-github-actions/auth@v1
+ with:
+ workload_identity_provider: ${{ secrets.GOOGLE_WORKLOAD_IDENTITY_PROVIDER }}
+ service_account: ${{ secrets.GOOGLE_SERVICE_ACCOUNT }}
+
+ - name: Add SHORT_SHA env property with commit short sha
+ run: |
+ if [ -z "${{ inputs.UPLOAD_COMMIT_OVERRIDE }}" ]; then
+ USED_SHA=${{ github.sha }}
+ else
+ USED_SHA=${{ inputs.UPLOAD_COMMIT_OVERRIDE }}
+ fi
+ echo "SHORT_SHA=$(echo $USED_SHA | cut -c1-7)" >> $GITHUB_ENV
+
+ - name: "Upload web-viewer (commit)"
+ uses: google-github-actions/upload-cloud-storage@v1
+ with:
+ path: "web_viewer"
+ destination: "rerun-web-viewer/commit/${{env.SHORT_SHA}}"
+ parent: false
+
+ - name: "Upload RRD (commit)"
+ uses: google-github-actions/upload-cloud-storage@v1
+ with:
+ path: "rrd"
+ destination: "rerun-example-rrd/commit/${{env.SHORT_SHA}}"
+ parent: false
+
+ - name: "Upload web-viewer (prerelease)"
+ if: inputs.MARK_PRERELEASE_FOR_MAINLINE
+ uses: google-github-actions/upload-cloud-storage@v1
+ with:
+ path: "web_viewer"
+ destination: "rerun-web-viewer/prerelease"
+ parent: false
+
+
+ - name: "Upload RRD (prerelease)"
+ if: inputs.MARK_PRERELEASE_FOR_MAINLINE
+ uses: google-github-actions/upload-cloud-storage@v1
+ with:
+ path: "rrd"
+ destination: "rerun-example-rrd/prerelease"
+ parent: false
+
+ - name: "Upload web-viewer (tagged)"
+ if: inputs.MARK_TAGGED_VERSION
+ uses: google-github-actions/upload-cloud-storage@v1
+ with:
+ path: "web_viewer"
+ destination: "rerun-web-viewer/version/${{inputs.RELEASE_VERSION}}"
+ parent: false
+
+ - name: "Upload RRD (tagged)"
+ if: inputs.MARK_TAGGED_VERSION
+ uses: google-github-actions/upload-cloud-storage@v1
+ with:
+ path: "rrd"
+ destination: "rerun-example-rrd/version/${{inputs.RELEASE_VERSION}}"
+ parent: false
+
+ - name: "Upload web-viewer (adhoc)"
+ if: ${{ inputs.ADHOC_NAME != '' }}
+ uses: google-github-actions/upload-cloud-storage@v1
+ with:
+ path: "web_viewer"
+ destination: "rerun-web-viewer/adhoc/${{inputs.ADHOC_NAME}}"
+ parent: false
+
+ - name: "Upload RRD (adhoc)"
+ if: ${{ inputs.ADHOC_NAME != '' }}
+ uses: google-github-actions/upload-cloud-storage@v1
+ with:
+ path: "rrd"
+ destination: "rerun-example-rrd/adhoc/${{inputs.ADHOC_NAME}}"
+ parent: false
diff --git a/.github/workflows/reusable_upload_wheels.yml b/.github/workflows/reusable_upload_wheels.yml
new file mode 100644
index 000000000000..4820598e00dd
--- /dev/null
+++ b/.github/workflows/reusable_upload_wheels.yml
@@ -0,0 +1,103 @@
+name: Reusable Upload Wheels
+
+on:
+ workflow_call:
+ inputs:
+ CONCURRENCY:
+ required: true
+ type: string
+ RRD_ARTIFACT_NAME:
+ required: false
+ type: string
+ default: ''
+ WHEEL_ARTIFACT_NAME:
+ required: false
+ type: string
+ default: ''
+
+concurrency:
+ group: ${{ inputs.CONCURRENCY }}-upload-wheels
+ cancel-in-progress: true
+
+jobs:
+
+ upload-wheel:
+ name: Upload Wheel to google cloud
+
+ runs-on: ubuntu-latest
+
+ container:
+ image: rerunio/ci_docker:0.6
+
+ permissions:
+ contents: "read"
+ id-token: "write"
+
+ steps:
+ - name: Show context
+ run: |
+ echo "GITHUB_CONTEXT": $GITHUB_CONTEXT
+ echo "JOB_CONTEXT": $JOB_CONTEXT
+ echo "INPUTS_CONTEXT": $INPUTS_CONTEXT
+ echo "ENV_CONTEXT": $ENV_CONTEXT
+ echo "MATRIX_CONTEXT": $MATRIX_CONTEXT
+ env:
+ ENV_CONTEXT: ${{ toJson(env) }}
+ GITHUB_CONTEXT: ${{ toJson(github) }}
+ JOB_CONTEXT: ${{ toJson(job) }}
+ INPUTS_CONTEXT: ${{ toJson(inputs) }}
+
+ - uses: actions/checkout@v3
+
+ - name: Download RRD
+ uses: actions/download-artifact@v3
+ with:
+ name: ${{inputs.RRD_ARTIFACT_NAME}}
+ path: rrd
+
+ - name: Download Wheel
+ uses: actions/download-artifact@v3
+ with:
+ name: ${{inputs.WHEEL_ARTIFACT_NAME}}
+ path: pre-dist
+
+ - name: Unpack the wheel
+ shell: bash
+ run: |
+ mkdir unpack-dist
+ wheel unpack pre-dist/*.whl --dest unpack-dist
+
+ - name: Get the folder name
+ shell: bash
+ id: get_folder_name
+ run: |
+ echo "PKG_FOLDER=$(ls unpack-dist)" >> "$GITHUB_OUTPUT"
+
+ - name: Insert the rrd
+ shell: bash
+ # If you change the line below you should almost definitely change the `key:` line
+ # in 'Cache RRD dataset'reusable_build_and_test.yml
+ run: |
+ cp rrd/colmap_fiat.rrd unpack-dist/${{ steps.get_folder_name.outputs.PKG_FOLDER }}/rerun_sdk/rerun_demo/colmap_fiat.rrd
+
+ - name: Repack the wheel
+ shell: bash
+ run: |
+ mkdir dist
+ wheel pack unpack-dist/${{ steps.get_folder_name.outputs.PKG_FOLDER }} --dest dist/
+
+ - id: "auth"
+ uses: google-github-actions/auth@v1
+ with:
+ workload_identity_provider: ${{ secrets.GOOGLE_WORKLOAD_IDENTITY_PROVIDER }}
+ service_account: ${{ secrets.GOOGLE_SERVICE_ACCOUNT }}
+
+ - name: Add SHORT_SHA env property with commit short sha
+ run: echo "SHORT_SHA=`echo ${{github.sha}} | cut -c1-7`" >> $GITHUB_ENV
+
+ - name: "Upload Wheel"
+ uses: google-github-actions/upload-cloud-storage@v1
+ with:
+ path: "dist"
+ destination: "rerun-builds/commit/${{env.SHORT_SHA}}/wheels"
+ parent: false
diff --git a/.github/workflows/rust.yml b/.github/workflows/rust.yml
deleted file mode 100644
index f48703b53395..000000000000
--- a/.github/workflows/rust.yml
+++ /dev/null
@@ -1,368 +0,0 @@
-name: CI (Rust)
-
-on:
- push:
- branches:
- - "main"
- pull_request:
- workflow_dispatch:
- inputs:
- force_update_web_build:
- description: "Upload web build to google cloud"
- required: true
- default: false
- type: boolean
- force_run_benchmarks:
- description: "Run the rust benchmarks"
- required: true
- default: false
- type: boolean
-
-concurrency:
- group: ${{ github.workflow }}-${{ github.event.pull_request.number }} # Cancel previous CI jobs on the same branch
- cancel-in-progress: true
-
-env:
- # web_sys_unstable_apis is required to enable the web_sys clipboard API which egui_web uses
- # https://rustwasm.github.io/wasm-bindgen/api/web_sys/struct.Clipboard.html
- # https://rustwasm.github.io/docs/wasm-bindgen/web-sys/unstable-apis.html
- RUSTFLAGS: --cfg=web_sys_unstable_apis --deny warnings
-
- # See https://github.com/ericseppanen/cargo-cranky/issues/8
- RUSTDOCFLAGS: --deny warnings --deny rustdoc::missing_crate_level_docs
-
-permissions:
- # deployments permission to deploy GitHub pages website
- deployments: write
- # contents permission to update benchmark contents in gh-pages branch
- contents: write
-
-jobs:
- # See the benchmarks at https://ref.rerun.io/dev/bench/
- rs-benchmarks:
- name: Rust Criterion benchmarks
-
- # Only run the rs-benchmarks job when a commit gets pushed to main or we manually specify it
- if: ${{ github.ref == 'refs/heads/main' || github.event.inputs.force_run_benchmarks }}
-
- runs-on: ubuntu-latest-16-cores
- container:
- image: rerunio/ci_docker:0.6
- env:
- RUSTFLAGS: ${{env.RUSTFLAGS}}
- RUSTDOCFLAGS: ${{env.RUSTDOCFLAGS}}
- steps:
- - uses: actions/checkout@v3
-
- - name: Set up cargo cache
- uses: Swatinem/rust-cache@v2
- with:
- env-vars: CARGO CC CFLAGS CXX CMAKE RUST CACHE_KEY
- # Don't update the cache -- it will be updated by the lint job
- # TODO(jleibs): this job will likely run before rust.yml updates
- # the cache. Better cross-job sequencing would be nice here
- save-if: false
-
- - name: Run benchmark
- # Use bash shell so we get pipefail behavior with tee
- shell: bash
- run: |
- cargo bench \
- --all-features \
- -p re_arrow_store \
- -p re_data_store \
- -p re_log_encoding \
- -p re_query \
- -p re_tuid \
- -- --output-format=bencher | tee output.txt
-
- - name: Store benchmark result
- # https://github.com/benchmark-action/github-action-benchmark
- uses: benchmark-action/github-action-benchmark@v1
- with:
- name: Rust Benchmark
- tool: "cargo"
- output-file-path: output.txt
- github-token: ${{ secrets.GITHUB_TOKEN }}
-
- # Show alert with commit comment on detecting possible performance regression
- comment-on-alert: true
- alert-threshold: "150%"
- fail-on-alert: true
- comment-always: false # Generates too much GitHub notification spam
-
- # Save, results and push to GitHub only on main
- save-data-file: ${{ github.ref == 'refs/heads/main' }}
- auto-push: ${{ github.ref == 'refs/heads/main' }}
- gh-pages-branch: gh-pages
- benchmark-data-dir-path: dev/bench
- max-items-in-chart: 30
-
- # ---------------------------------------------------------------------------
-
- rs-lints:
- name: Rust lints (fmt, check, cranky, tests, doc)
- runs-on: ubuntu-latest-16-cores
- container:
- image: rerunio/ci_docker:0.6
- env:
- RUSTFLAGS: ${{env.RUSTFLAGS}}
- RUSTDOCFLAGS: ${{env.RUSTDOCFLAGS}}
- steps:
- - uses: actions/checkout@v3
- with:
- fetch-depth: 0 # Don't do a shallow clone since we need to push gh-pages
-
- - name: Set up cargo cache
- uses: Swatinem/rust-cache@v2
- with:
- env-vars: CARGO CC CFLAGS CXX CMAKE RUST CACHE_KEY
- # See: https://github.com/rerun-io/rerun/pull/497
- save-if: ${{ github.event_name == 'push'}}
-
- # First do our check with --locked to make sure `Cargo.lock` is up to date
- - name: Check all features
- uses: actions-rs/cargo@v1
- with:
- command: check
- args: --locked --all-features
-
- - name: Rustfmt
- uses: actions-rs/cargo@v1
- with:
- command: fmt
- args: --all -- --check
-
- - name: Cranky
- uses: actions-rs/cargo@v1
- with:
- command: cranky
- args: --all-targets --all-features -- --deny warnings
-
- # --------------------------------------------------------------------------------
- # Check a few important permutations of the feature flags for our `rerun` library:
- - name: Check rerun with `--no-default-features``
- uses: actions-rs/cargo@v1
- with:
- command: cranky
- args: --locked -p rerun --no-default-features
-
- - name: Check rerun with `--features sdk`
- uses: actions-rs/cargo@v1
- with:
- command: cranky
- args: --locked -p rerun --no-default-features --features sdk
- # --------------------------------------------------------------------------------
-
- - name: Test doc-tests
- uses: actions-rs/cargo@v1
- with:
- command: test
- args: --doc --all-features
-
- - name: cargo doc
- uses: actions-rs/cargo@v1
- with:
- command: doc
- args: --no-deps --all-features
-
- - name: cargo doc --document-private-items
- uses: actions-rs/cargo@v1
- with:
- command: doc
- args: --document-private-items --no-deps --all-features
-
- - name: Test
- uses: actions-rs/cargo@v1
- with:
- command: test
- args: --all-targets --all-features
-
- - name: Set up git author
- if: ${{ github.event_name == 'push' }}
- run: |
- remote_repo="https://${GITHUB_TOKEN}@github.com/${GITHUB_REPOSITORY}.git"
- git config --global user.name "${GITHUB_ACTOR}"
- git config --global user.email "${GITHUB_ACTOR}@users.noreply.github.com"
- env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
-
- - name: Set up ghp-import
- if: ${{ github.event_name == 'push' }}
- run: pip install ghp-import
-
- - name: Patch in a redirect page
- if: ${{ github.event_name == 'push' }}
- run: echo "" > target/doc/index.html
- env:
- REDIRECT_CRATE: rerun
-
- # See: https://github.com/c-w/ghp-import
- - name: Deploy the docs
- if: ${{ github.event_name == 'push' }}
- run: |
- git fetch
- python3 -m ghp_import -n -p -x docs/rust/head target/doc/ -m "Update the rust docs"
-
- # ---------------------------------------------------------------------------
-
- rs-check-wasm:
- name: Check Rust web build (wasm32 + wasm-bindgen)
- runs-on: ubuntu-latest-16-cores
- container:
- image: rerunio/ci_docker:0.6
- env:
- RUSTFLAGS: ${{env.RUSTFLAGS}}
- RUSTDOCFLAGS: ${{env.RUSTDOCFLAGS}}
- steps:
- - uses: actions/checkout@v2
-
- - uses: actions-rs/toolchain@v1
- with:
- profile: default
- toolchain: 1.67.1
- target: wasm32-unknown-unknown
- override: true
-
- - name: Set up cargo cache
- uses: Swatinem/rust-cache@v2
- with:
- env-vars: CARGO CC CFLAGS CXX CMAKE RUST CACHE_KEY
- # See: https://github.com/rerun-io/rerun/pull/497
- save-if: ${{ github.event_name == 'push'}}
-
- - name: clippy check re_viewer wasm32
- run: ./scripts/clippy_wasm.sh
-
- - name: Check re_renderer examples wasm32
- uses: actions-rs/cargo@v1
- with:
- command: check
- args: --locked --target wasm32-unknown-unknown --target-dir target_wasm -p re_renderer --examples
-
- - name: Build web-viewer (debug)
- uses: actions-rs/cargo@v1
- with:
- command: run
- args: --locked -p re_build_web_viewer -- --debug
-
- # ---------------------------------------------------------------------------
-
- rs-build-web-viewer:
- name: Upload web build to google cloud (wasm32 + wasm-bindgen)
- permissions:
- contents: "read"
- id-token: "write"
-
- if: github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/tags/v') || github.event.inputs.force_update_web_build
- runs-on: ubuntu-latest-16-cores
- container:
- image: rerunio/ci_docker:0.6
- env:
- RUSTFLAGS: ${{env.RUSTFLAGS}}
- RUSTDOCFLAGS: ${{env.RUSTDOCFLAGS}}
- steps:
- - uses: actions/checkout@v2
-
- - uses: actions-rs/toolchain@v1
- with:
- profile: minimal
- toolchain: 1.67.0
- target: wasm32-unknown-unknown
- override: true
-
- - name: Set up cargo cache
- uses: Swatinem/rust-cache@v2
- with:
- env-vars: CARGO CC CFLAGS CXX CMAKE RUST CACHE_KEY
- # See: https://github.com/rerun-io/rerun/pull/497
- save-if: ${{ github.event_name == 'push'}}
-
- - name: Patch Cargo.toml for pre-release
- if: "!startsWith(github.ref , 'refs/tags/v')"
- # After patching the pre-release version, run cargo update.
- # This updates the cargo.lock file with the new version numbers and keeps the wheel build from failing
- run: |
- python3 scripts/version_util.py --patch_prerelease
- cargo update -w
-
- - name: Build web-viewer (release)
- uses: actions-rs/cargo@v1
- with:
- command: run
- args: --locked -p re_build_web_viewer -- --release
-
- # Upload the wasm, html etc to a Google cloud bucket:
- - id: "auth"
- uses: google-github-actions/auth@v1
- with:
- workload_identity_provider: ${{ secrets.GOOGLE_WORKLOAD_IDENTITY_PROVIDER }}
- service_account: ${{ secrets.GOOGLE_SERVICE_ACCOUNT }}
-
- - name: Add SHORT_SHA env property with commit short sha
- run: echo "SHORT_SHA=`echo ${{github.sha}} | cut -c1-7`" >> $GITHUB_ENV
-
- - name: "Upload web-viewer (commit)"
- uses: google-github-actions/upload-cloud-storage@v1
- with:
- path: "web_viewer"
- destination: "rerun-web-viewer/commit/${{env.SHORT_SHA}}"
- parent: false
-
- - name: "Upload web-viewer (prerelease)"
- if: github.ref == 'refs/heads/main'
- uses: google-github-actions/upload-cloud-storage@v1
- with:
- path: "web_viewer"
- destination: "rerun-web-viewer/prerelease"
- parent: false
-
- - name: "Upload web-viewer (tagged)"
- if: startsWith(github.ref, 'refs/tags/v')
- uses: google-github-actions/upload-cloud-storage@v1
- with:
- path: "web_viewer"
- destination: "rerun-web-viewer/version/${{github.ref_name}}"
- parent: false
-
- - name: "Upload web-viewer (latest release)"
- if: github.ref == 'latest'
- uses: google-github-actions/upload-cloud-storage@v1
- with:
- path: "web_viewer"
- destination: "rerun-web-viewer/latest"
- parent: false
-
- # ---------------------------------------------------------------------------
-
- rs-cargo-deny:
- name: Check Rust dependencies (cargo-deny)
- runs-on: ubuntu-latest-16-cores
- container:
- image: rerunio/ci_docker:0.6
- env:
- RUSTFLAGS: ${{env.RUSTFLAGS}}
- RUSTDOCFLAGS: ${{env.RUSTDOCFLAGS}}
-
- # TODO(emilk): remove this matrix when https://github.com/EmbarkStudios/cargo-deny/issues/324 is resolved
- strategy:
- fail-fast: false
- matrix:
- platform:
- - i686-pc-windows-gnu
- - i686-pc-windows-msvc
- - i686-unknown-linux-gnu
- - wasm32-unknown-unknown
- - x86_64-apple-darwin
- - x86_64-pc-windows-gnu
- - x86_64-pc-windows-msvc
- - x86_64-unknown-linux-gnu
- - x86_64-unknown-redox
-
- steps:
- - uses: actions/checkout@v3
- - uses: EmbarkStudios/cargo-deny-action@v1
- with:
- command: check
- log-level: error
- arguments: --all-features --target ${{ matrix.platform }}
diff --git a/.github/workflows/toml.yml b/.github/workflows/toml.yml
deleted file mode 100644
index f3a60ec74885..000000000000
--- a/.github/workflows/toml.yml
+++ /dev/null
@@ -1,43 +0,0 @@
-name: CI (TOML)
-
-on:
- pull_request:
- push:
- branches:
- - "main"
-
-concurrency:
- group: ${{ github.workflow }}-${{ github.event.pull_request.number }} # Cancel previous CI jobs on the same branch
- cancel-in-progress: true
-
-jobs:
- toml-lints:
- name: Lint TOML files
- runs-on: ubuntu-latest
- steps:
- - uses: actions/checkout@v3
-
- - uses: actions-rs/toolchain@v1
- with:
- profile: minimal
- toolchain: 1.67.1
- override: true
-
- - name: Set up cargo cache
- uses: Swatinem/rust-cache@v2
- with:
- # See: https://github.com/rerun-io/rerun/pull/497
- env-vars: CARGO CC CFLAGS CXX CMAKE RUST CACHE_KEY
- # Don't update the cache -- it will be updated by the lint job
- # TODO(jleibs): this job will likely run before rust.yml updates
- # the cache. Better cross-job sequencing would be nice here
- save-if: false
-
- - name: Install taplo-cli
- uses: baptiste0928/cargo-install@v1
- with:
- crate: taplo-cli
-
- - name: Taplo check
- run: |
- taplo fmt --check
diff --git a/.github/workflows/typos.yml b/.github/workflows/typos.yml
deleted file mode 100644
index c3bc84125f51..000000000000
--- a/.github/workflows/typos.yml
+++ /dev/null
@@ -1,17 +0,0 @@
-# https://github.com/crate-ci/typos
-# Add exceptions to _typos.toml
-# install and run locally: cargo install typos-cli && typos
-
-name: Spell Check
-on: [pull_request]
-
-jobs:
- run:
- name: Spell Check
- runs-on: ubuntu-latest
- steps:
- - name: Checkout Actions Repository
- uses: actions/checkout@v2
-
- - name: Check spelling of entire workspace
- uses: crate-ci/typos@master
diff --git a/.vscode/extensions.json b/.vscode/extensions.json
index aae305c13ea6..32731cdfadeb 100644
--- a/.vscode/extensions.json
+++ b/.vscode/extensions.json
@@ -2,17 +2,18 @@
// See https://go.microsoft.com/fwlink/?LinkId=827846
// for the documentation about the extensions.json format
"recommendations": [
- "charliermarsh.ruff", // Ruff for linting
+ "charliermarsh.ruff",
+ "github.vscode-github-actions",
"ms-python.python",
- "ms-vsliveshare.vsliveshare", // Live Share
+ "ms-vsliveshare.vsliveshare",
"polymeilex.wgsl",
- "rust-lang.rust-analyzer", // Rust-analyzer
+ "rust-lang.rust-analyzer",
"serayuzgur.crates",
"streetsidesoftware.code-spell-checker",
- "tamasfe.even-better-toml", // TOML LSP
- "vadimcn.vscode-lldb", // CodeLLDB
- "wayou.vscode-todo-highlight", // TODO Highlight
- "webfreak.debug", // Native Debug
- "zxh404.vscode-proto3", // vscode-proto3
+ "tamasfe.even-better-toml",
+ "vadimcn.vscode-lldb",
+ "wayou.vscode-todo-highlight",
+ "webfreak.debug",
+ "zxh404.vscode-proto3",
]
}
diff --git a/.vscode/settings.json b/.vscode/settings.json
index c52ea2c7178d..1722a88e03b3 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -1,82 +1,75 @@
{
- "editor.formatOnSave": true,
- "editor.semanticTokenColorCustomizations": {
- "rules": {
- "*.unsafe:rust": "#eb5046"
- }
- },
- "files.insertFinalNewline": true,
- "files.trimTrailingWhitespace": true,
- "files.exclude": {
- "env/**": true,
- "target/**": true,
- "target_ra/**": true,
- "target_wasm/**": true,
- },
- "files.autoGuessEncoding": true,
- "python.formatting.provider": "black",
- "python.formatting.blackArgs": [
- "--config",
- "rerun_py/pyproject.toml"
- ],
- "python.linting.mypyEnabled": true,
- "python.linting.enabled": true,
- "cSpell.words": [
- "andreas",
- "bbox",
- "bindgroup",
- "colormap",
- "emath",
- "framebuffer",
- "hoverable",
- "ilog",
- "jumpflooding",
- "Keypoint",
- "memoffset",
- "nyud",
- "objectron",
- "Readback",
- "readbacks",
- "Skybox",
- "smallvec",
- "swapchain",
- "texcoords",
- "Tonemapper",
- "tonemapping",
- "voronoi",
- "vram",
- "Wgsl"
- ],
- // don't share a cargo lock with rust-analyzer.
- // see https://github.com/rerun-io/rerun/pull/519 for rationale
- "rust-analyzer.checkOnSave.overrideCommand": [
- "cargo",
- "cranky",
- "--target-dir=target_ra",
- "--workspace",
- "--message-format=json",
- "--all-targets",
- "--all-features", // --all-features will set the `__ci` feature flag, which stops crates/re_web_viewer_server/build.rs from building the web viewer
- ],
- "rust-analyzer.cargo.buildScripts.overrideCommand": [
- "cargo",
- "check",
- "--quiet",
- "--target-dir=target_ra",
- "--workspace",
- "--message-format=json",
- "--all-targets",
- "--all-features", // --all-features will set the `__ci` feature flag, which stops crates/re_web_viewer_server/build.rs from building the web viewer
- ],
- // Our build scripts are generating code.
- // Having Rust Analyzer do this while doing other builds can lead to catastrophic failures.
- // INCLUDING attempts to publish a new release!
- "rust-analyzer.cargo.buildScripts.enable": false,
- "python.analysis.extraPaths": [
- "rerun_py/rerun_sdk"
- ],
- "ruff.args": [
- "--config",
- "rerun_py/pyproject.toml"
- ],
+ "editor.formatOnSave": true,
+ "editor.semanticTokenColorCustomizations": {
+ "rules": {
+ "*.unsafe:rust": "#eb5046"
+ }
+ },
+ "files.insertFinalNewline": true,
+ "files.trimTrailingWhitespace": true,
+ "files.exclude": {
+ "env/**": true,
+ "target/**": true,
+ "target_ra/**": true,
+ "target_wasm/**": true
+ },
+ "files.autoGuessEncoding": true,
+ "python.formatting.provider": "black",
+ "python.formatting.blackArgs": ["--config", "rerun_py/pyproject.toml"],
+ "python.linting.mypyEnabled": true,
+ "python.linting.enabled": true,
+ "cSpell.words": [
+ "andreas",
+ "bbox",
+ "bindgroup",
+ "colormap",
+ "emath",
+ "framebuffer",
+ "hoverable",
+ "ilog",
+ "jumpflooding",
+ "Keypoint",
+ "memoffset",
+ "nyud",
+ "objectron",
+ "Readback",
+ "readbacks",
+ "Skybox",
+ "smallvec",
+ "swapchain",
+ "texcoords",
+ "Tonemapper",
+ "tonemapping",
+ "unsmoothed",
+ "voronoi",
+ "vram",
+ "Wgsl"
+ ],
+ // don't share a cargo lock with rust-analyzer.
+ // see https://github.com/rerun-io/rerun/pull/519 for rationale
+ "rust-analyzer.checkOnSave.overrideCommand": [
+ "cargo",
+ "cranky",
+ "--target-dir=target_ra",
+ "--workspace",
+ "--message-format=json",
+ "--all-targets",
+ "--all-features" // --all-features will set the `__ci` feature flag, which stops crates/re_web_viewer_server/build.rs from building the web viewer
+ ],
+ "rust-analyzer.cargo.buildScripts.overrideCommand": [
+ "cargo",
+ "check",
+ "--quiet",
+ "--target-dir=target_ra",
+ "--workspace",
+ "--message-format=json",
+ "--all-targets",
+ "--all-features" // --all-features will set the `__ci` feature flag, which stops crates/re_web_viewer_server/build.rs from building the web viewer
+ ],
+ // Our build scripts are generating code.
+ // Having Rust Analyzer do this while doing other builds can lead to catastrophic failures.
+ // INCLUDING attempts to publish a new release!
+ "rust-analyzer.cargo.buildScripts.enable": false,
+ "python.analysis.extraPaths": ["rerun_py/rerun_sdk"],
+ "ruff.args": ["--config", "rerun_py/pyproject.toml"]
}
diff --git a/BUILD.md b/BUILD.md
index 011e4d29b023..433d64953270 100644
--- a/BUILD.md
+++ b/BUILD.md
@@ -1,22 +1,22 @@
# Building Rerun
-This is a guide to how to build Rerun.
+This is a guide to how to build Rerun.
## See also
-* [`rerun_py/README.md`](rerun_py/README.md) - build instructions for Python SDK
-* [`ARCHITECTURE.md`](ARCHITECTURE.md)
-* [`CODE_OF_CONDUCT.md`](CODE_OF_CONDUCT.md)
-* [`CODE_STYLE.md`](CODE_STYLE.md)
-* [`CONTRIBUTING.md`](CONTRIBUTING.md)
-* [`RELEASES.md`](RELEASES.md)
+- [`rerun_py/README.md`](rerun_py/README.md) - build instructions for Python SDK
+- [`ARCHITECTURE.md`](ARCHITECTURE.md)
+- [`CODE_OF_CONDUCT.md`](CODE_OF_CONDUCT.md)
+- [`CODE_STYLE.md`](CODE_STYLE.md)
+- [`CONTRIBUTING.md`](CONTRIBUTING.md)
+- [`RELEASES.md`](RELEASES.md)
## Getting started with the repository.
-* Install the Rust toolchain:
-* `git clone git@github.com:rerun-io/rerun.git && cd rerun`
-* Run `./scripts/setup_dev.sh`.
-* Make sure `cargo --version` prints `1.67.1` once you are done
+- Install the Rust toolchain:
+- `git clone git@github.com:rerun-io/rerun.git && cd rerun`
+- Run `./scripts/setup_dev.sh`.
+- Make sure `cargo --version` prints `1.67.1` once you are done
### Apple-silicon Macs
@@ -35,7 +35,8 @@ Python API docs can be found at and are built
Rust documentation is hosted on . You can build them locally with: `cargo doc --all-features --no-deps --open`
## Build and install the Rerun Python SDK
-Rerun is available as a package on PyPi and can be installed with `pip install rerun-sdk`
+
+Rerun is available as a package on PyPi and can be installed with `pip install depthai-viewer`
Additionally, prebuilt dev wheels from head of main are available at .
@@ -64,18 +65,19 @@ From here on out, we assume you have this virtualenv activated.
### Build and install
You need to setup your build environment once with
+
```sh
./scripts/setup.sh
```
Then install the Rerun SDK with:
+
```
pip install ./rerun_py
```
> Note: If you are unable to upgrade pip to version `>=21.3`, you need to pass `--use-feature=in-tree-build` to the `pip install` command.
-
## Improving compile times
As of today, we link everything statically in both debug and release builds, which makes custom linkers and split debuginfo the two most impactful tools we have at our disposal in order to improve compile times.
@@ -87,9 +89,11 @@ These tools can configured through your `Cargo` configuration, available at `$HO
On x64 macOS, use the [zld](https://github.com/michaeleisel/zld) linker and keep debuginfo in a single separate file.
Pre-requisites:
+
- Install [zld](https://github.com/michaeleisel/zld): `brew install michaeleisel/zld/zld`.
`config.toml` (x64):
+
```toml
[target.x86_64-apple-darwin]
rustflags = [
@@ -103,6 +107,7 @@ rustflags = [
On Apple-silicon Mac (M1, M2), the default settings are already pretty good. The default linker is just as good as `zld`. Do NOT set `split-debuginfo=packed`, as that will make linking a lot slower. You can set `split-debuginfo=unpacked` for a small improvement.
`config.toml` (M1, M2):
+
```toml
[target.aarch64-apple-darwin]
rustflags = [
@@ -116,9 +121,11 @@ rustflags = [
On Linux, use the [mold](https://github.com/rui314/mold) linker and keep DWARF debuginfo in separate files.
Pre-requisites:
+
- Install [mold](https://github.com/rui314/mold) through your package manager.
`config.toml`:
+
```toml
[target.x86_64-unknown-linux-gnu]
linker = "clang"
@@ -135,13 +142,16 @@ rustflags = [
On Windows, use LLVM's `lld` linker and keep debuginfo in a single separate file.
Pre-requisites:
+
- Install `lld`:
+
```
cargo install -f cargo-binutils
rustup component add llvm-tools-preview
```
`config.toml`:
+
```toml
[target.x86_64-pc-windows-msvc]
linker = "rust-lld.exe"
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 1a7093067a19..5d2060d7981b 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -4,12 +4,183 @@
## [Unreleased](https://github.com/rerun-io/rerun/compare/latest...HEAD)
…
+## [0.5.0](https://github.com/rerun-io/rerun/compare/v0.4.0...v0.5.0) - Jupyter MVP, GPU-based picking & colormapping, new datastore!
+
+### Overview & Highlights
+
+This new release adds MVP support for embedding Rerun in Jupyter notebooks, and brings significant performance improvements across all layers of the stack.
+
+* Rerun can now be embedded in Jupyter notebooks
+ * Tested with Jupyter Notebook Classic, Jupyter Lab, VSCode & Google Colab; checkout our [How-to guide](https://www.rerun.io/docs/howto/notebook)
+ * Try it out live on [Google Colab](https://colab.research.google.com/drive/1R9I7s4o6wydQC_zkybqaSRFTtlEaked_?usp=sharing)
+* All colormapping tasks are now done directly on the GPU
+ * This yields _very significant_ performance improvements for colormapping heavy workload (e.g. segmentation)
+ * Try it out in our new [`segment_anything` example](https://www.rerun.io/docs/getting-started/examples#segment-anything) that shows off the latest models from Meta AI
+* GPU picking & hovering now works with all of our primitives, including meshes & depth clouds
+ * This fixes all the shortcomings of the previous CPU-based system
+ * Rerun's automatic backprojection of depth textures ("depth clouds") is now feature complete
+ * Try it out in our updated [`nyud` example](https://www.rerun.io/docs/getting-started/examples#nyud)
+* Our datastore has been completely revamped to more closely match our latest data model
+ * This yields _very significant_ performance improvements for workloads with many events
+ * Checkout [this post](https://github.com/rerun-io/rerun/issues/1619#issuecomment-1511046649) for a detailed walkthrough of the changes
+
+### In Detail
+
+#### 🐍 Python SDK
+- Document that we also accept colors in 0-1 floats [#1740](https://github.com/rerun-io/rerun/pull/1740)
+- Don't initialize an SDK session if we are only going to be launching the app [#1768](https://github.com/rerun-io/rerun/pull/1768)
+- Allow torch tensors for `log_rigid3` [#1769](https://github.com/rerun-io/rerun/pull/1769)
+- Always send `recording_id` as part of `LogMsg` [#1778](https://github.com/rerun-io/rerun/pull/1778)
+- New `reset_time` API [#1826](https://github.com/rerun-io/rerun/pull/1826) [#1854](https://github.com/rerun-io/rerun/pull/1854)
+- Always flush when we remove a sink [#1830](https://github.com/rerun-io/rerun/pull/1830)
+- More robust wait for exit condition during .serve() [#1939](https://github.com/rerun-io/rerun/pull/1939)
+
+#### 🪳 Bug Fixes
+- Fix broken outlines (hover/select effect) for lines [#1724](https://github.com/rerun-io/rerun/pull/1724)
+- Fix logged obb being displayed with half of the requested size [#1749](https://github.com/rerun-io/rerun/pull/1749) (thanks [@BenjaminDev](https://github.com/BenjaminDev)!)
+- Fix `log_obb` usage [#1761](https://github.com/rerun-io/rerun/pull/1761)
+- Always create the `log_time` timeline [#1763](https://github.com/rerun-io/rerun/pull/1763)
+- Fix undo/redo selection shortcut/action changing selection history without changing selection [#1765](https://github.com/rerun-io/rerun/pull/1765)
+- Fix various crashes [#1780](https://github.com/rerun-io/rerun/pull/1780)
+- Fix crash when trying to do picking on depth clouds [d94ca3dd35e73e1984ccb969d0c7abd0d3e0faa9](https://github.com/rerun-io/rerun/commit/d94ca3dd35e73e1984ccb969d0c7abd0d3e0faa9)
+- ci: fix benchmarks [#1799](https://github.com/rerun-io/rerun/pull/1799)
+- ci: fix `cargo deny` [#1806](https://github.com/rerun-io/rerun/pull/1806)
+- Fix "too many points" crash [#1822](https://github.com/rerun-io/rerun/pull/1822)
+- Allow re-use of `RowId`s if no conflict is possible [#1832](https://github.com/rerun-io/rerun/pull/1832)
+- Reduce memory used by staging belts on Web [#1836](https://github.com/rerun-io/rerun/pull/1836)
+- Test and handle all tensor dtypes as images [#1840](https://github.com/rerun-io/rerun/pull/1840)
+- Fix the python build when running without `web_viewer` enabled [#1856](https://github.com/rerun-io/rerun/pull/1856)
+- Error instead of `expect` inside `msg_encode` [#1857](https://github.com/rerun-io/rerun/pull/1857)
+- Fix shutdown race condition in `re_sdk_comms` client [#1861](https://github.com/rerun-io/rerun/pull/1861)
+- Fix broken instance picking in presence of images [#1876](https://github.com/rerun-io/rerun/pull/1876)
+- Make sure JPEGs are always decoded [#1884](https://github.com/rerun-io/rerun/pull/1884)
+- Fix crash when saving store to file [#1909](https://github.com/rerun-io/rerun/pull/1909)
+- Don't clean up `LogDb`s that only contain a `BeginRecordingMsg` [#1914](https://github.com/rerun-io/rerun/pull/1914)
+- Fix picking entities with image + another object (or label) twice [#1908](https://github.com/rerun-io/rerun/pull/1908)
+- Fix double clicking camera no longer focusing on said camera [#1911](https://github.com/rerun-io/rerun/pull/1911)
+- Fix annotation images sometimes drawn in the background [#1933](https://github.com/rerun-io/rerun/pull/1933)
+- Use `zipfile` python library instead of `unzip` command in `arkitscene` demo [#1936](https://github.com/rerun-io/rerun/pull/1936)
+- Fix backslashes in `arkitscene` rigid transformation path [#1938](https://github.com/rerun-io/rerun/pull/1938)
+- Fix hover/select highlights when picking single points in a scene with multiple point clouds [#1942](https://github.com/rerun-io/rerun/pull/1942)
+- Fix hovering depth clouds [#1943](https://github.com/rerun-io/rerun/pull/1943)
+
+#### 🚀 Performance Improvements
+- batching 4: retire `MsgBundle` + batching support in transport layer [#1679](https://github.com/rerun-io/rerun/pull/1679)
+- Optimize the depth-cloud shader when `depth=0` [#1729](https://github.com/rerun-io/rerun/pull/1729)
+- `arrow2_convert` primitive (de)serialization benchmarks [#1742](https://github.com/rerun-io/rerun/pull/1742)
+- `arrow2` `estimated_bytes_size` benchmarks [#1743](https://github.com/rerun-io/rerun/pull/1743)
+- `arrow2` erased refcounted clones benchmarks [#1745](https://github.com/rerun-io/rerun/pull/1745)
+- benchmarks for common vector ops across `smallvec`/`tinyvec`/std [#1747](https://github.com/rerun-io/rerun/pull/1747)
+- Columnar `TimePoint`s in data tables and during transport [#1767](https://github.com/rerun-io/rerun/pull/1767)
+- Compile with `panic = "abort"` [#1813](https://github.com/rerun-io/rerun/pull/1813)
+- Process 2D points per entities like 3D points [#1820](https://github.com/rerun-io/rerun/pull/1820)
+- re_query: use latest data types (`DataRow`/`DataCell`) [#1828](https://github.com/rerun-io/rerun/pull/1828)
+- Depth cloud textures are now cached frame-to-frame [#1913](https://github.com/rerun-io/rerun/pull/1913)
+
+#### 🧑🏫 Examples
+- Add new `ARKitScenes` example [#1538](https://github.com/rerun-io/rerun/pull/1538) (thanks [@pablovela5620](https://github.com/pablovela5620)!)
+- New example code for Facebook research's `segment-anything` [#1788](https://github.com/rerun-io/rerun/pull/1788)
+- Add `minimal_options` example for Rust SDK [#1773](https://github.com/rerun-io/rerun/pull/1773) (thanks [@h3mosphere](https://github.com/h3mosphere)!)
+- Remove manual depth projection from `car` and `nyud` examples [#1869](https://github.com/rerun-io/rerun/pull/1869)
+- Always spawn instead of fork in multiprocessing example [#1922](https://github.com/rerun-io/rerun/pull/1922)
+- Add `--num-frames` arg to canny (webcam) example [#1923](https://github.com/rerun-io/rerun/pull/1923)
+- Add argument parsing to `rerun_demo` [#1925](https://github.com/rerun-io/rerun/pull/1925)
+- Join threads at end of `multithreading` example [#1934](https://github.com/rerun-io/rerun/pull/1934)
+
+#### 📚 Docs
+- Add `typing_extensions` to `requirements-doc.txt` [#1786](https://github.com/rerun-io/rerun/pull/1786)
+- Fix typos in notebook readme [#1852](https://github.com/rerun-io/rerun/pull/1852)
+- Update docs related to notebook [#1915](https://github.com/rerun-io/rerun/pull/1915)
+
+#### 🖼 UI Improvements
+- Hover rays for tracked 3D cameras [#1751](https://github.com/rerun-io/rerun/pull/1751)
+- Collapse space-view by default if there is only one child [#1762](https://github.com/rerun-io/rerun/pull/1762)
+- Option to show scene bounding box [#1770](https://github.com/rerun-io/rerun/pull/1770)
+- Assign default colors to class-ids when annotation context is missing [#1783](https://github.com/rerun-io/rerun/pull/1783)
+- Add Restart command and keyboard shortcut for moving time to start of timeline [#1802](https://github.com/rerun-io/rerun/pull/1802) (thanks [@h3mosphere](https://github.com/h3mosphere)!)
+- New option to disable persistent storage [#1825](https://github.com/rerun-io/rerun/pull/1825)
+- Show previews of colormaps when selecting them [#1846](https://github.com/rerun-io/rerun/pull/1846)
+- Smooth out scroll wheel input for camera zooming [#1920](https://github.com/rerun-io/rerun/pull/1920)
+
+#### 🤷♂️ Other Viewer Improvements
+- Change `EntityPathHash` to be 64 bit [#1723](https://github.com/rerun-io/rerun/pull/1723)
+- Central `GpuReadback` handling for re_viewer, experimental space view screenshots [#1717](https://github.com/rerun-io/rerun/pull/1717)
+- Readback depth from GPU picking [#1752](https://github.com/rerun-io/rerun/pull/1752)
+- Use GPU picking for points, streamline/share picking code some more [#1814](https://github.com/rerun-io/rerun/pull/1814)
+- Use GPU picking for line(like) primitives, fix `interactive` flags [#1829](https://github.com/rerun-io/rerun/pull/1829)
+- Use GPU colormapping when showing images in the GUI [#1865](https://github.com/rerun-io/rerun/pull/1865)
+
+#### 🕸️ Web
+- Make CI publish `latest` tagged web-viewer to `app.rerun.io` [#1725](https://github.com/rerun-io/rerun/pull/1725)
+- Implement `re_tuid::Tuid::random()` on web [#1796](https://github.com/rerun-io/rerun/pull/1796)
+- Refactor the relationship between the assorted web / websocket servers [#1844](https://github.com/rerun-io/rerun/pull/1844)
+- Notebooks: make `presentation_id` consistent and use data-attribute for rrd [#1881](https://github.com/rerun-io/rerun/pull/1881)
+- 2.5GB before GC kick in on web [#1944](https://github.com/rerun-io/rerun/pull/1944)
+
+#### 🎨 Renderer Improvements
+- GPU based picking with points [#1721](https://github.com/rerun-io/rerun/pull/1721)
+- improved renderer label handling [#1731](https://github.com/rerun-io/rerun/pull/1731)
+- Improved readback data handling [#1734](https://github.com/rerun-io/rerun/pull/1734)
+- GPU based mesh picking [#1737](https://github.com/rerun-io/rerun/pull/1737)
+- Improve dealing with raw buffers for texture read/write [#1744](https://github.com/rerun-io/rerun/pull/1744)
+- GPU colormapping, first step [#1835](https://github.com/rerun-io/rerun/pull/1835)
+- GPU tensor colormapping [#1841](https://github.com/rerun-io/rerun/pull/1841)
+- GPU picking for depth clouds [#1849](https://github.com/rerun-io/rerun/pull/1849)
+- Implement billinear filtering of textures [#1850](https://github.com/rerun-io/rerun/pull/1850) [#1859](https://github.com/rerun-io/rerun/pull/1859) [#1860](https://github.com/rerun-io/rerun/pull/1860)
+- Refactor: remove `GpuTexture2DHandle::invalid` [#1866](https://github.com/rerun-io/rerun/pull/1866)
+- Fix filtering artifact for non-color images [#1886](https://github.com/rerun-io/rerun/pull/1886)
+- Refactor: Add helper functions to `GpuTexture2DHandle` [#1900](https://github.com/rerun-io/rerun/pull/1900)
+
+#### 🛢 Datastore Improvements
+- Datastore: revamp bench suite [#1733](https://github.com/rerun-io/rerun/pull/1733)
+- Datastore revamp 1: new indexing model & core datastructures [#1727](https://github.com/rerun-io/rerun/pull/1727)
+- Datastore revamp 2: serialization & formatting [#1735](https://github.com/rerun-io/rerun/pull/1735)
+- Datastore revamp 3: efficient incremental stats [#1739](https://github.com/rerun-io/rerun/pull/1739)
+- Datastore revamp 4: sunset `MsgId` [#1785](https://github.com/rerun-io/rerun/pull/1785)
+- Datastore revamp 5: `DataStore::to_data_tables()` [#1791](https://github.com/rerun-io/rerun/pull/1791)
+- Datastore revamp 6: sunset `LogMsg` storage + save store to disk [#1795](https://github.com/rerun-io/rerun/pull/1795)
+- Datastore revamp 7: garbage collection [#1801](https://github.com/rerun-io/rerun/pull/1801)
+- Incremental metadata registry stats [#1833](https://github.com/rerun-io/rerun/pull/1833)
+
+#### ✨ Other Enhancement
+
+#### 🗣 Merged RFCs
+- RFC: datastore state of the union & end-to-end batching [#1610](https://github.com/rerun-io/rerun/pull/1610)
+
+#### 🧑💻 Dev-experience
+- Post-release cleanup [#1726](https://github.com/rerun-io/rerun/pull/1726)
+- Remove unnecessary dependencies [#1711](https://github.com/rerun-io/rerun/pull/1711) (thanks [@vsuryamurthy](https://github.com/vsuryamurthy)!)
+- Use copilot markers in PR template [#1784](https://github.com/rerun-io/rerun/pull/1784)
+- re_format: barebone support for custom formatting [#1776](https://github.com/rerun-io/rerun/pull/1776)
+- Refactor: Add new helper crate `re_log_encoding` [#1772](https://github.com/rerun-io/rerun/pull/1772)
+- `setup_web.sh` supports pacman package manager [#1797](https://github.com/rerun-io/rerun/pull/1797) (thanks [@urholaukkarinen](https://github.com/urholaukkarinen)!)
+- Add `rerun --strict`: crash if any warning or error is logged [#1812](https://github.com/rerun-io/rerun/pull/1812)
+- End-to-end testing of python logging -> store ingestion [#1817](https://github.com/rerun-io/rerun/pull/1817)
+- Fix e2e test on CI: Don't try to re-build `rerun-sdk` [#1821](https://github.com/rerun-io/rerun/pull/1821)
+- Install the rerun-sdk in CI using `--no-index` and split out linux wheel build to run first [#1838](https://github.com/rerun-io/rerun/pull/1838)
+- Remove more unused dependencies [#1863](https://github.com/rerun-io/rerun/pull/1863)
+- Improve end-to-end testing slightly [#1862](https://github.com/rerun-io/rerun/pull/1862)
+- Turn off benchmarks comment in each PR [#1872](https://github.com/rerun-io/rerun/pull/1872)
+- Fix double-negation in `scripts/run_python_e2e_test.py` [#1896](https://github.com/rerun-io/rerun/pull/1896)
+- Improve PR template with better comment, and no copilot by default [#1901](https://github.com/rerun-io/rerun/pull/1901)
+- Optimize `generate_changelog.py` [#1912](https://github.com/rerun-io/rerun/pull/1912)
+
+#### 🤷♂️ Other
+- Fix videos for GitHub in `CHANGELOG.md` [af7d3b192157f942e35f64d3561a9a8dbcc18bfa](https://github.com/rerun-io/rerun/commit/af7d3b192157f942e35f64d3561a9a8dbcc18bfa)
+- Don't run 3rd party bench suites on CI [#1787](https://github.com/rerun-io/rerun/pull/1787)
+- Remove `TensorTrait` [#1819](https://github.com/rerun-io/rerun/pull/1819)
+- Disable wheel tests for `x86_64-apple-darwin` [#1853](https://github.com/rerun-io/rerun/pull/1853)
+- Update `enumflags2` to non-yanked version [#1874](https://github.com/rerun-io/rerun/pull/1874)
+- Collect extra egui features into the main `Cargo.toml` [#1926](https://github.com/rerun-io/rerun/pull/1926)
+- `just rs-run-all` [b14087b40bd805c95f030a4c7d3fb7a0482e13f4](https://github.com/rerun-io/rerun/commit/b14087b40bd805c95f030a4c7d3fb7a0482e13f4)
+- `just py-run-all-{native|web|rrd}` [#1927](https://github.com/rerun-io/rerun/pull/1927)
+
## [0.4.0](https://github.com/rerun-io/rerun/compare/v0.3.1...v0.4.0) - Outlines, web viewer and performance improvements
https://user-images.githubusercontent.com/1220815/228241887-03b311e2-80e9-4541-9281-6d334a15ab04.mp4
-## Overview & Highlights
+### Overview & Highlights
* Add support for mesh vertex colors [#1671](https://github.com/rerun-io/rerun/pull/1671)
* Lower memory use [#1535](https://github.com/rerun-io/rerun/pull/1535)
* Improve garbage collection [#1560](https://github.com/rerun-io/rerun/pull/1560)
diff --git a/Cargo.lock b/Cargo.lock
index 60f09380c940..23241a28a3c6 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -4,9 +4,9 @@ version = 3
[[package]]
name = "ab_glyph"
-version = "0.2.18"
+version = "0.2.20"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4dcdbc68024b653943864d436fe8a24b028095bc1cf91a8926f8241e4aaffe59"
+checksum = "fe21446ad43aa56417a767f3e2f3d7c4ca522904de1dd640529a76e9c5c3b33c"
dependencies = [
"ab_glyph_rasterizer",
"owned_ttf_parser",
@@ -14,15 +14,15 @@ dependencies = [
[[package]]
name = "ab_glyph_rasterizer"
-version = "0.1.7"
+version = "0.1.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "330223a1aecc308757b9926e9391c9b47f8ef2dbd8aea9df88312aea18c5e8d6"
+checksum = "c71b1793ee61086797f5c80b6efa2b8ffa6d5dd703f118545808a7f2e27f7046"
[[package]]
name = "accesskit"
-version = "0.9.0"
+version = "0.10.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4803cf8c252f374ae6bfbb341e49e5a37f7601f2ce74a105927a663eba952c67"
+checksum = "704d532b1cd3d912bb37499c55a81ac748cc1afa737eedd100ba441acdd47d38"
dependencies = [
"enumn",
"serde",
@@ -30,9 +30,9 @@ dependencies = [
[[package]]
name = "addr2line"
-version = "0.17.0"
+version = "0.19.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b9ecd88a8c8378ca913a680cd98f0f13ac67383d35993f86c90a70e3f137816b"
+checksum = "a76fd60b23679b7d19bd066031410fb7e458ccc5e958eb5c325888ce4baedc97"
dependencies = [
"gimli",
]
@@ -56,9 +56,9 @@ dependencies = [
[[package]]
name = "ahash"
-version = "0.8.2"
+version = "0.8.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bf6ccdb167abbf410dcb915cabd428929d7f6a04980b54a11f26a39f1c7f7107"
+checksum = "2c99f64d1e06488f620f932677e24bc6e2897582980441ae90a671415bd7ec2f"
dependencies = [
"cfg-if",
"const-random",
@@ -79,12 +79,12 @@ dependencies = [
[[package]]
name = "android-activity"
-version = "0.4.0"
+version = "0.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4165a1aef703232031b40a6e8908c2f9e314d495f11aa7f98db75d39a497cc6a"
+checksum = "7c77a0045eda8b888c76ea473c2b0515ba6f471d318f8927c5c72240937035a6"
dependencies = [
"android-properties",
- "bitflags",
+ "bitflags 1.3.2",
"cc",
"jni-sys",
"libc",
@@ -116,18 +116,58 @@ version = "0.1.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4b46cbb362ab8752921c97e041f5e366ee6297bd428a31275b9fcf1e380f7299"
+[[package]]
+name = "anstream"
+version = "0.2.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "342258dd14006105c2b75ab1bd7543a03bdf0cfc94383303ac212a04939dff6f"
+dependencies = [
+ "anstyle",
+ "anstyle-parse",
+ "anstyle-wincon",
+ "concolor-override",
+ "concolor-query",
+ "is-terminal",
+ "utf8parse",
+]
+
+[[package]]
+name = "anstyle"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "23ea9e81bd02e310c216d080f6223c179012256e5151c41db88d12c88a1684d2"
+
+[[package]]
+name = "anstyle-parse"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a7d1bb534e9efed14f3e5f44e7dd1a4f709384023a4165199a4241e18dff0116"
+dependencies = [
+ "utf8parse",
+]
+
+[[package]]
+name = "anstyle-wincon"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c3127af6145b149f3287bb9a0d10ad9c5692dba8c53ad48285e5bec4063834fa"
+dependencies = [
+ "anstyle",
+ "windows-sys 0.45.0",
+]
+
[[package]]
name = "anyhow"
-version = "1.0.66"
+version = "1.0.70"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "216261ddc8289130e551ddcd5ce8a064710c0d064a4d2895c67151c92b5443f6"
+checksum = "7de8ce5e0f9f8d88245311066a578d72b7af3e7088f32783804676302df237e4"
[[package]]
name = "api_demo"
-version = "0.4.0"
+version = "0.6.0-alpha.0"
dependencies = [
"anyhow",
- "clap 4.1.4",
+ "clap 4.2.1",
"glam",
"itertools",
"ndarray",
@@ -170,9 +210,9 @@ checksum = "bf7d0a018de4f6aa429b9d33d69edf69072b1c5b1cb8d3e4a5f7ef898fc3eb76"
[[package]]
name = "arrayref"
-version = "0.3.6"
+version = "0.3.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a4c527152e37cf757a3f78aae5a06fbeefdb07ccc535c980a3208ee3060dd544"
+checksum = "6b4930d2cb77ce62f89ee5d5289b4ac049559b1c45539271f5ed4fdc7db34545"
[[package]]
name = "arrayvec"
@@ -196,7 +236,7 @@ version = "0.16.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7a4c5b03335bc1cb0fd9f5297f8fd3bbfd6fb04f3cb0bc7d6c91b7128cb8336a"
dependencies = [
- "ahash 0.8.2",
+ "ahash 0.8.3",
"arrow-format",
"bytemuck",
"chrono",
@@ -236,7 +276,7 @@ dependencies = [
"proc-macro-error",
"proc-macro2",
"quote",
- "syn 1.0.103",
+ "syn 1.0.109",
]
[[package]]
@@ -298,6 +338,21 @@ dependencies = [
"slab",
]
+[[package]]
+name = "async-global-executor"
+version = "2.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f1b6f5d7df27bd294849f8eec66ecfc63d11814df7a4f5d74168a2394467b776"
+dependencies = [
+ "async-channel",
+ "async-executor",
+ "async-io",
+ "async-lock",
+ "blocking",
+ "futures-lite",
+ "once_cell",
+]
+
[[package]]
name = "async-io"
version = "1.13.0"
@@ -312,7 +367,7 @@ dependencies = [
"log",
"parking",
"polling",
- "rustix 0.37.3",
+ "rustix",
"slab",
"socket2",
"waker-fn",
@@ -320,12 +375,11 @@ dependencies = [
[[package]]
name = "async-lock"
-version = "2.6.0"
+version = "2.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c8101efe8695a6c17e02911402145357e718ac92d3ff88ae8419e84b1707b685"
+checksum = "fa24f727524730b077666307f2734b4a1a1c57acb79193127dcc8914d5242dd7"
dependencies = [
"event-listener",
- "futures-lite",
]
[[package]]
@@ -336,52 +390,85 @@ checksum = "d7d78656ba01f1b93024b7c3a0467f1608e4be67d725749fdcd7d2c7678fd7a2"
dependencies = [
"proc-macro2",
"quote",
- "syn 1.0.103",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "async-std"
+version = "1.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62565bb4402e926b29953c785397c6dc0391b7b446e45008b0049eb43cec6f5d"
+dependencies = [
+ "async-channel",
+ "async-global-executor",
+ "async-io",
+ "async-lock",
+ "crossbeam-utils",
+ "futures-channel",
+ "futures-core",
+ "futures-io",
+ "futures-lite",
+ "gloo-timers",
+ "kv-log-macro",
+ "log",
+ "memchr",
+ "once_cell",
+ "pin-project-lite",
+ "pin-utils",
+ "slab",
+ "wasm-bindgen-futures",
]
[[package]]
name = "async-stream"
-version = "0.3.3"
+version = "0.3.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dad5c83079eae9969be7fadefe640a1c566901f05ff91ab221de4b6f68d9507e"
+checksum = "ad445822218ce64be7a341abfb0b1ea43b5c23aa83902542a4542e78309d8e5e"
dependencies = [
"async-stream-impl",
"futures-core",
+ "pin-project-lite",
]
[[package]]
name = "async-stream-impl"
-version = "0.3.3"
+version = "0.3.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "10f203db73a71dfa2fb6dd22763990fa26f3d2625a6da2da900d23b87d26be27"
+checksum = "e4655ae1a7b0cdf149156f780c5bf3f1352bc53cbd9e0a361a7ef7b22947e965"
dependencies = [
"proc-macro2",
"quote",
- "syn 1.0.103",
+ "syn 1.0.109",
]
[[package]]
name = "async-task"
-version = "4.3.0"
+version = "4.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7a40729d2133846d9ed0ea60a8b9541bccddab49cd30f0715a1da672fe9a2524"
+checksum = "ecc7ab41815b3c653ccd2978ec3255c81349336702dfdf62ee6f7069b12a3aae"
[[package]]
name = "async-trait"
-version = "0.1.66"
+version = "0.1.68"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b84f9ebcc6c1f5b8cb160f6990096a5c127f423fcb6e1ccc46c370cbdfb75dfc"
+checksum = "b9ccdd8f2a161be9bd5c023df56f1b2a0bd1d83872ae53b71a84a12c9bf6e842"
dependencies = [
"proc-macro2",
"quote",
- "syn 1.0.103",
+ "syn 2.0.12",
]
+[[package]]
+name = "atomic-waker"
+version = "1.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1181e1e0d1fce796a03db1ae795d67167da795f9cf4a39c37589e85ef57f26d3"
+
[[package]]
name = "atomic_refcell"
-version = "0.1.8"
+version = "0.1.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "73b5e5f48b927f04e952dedc932f31995a65a0bf65ec971c74436e51bf6e970d"
+checksum = "857253367827bd9d0fd973f0ef15506a96e79e41b0ad7aa691203a4e3214f6c8"
[[package]]
name = "atty"
@@ -408,9 +495,9 @@ checksum = "7b7e4c2464d97fe331d41de9d5db0def0a96f4d823b8b32a2efd503578988973"
[[package]]
name = "backtrace"
-version = "0.3.66"
+version = "0.3.67"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cab84319d616cfb654d03394f38ab7e6f0919e181b1b57e1fd15e7fb4077d9a7"
+checksum = "233d376d6d185f2a3093e58f283f60f880315b6c60075b01f36b3b85154564ca"
dependencies = [
"addr2line",
"cc",
@@ -467,6 +554,12 @@ version = "1.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+[[package]]
+name = "bitflags"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c70beb79cbb5ce9c4f8e20849978f34225931f665bb49efa6982875a4d5facb3"
+
[[package]]
name = "block"
version = "0.1.6"
@@ -475,9 +568,9 @@ checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a"
[[package]]
name = "block-buffer"
-version = "0.10.3"
+version = "0.10.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "69cce20737498f97b993470a6e536b8523f0af7892a4f928cceb1ac5e52ebe7e"
+checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71"
dependencies = [
"generic-array",
]
@@ -501,30 +594,45 @@ dependencies = [
"objc2-encode",
]
+[[package]]
+name = "blocking"
+version = "1.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "77231a1c8f801696fc0123ec6150ce92cffb8e164a02afb9c8ddee0e9b65ad65"
+dependencies = [
+ "async-channel",
+ "async-lock",
+ "async-task",
+ "atomic-waker",
+ "fastrand",
+ "futures-lite",
+ "log",
+]
+
[[package]]
name = "bumpalo"
-version = "3.11.1"
+version = "3.12.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "572f695136211188308f16ad2ca5c851a712c464060ae6974944458eb83880ba"
+checksum = "0d261e256854913907f67ed06efbc3338dfe6179796deefc1ff763fc1aee5535"
[[package]]
name = "bytemuck"
-version = "1.12.3"
+version = "1.13.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "aaa3a8d9a1ca92e282c96a32d6511b695d7d994d1d102ba85d279f9b2756947f"
+checksum = "17febce684fd15d89027105661fec94afb475cb995fbc59d2865198446ba2eea"
dependencies = [
"bytemuck_derive",
]
[[package]]
name = "bytemuck_derive"
-version = "1.3.0"
+version = "1.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5fe233b960f12f8007e3db2d136e3cb1c291bfd7396e384ee76025fc1a3932b4"
+checksum = "fdde5c9cd29ebd706ce1b35600920a33550e402fc998a2e53ad3b42c3c47a192"
dependencies = [
"proc-macro2",
"quote",
- "syn 1.0.103",
+ "syn 2.0.12",
]
[[package]]
@@ -535,18 +643,18 @@ checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610"
[[package]]
name = "bytes"
-version = "1.3.0"
+version = "1.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dfb24e866b15a1af2a1b663f10c6b6b8f397a84aadb828f12e5b289ec23a3a3c"
+checksum = "89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be"
[[package]]
name = "calloop"
-version = "0.10.2"
+version = "0.10.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "595eb0438b3c6d262395fe30e6de9a61beb57ea56290b00a07f227fe6e20cbf2"
+checksum = "1a59225be45a478d772ce015d9743e49e92798ece9e34eda9a6aa2a6a7f40192"
dependencies = [
"log",
- "nix 0.24.2",
+ "nix 0.25.1",
"slotmap",
"thiserror",
"vec_map",
@@ -554,9 +662,9 @@ dependencies = [
[[package]]
name = "camino"
-version = "1.1.1"
+version = "1.1.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "88ad0e1e3e88dd237a156ab9f571021b8a158caa0ae44b1968a241efb5144c1e"
+checksum = "c530edf18f37068ac2d977409ed5cd50d53d73bc653c7647b48eb78976ac9ae2"
dependencies = [
"serde",
]
@@ -572,20 +680,21 @@ dependencies = [
[[package]]
name = "cargo-run-wasm"
-version = "0.2.0"
+version = "0.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "611b811fad83eebfcdcf47ae1e425c82d1249608bc571d537448d706be08cf27"
+checksum = "cc1e37cf14ef470ed74ec2a8b95e51b8623bcf6f76d24f233ebaeb209f766230"
dependencies = [
"devserver_lib",
"pico-args",
+ "serde_json",
"wasm-bindgen-cli-support",
]
[[package]]
name = "cargo_metadata"
-version = "0.15.2"
+version = "0.15.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "982a0cf6a99c350d7246035613882e376d58cebe571785abc5da4f648d53ac0a"
+checksum = "08a1ec454bc3eead8719cb56e15dbbfecdbc14e4b3a3ae4936cc6e31f5fc0d07"
dependencies = [
"camino",
"cargo-platform",
@@ -603,9 +712,9 @@ checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5"
[[package]]
name = "cc"
-version = "1.0.77"
+version = "1.0.79"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e9f73505338f7d905b19d18738976aae232eb46b8efc15554ffc56deb5d9ebe4"
+checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f"
dependencies = [
"jobserver",
]
@@ -630,15 +739,15 @@ checksum = "fd16c4719339c4530435d38e511904438d07cce7950afa3718a84ac36c10e89e"
[[package]]
name = "chrono"
-version = "0.4.23"
+version = "0.4.24"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "16b0a3d9ed01224b22057780a37bb8c5dbfe1be8ba48678e7bf57ec4b385411f"
+checksum = "4e3c5919066adf22df73762e50cffcde3a758f2a848b113b586d1f86728b673b"
dependencies = [
"iana-time-zone",
"js-sys",
"num-integer",
"num-traits",
- "time 0.1.44",
+ "time 0.1.45",
"wasm-bindgen",
"winapi",
]
@@ -676,7 +785,7 @@ version = "3.2.23"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "71655c45cb9845d3270c9d6df84ebe72b4dad3c2ba3f7023ad47c144e4e473a5"
dependencies = [
- "bitflags",
+ "bitflags 1.3.2",
"clap_lex 0.2.4",
"indexmap",
"textwrap",
@@ -684,30 +793,38 @@ dependencies = [
[[package]]
name = "clap"
-version = "4.1.4"
+version = "4.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f13b9c79b5d1dd500d20ef541215a6423c75829ef43117e1b4d17fd8af0b5d76"
+checksum = "046ae530c528f252094e4a77886ee1374437744b2bff1497aa898bbddbbb29b3"
dependencies = [
- "bitflags",
+ "clap_builder",
"clap_derive",
- "clap_lex 0.3.0",
- "is-terminal",
"once_cell",
+]
+
+[[package]]
+name = "clap_builder"
+version = "4.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "223163f58c9a40c3b0a43e1c4b50a9ce09f007ea2cb1ec258a687945b4b7929f"
+dependencies = [
+ "anstream",
+ "anstyle",
+ "bitflags 1.3.2",
+ "clap_lex 0.4.1",
"strsim",
- "termcolor",
]
[[package]]
name = "clap_derive"
-version = "4.1.0"
+version = "4.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "684a277d672e91966334af371f1a7b5833f9aa00b07c84e92fbce95e00208ce8"
+checksum = "3f9644cd56d6b87dbe899ef8b053e331c0637664e9e21a33dfcdc36093f5c5c4"
dependencies = [
- "heck 0.4.0",
- "proc-macro-error",
+ "heck 0.4.1",
"proc-macro2",
"quote",
- "syn 1.0.103",
+ "syn 2.0.12",
]
[[package]]
@@ -721,12 +838,9 @@ dependencies = [
[[package]]
name = "clap_lex"
-version = "0.3.0"
+version = "0.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0d4198f73e42b4936b35b5bb248d81d2b595ecb170da0bac7655c54eedfa8da8"
-dependencies = [
- "os_str_bytes",
-]
+checksum = "8a2dd5a6fe8c6e3502f568a6353e5273bbb15193ad9a89e457b9970798efbea1"
[[package]]
name = "clean-path"
@@ -736,9 +850,9 @@ checksum = "aaa6b4b263a5d737e9bf6b7c09b72c41a5480aec4d7219af827f6564e950b6a5"
[[package]]
name = "clipboard-win"
-version = "4.4.2"
+version = "4.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c4ab1b92798304eedc095b53942963240037c0516452cb11aeba709d420b2219"
+checksum = "7191c27c2357d9b7ef96baac1773290d4ca63b24205b82a3fd8a0637afcf0362"
dependencies = [
"error-code",
"str-buf",
@@ -751,7 +865,7 @@ version = "0.24.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f425db7937052c684daec3bd6375c8abe2d146dca4b8b143d6db777c39138f3a"
dependencies = [
- "bitflags",
+ "bitflags 1.3.2",
"block",
"cocoa-foundation",
"core-foundation",
@@ -763,11 +877,11 @@ dependencies = [
[[package]]
name = "cocoa-foundation"
-version = "0.1.0"
+version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7ade49b65d560ca58c403a479bb396592b155c0185eada742ee323d1d68d6318"
+checksum = "931d3837c286f56e3c58423ce4eba12d08db2374461a785c86f672b08b5650d6"
dependencies = [
- "bitflags",
+ "bitflags 1.3.2",
"block",
"core-foundation",
"core-graphics-types",
@@ -831,26 +945,40 @@ dependencies = [
"unicode-width",
]
+[[package]]
+name = "concolor-override"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a855d4a1978dc52fb0536a04d384c2c0c1aa273597f08b77c8c4d3b2eec6037f"
+
+[[package]]
+name = "concolor-query"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "88d11d52c3d7ca2e6d0040212be9e4dbbcd78b6447f535b6b561f449427944cf"
+dependencies = [
+ "windows-sys 0.45.0",
+]
+
[[package]]
name = "concurrent-queue"
-version = "2.0.0"
+version = "2.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bd7bef69dc86e3c610e4e7aed41035e2a7ed12e72dd7530f61327a6579a4390b"
+checksum = "c278839b831783b70278b14df4d45e1beb1aad306c07bb796637de9a0e323e8e"
dependencies = [
"crossbeam-utils",
]
[[package]]
name = "console"
-version = "0.15.2"
+version = "0.15.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c050367d967ced717c04b65d8c619d863ef9292ce0c5760028655a2fb298718c"
+checksum = "c3d79fbe8970a77e3e34151cc13d3b3e248aa0faaecb9f6091fa07ebefe5ad60"
dependencies = [
"encode_unicode",
"lazy_static",
"libc",
- "terminal_size",
- "winapi",
+ "windows-sys 0.42.0",
]
[[package]]
@@ -907,7 +1035,7 @@ version = "0.22.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2581bbab3b8ffc6fcbd550bf46c355135d16e9ff2a6ea032ad6b9bf1d7efe4fb"
dependencies = [
- "bitflags",
+ "bitflags 1.3.2",
"core-foundation",
"core-graphics-types",
"foreign-types",
@@ -920,7 +1048,7 @@ version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3a68b68b3446082644c91ac778bf50cd4104bfb002b5a6a7c44cca5a2c70788b"
dependencies = [
- "bitflags",
+ "bitflags 1.3.2",
"core-foundation",
"foreign-types",
"libc",
@@ -928,9 +1056,9 @@ dependencies = [
[[package]]
name = "cpufeatures"
-version = "0.2.5"
+version = "0.2.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "28d997bd5e24a5928dd43e46dc529867e207907fe0b239c3477d924f7f2ca320"
+checksum = "280a9f2d8b3a38871a3c8a46fb80db65e5e5ed97da80c4d08bf27fb63e35e181"
dependencies = [
"libc",
]
@@ -996,9 +1124,9 @@ dependencies = [
[[package]]
name = "crossbeam-channel"
-version = "0.5.8"
+version = "0.5.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a33c2bf77f2df06183c3aa30d1e96c0695a313d4f9c453cc3762a6db39f99200"
+checksum = "cf2b3e8478797446514c91ef04bafcb59faba183e621ad488df88983cc14128c"
dependencies = [
"cfg-if",
"crossbeam-utils",
@@ -1006,9 +1134,9 @@ dependencies = [
[[package]]
name = "crossbeam-deque"
-version = "0.8.2"
+version = "0.8.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "715e8152b692bba2d374b53d4875445368fdf21a94751410af607a5ac677d1fc"
+checksum = "ce6fd6f855243022dcecf8702fef0c297d4338e226845fe067f6341ad9fa0cef"
dependencies = [
"cfg-if",
"crossbeam-epoch",
@@ -1017,14 +1145,14 @@ dependencies = [
[[package]]
name = "crossbeam-epoch"
-version = "0.9.13"
+version = "0.9.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "01a9af1f4c2ef74bb8aa1f7e19706bc72d03598c8a570bb5de72243c7a9d9d5a"
+checksum = "46bd5f3f85273295a9d14aedfb86f6aadbff6d8f5295c4a9edb08e819dcf5695"
dependencies = [
"autocfg",
"cfg-if",
"crossbeam-utils",
- "memoffset 0.7.1",
+ "memoffset 0.8.0",
"scopeguard",
]
@@ -1040,9 +1168,9 @@ dependencies = [
[[package]]
name = "crossbeam-utils"
-version = "0.8.14"
+version = "0.8.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4fb766fa798726286dbbb842f174001dab8abc7b627a1dd86e0b7222a95d929f"
+checksum = "3c063cd8cc95f5c377ed0d4b49a4b21f632396ff690e8470c29b3359b346984b"
dependencies = [
"cfg-if",
]
@@ -1053,7 +1181,7 @@ version = "0.25.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e64e6c0fbe2c17357405f7c758c1ef960fce08bdfb2c03d88d2a18d7e09c4b67"
dependencies = [
- "bitflags",
+ "bitflags 1.3.2",
"crossterm_winapi",
"libc",
"mio",
@@ -1089,26 +1217,30 @@ dependencies = [
]
[[package]]
-name = "ctrlc"
-version = "3.2.2"
+name = "ctor"
+version = "0.1.26"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b37feaa84e6861e00a1f5e5aa8da3ee56d605c9992d33e082786754828e20865"
+checksum = "6d2301688392eb071b0bf1a37be05c469d3cc4dbbd95df672fe28ab021e6a096"
dependencies = [
- "nix 0.24.2",
- "winapi",
+ "quote",
+ "syn 1.0.109",
]
[[package]]
-name = "cty"
-version = "0.2.2"
+name = "ctrlc"
+version = "3.2.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b365fabc795046672053e29c954733ec3b05e4be654ab130fe8f1f94d7051f35"
+checksum = "bbcf33c2a618cbe41ee43ae6e9f2e48368cd9f9db2896f10167d8d762679f639"
+dependencies = [
+ "nix 0.26.2",
+ "windows-sys 0.45.0",
+]
[[package]]
name = "cxx"
-version = "1.0.82"
+version = "1.0.94"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d4a41a86530d0fe7f5d9ea779916b7cadd2d4f9add748b99c2c029cbbdfaf453"
+checksum = "f61f1b6389c3fe1c316bf8a4dccc90a38208354b330925bce1f74a6c4756eb93"
dependencies = [
"cc",
"cxxbridge-flags",
@@ -1118,9 +1250,9 @@ dependencies = [
[[package]]
name = "cxx-build"
-version = "1.0.82"
+version = "1.0.94"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "06416d667ff3e3ad2df1cd8cd8afae5da26cf9cec4d0825040f88b5ca659a2f0"
+checksum = "12cee708e8962df2aeb38f594aae5d827c022b6460ac71a7a3e2c3c2aae5a07b"
dependencies = [
"cc",
"codespan-reporting",
@@ -1128,42 +1260,41 @@ dependencies = [
"proc-macro2",
"quote",
"scratch",
- "syn 1.0.103",
+ "syn 2.0.12",
]
[[package]]
name = "cxxbridge-flags"
-version = "1.0.82"
+version = "1.0.94"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "820a9a2af1669deeef27cb271f476ffd196a2c4b6731336011e0ba63e2c7cf71"
+checksum = "7944172ae7e4068c533afbb984114a56c46e9ccddda550499caa222902c7f7bb"
[[package]]
name = "cxxbridge-macro"
-version = "1.0.82"
+version = "1.0.94"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a08a6e2fcc370a089ad3b4aaf54db3b1b4cee38ddabce5896b33eb693275f470"
+checksum = "2345488264226bf682893e25de0769f3360aac9957980ec49361b083ddaa5bc5"
dependencies = [
"proc-macro2",
"quote",
- "syn 1.0.103",
+ "syn 2.0.12",
]
[[package]]
name = "d3d12"
version = "0.6.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d8f0de2f5a8e7bd4a9eec0e3c781992a4ce1724f68aec7d7a3715344de8b39da"
+source = "git+https://github.com/gfx-rs/d3d12-rs?rev=b940b1d71#b940b1d71ab7083ae80eec697872672dc1f2bd32"
dependencies = [
- "bitflags",
+ "bitflags 1.3.2",
"libloading",
"winapi",
]
[[package]]
name = "darling"
-version = "0.14.2"
+version = "0.14.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b0dd3cd20dc6b5a876612a6e5accfe7f3dd883db6d07acfbf14c128f61550dfa"
+checksum = "7b750cb3417fd1b327431a470f388520309479ab0bf5e323505daf0290cd3850"
dependencies = [
"darling_core",
"darling_macro",
@@ -1171,26 +1302,26 @@ dependencies = [
[[package]]
name = "darling_core"
-version = "0.14.2"
+version = "0.14.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a784d2ccaf7c98501746bf0be29b2022ba41fd62a2e622af997a03e9f972859f"
+checksum = "109c1ca6e6b7f82cc233a97004ea8ed7ca123a9af07a8230878fcfda9b158bf0"
dependencies = [
"fnv",
"ident_case",
"proc-macro2",
"quote",
- "syn 1.0.103",
+ "syn 1.0.109",
]
[[package]]
name = "darling_macro"
-version = "0.14.2"
+version = "0.14.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7618812407e9402654622dd402b0a89dff9ba93badd6540781526117b92aab7e"
+checksum = "a4aab4dbc9f7611d8b55048a3a16d2d010c2c8334e46304b40ac1cc14bf3b48e"
dependencies = [
"darling_core",
"quote",
- "syn 1.0.103",
+ "syn 1.0.109",
]
[[package]]
@@ -1201,14 +1332,14 @@ checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b"
dependencies = [
"proc-macro2",
"quote",
- "syn 1.0.103",
+ "syn 1.0.109",
]
[[package]]
name = "devserver_lib"
-version = "0.4.1"
+version = "0.4.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8fb4b71acc1405be2431a93892a79a0d82ed5ba6885649ddbdfc62caa4d67b1c"
+checksum = "edf215dbb8cb1409cca7645aaed35f9e39fb0a21855bba1ac48bc0334903bf66"
[[package]]
name = "digest"
@@ -1278,7 +1409,7 @@ dependencies = [
[[package]]
name = "dna"
-version = "0.4.0"
+version = "0.6.0-alpha.0"
dependencies = [
"itertools",
"rand",
@@ -1287,9 +1418,9 @@ dependencies = [
[[package]]
name = "document-features"
-version = "0.2.6"
+version = "0.2.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c3267e1ade4f1f6ddd35fed44a04b6514e244ffeda90c6a14a9ee30f9c9fd7a1"
+checksum = "e493c573fce17f00dcab13b6ac057994f3ce17d1af4dc39bfd482b83c6eb6157"
dependencies = [
"litrs",
]
@@ -1302,15 +1433,14 @@ checksum = "9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650"
[[package]]
name = "dyn-clone"
-version = "1.0.9"
+version = "1.0.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4f94fa09c2aeea5b8839e414b7b841bf429fd25b9c522116ac97ee87856d88b2"
+checksum = "68b0cf012f1230e43cd00ebb729c6bb58707ecfa8ad08b52ef3a4ccd2697fc30"
[[package]]
name = "ecolor"
version = "0.21.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1f99fe3cac305af9d6d92971af60d0f7ea4d783201ef1673571567b6699964d9"
+source = "git+https://github.com/emilk/egui?rev=f76eefb98d23cbf71989255aafe75a07d343f6ed#f76eefb98d23cbf71989255aafe75a07d343f6ed"
dependencies = [
"bytemuck",
"serde",
@@ -1319,16 +1449,19 @@ dependencies = [
[[package]]
name = "eframe"
version = "0.21.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3df3ce60931e5f2d83bab4484d1a283908534d5308cc6b0c5c22c59cd15ee7cc"
+source = "git+https://github.com/emilk/egui?rev=f76eefb98d23cbf71989255aafe75a07d343f6ed#f76eefb98d23cbf71989255aafe75a07d343f6ed"
dependencies = [
"bytemuck",
+ "cocoa",
"directories-next",
"egui",
"egui-wgpu",
"egui-winit",
"egui_glow",
+ "image",
"js-sys",
+ "log",
+ "objc",
"percent-encoding",
"pollster",
"puffin",
@@ -1336,39 +1469,38 @@ dependencies = [
"ron",
"serde",
"thiserror",
- "tracing",
"wasm-bindgen",
"wasm-bindgen-futures",
"web-sys",
"wgpu",
+ "winapi",
"winit",
]
[[package]]
name = "egui"
version = "0.21.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6412a21e0bde7c0918f7fb44bbbb86b5e1f88e63c026a4e747cc7af02f76dfbe"
+source = "git+https://github.com/emilk/egui?rev=f76eefb98d23cbf71989255aafe75a07d343f6ed#f76eefb98d23cbf71989255aafe75a07d343f6ed"
dependencies = [
"accesskit",
- "ahash 0.8.2",
+ "ahash 0.8.3",
"epaint",
+ "log",
"nohash-hasher",
"ron",
"serde",
- "tracing",
]
[[package]]
name = "egui-wgpu"
version = "0.21.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1678d8f30181193e78c15dddae16e6027c6058fdda9631950ade511b8a4b26f5"
+source = "git+https://github.com/emilk/egui?rev=f76eefb98d23cbf71989255aafe75a07d343f6ed#f76eefb98d23cbf71989255aafe75a07d343f6ed"
dependencies = [
"bytemuck",
"epaint",
+ "log",
"puffin",
- "tracing",
+ "thiserror",
"type-map",
"wgpu",
"winit",
@@ -1377,26 +1509,25 @@ dependencies = [
[[package]]
name = "egui-winit"
version = "0.21.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ab43597ba41f0ce39a364ad83185594578bfd8b3409b99dbcbb01df23afc3dbb"
+source = "git+https://github.com/emilk/egui?rev=f76eefb98d23cbf71989255aafe75a07d343f6ed#f76eefb98d23cbf71989255aafe75a07d343f6ed"
dependencies = [
- "android-activity",
"arboard",
"egui",
"instant",
+ "log",
"puffin",
+ "raw-window-handle",
"serde",
"smithay-clipboard",
- "tracing",
"webbrowser",
"winit",
]
[[package]]
name = "egui_dock"
-version = "0.4.0"
+version = "0.4.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6f86bdfe987f753ffcdf896932f09babfc63580b21e1899c304166f0befc85c8"
+checksum = "be7e6eb63cb936413bd2a4f54be4a9ef53a48252f25864f5f946d4954d7332bd"
dependencies = [
"egui",
"serde",
@@ -1405,27 +1536,25 @@ dependencies = [
[[package]]
name = "egui_extras"
version = "0.21.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8f051342e97dfa2445107cb7d2e720617f5c840199b5cb4fe0ffcf481fcf5cce"
+source = "git+https://github.com/emilk/egui?rev=f76eefb98d23cbf71989255aafe75a07d343f6ed#f76eefb98d23cbf71989255aafe75a07d343f6ed"
dependencies = [
"egui",
+ "log",
"serde",
- "tracing",
]
[[package]]
name = "egui_glow"
version = "0.21.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8257332fb168a965b3dca81d6a344e053153773c889cabdba0b3b76f1629ae81"
+source = "git+https://github.com/emilk/egui?rev=f76eefb98d23cbf71989255aafe75a07d343f6ed#f76eefb98d23cbf71989255aafe75a07d343f6ed"
dependencies = [
"bytemuck",
"egui",
"egui-winit",
"glow",
+ "log",
"memoffset 0.6.5",
"puffin",
- "tracing",
"wasm-bindgen",
"web-sys",
]
@@ -1445,15 +1574,14 @@ dependencies = [
[[package]]
name = "either"
-version = "1.8.0"
+version = "1.8.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "90e5c1c8368803113bf0c9584fc495a58b86dc8a29edbf8fe877d21d9507e797"
+checksum = "7fcaabb2fef8c910e7f4c7ce9f67a1283a1715879a7c230ca9d6d1ae31f16d91"
[[package]]
name = "emath"
version = "0.21.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b8ecd80612937e0267909d5351770fe150004e24dab93954f69ca62eecd3f77e"
+source = "git+https://github.com/emilk/egui?rev=f76eefb98d23cbf71989255aafe75a07d343f6ed#f76eefb98d23cbf71989255aafe75a07d343f6ed"
dependencies = [
"bytemuck",
"serde",
@@ -1483,18 +1611,18 @@ checksum = "5e9a1f9f7d83e59740248a6e14ecf93929ade55027844dfcea78beafccc15745"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.15",
+ "syn 2.0.12",
]
[[package]]
name = "enumn"
-version = "0.1.6"
+version = "0.1.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e88bcb3a067a6555d577aba299e75eff9942da276e6506fc6274327daa026132"
+checksum = "48016319042fb7c87b78d2993084a831793a897a5cd1a2a67cab9d1eeb4b7d76"
dependencies = [
"proc-macro2",
"quote",
- "syn 1.0.103",
+ "syn 2.0.12",
]
[[package]]
@@ -1515,7 +1643,7 @@ dependencies = [
"darling",
"proc-macro2",
"quote",
- "syn 1.0.103",
+ "syn 1.0.109",
]
[[package]]
@@ -1534,15 +1662,15 @@ dependencies = [
[[package]]
name = "epaint"
version = "0.21.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "12e78b5c58a1f7f621f9d546add2adce20636422c9b251e29f749e8a2f713c95"
+source = "git+https://github.com/emilk/egui?rev=f76eefb98d23cbf71989255aafe75a07d343f6ed#f76eefb98d23cbf71989255aafe75a07d343f6ed"
dependencies = [
"ab_glyph",
- "ahash 0.8.2",
+ "ahash 0.8.3",
"atomic_refcell",
"bytemuck",
"ecolor",
"emath",
+ "log",
"nohash-hasher",
"parking_lot 0.12.1",
"serde",
@@ -1558,21 +1686,10 @@ dependencies = [
"proc-macro2",
"quote",
"rustversion",
- "syn 1.0.103",
+ "syn 1.0.109",
"synstructure",
]
-[[package]]
-name = "errno"
-version = "0.2.8"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f639046355ee4f37944e44f60642c6f3a7efa3cf6b78c78a0d989a8ce6c396a1"
-dependencies = [
- "errno-dragonfly",
- "libc",
- "winapi",
-]
-
[[package]]
name = "errno"
version = "0.3.0"
@@ -1637,30 +1754,30 @@ dependencies = [
[[package]]
name = "fastrand"
-version = "1.8.0"
+version = "1.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a7a407cfaa3385c4ae6b23e84623d48c2798d06e3e6a1878f7f59f17b3f86499"
+checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be"
dependencies = [
"instant",
]
[[package]]
name = "filetime"
-version = "0.2.18"
+version = "0.2.20"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4b9663d381d07ae25dc88dbdf27df458faa83a9b25336bcac83d5e452b5fc9d3"
+checksum = "8a3de6e8d11b22ff9edc6d916f890800597d60f8b2da1caf2955c274638d6412"
dependencies = [
"cfg-if",
"libc",
"redox_syscall 0.2.16",
- "windows-sys 0.42.0",
+ "windows-sys 0.45.0",
]
[[package]]
name = "fixed"
-version = "1.20.0"
+version = "1.23.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "418922d2c280b8c68f82699494cc8c48f392233233a9a8b9a48a57a36c0ad0ef"
+checksum = "79386fdcec5e0fde91b1a6a5bcd89677d1f9304f7f986b154a1b9109038854d9"
dependencies = [
"az",
"bytemuck",
@@ -1677,9 +1794,9 @@ checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80"
[[package]]
name = "flate2"
-version = "1.0.24"
+version = "1.0.25"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f82b0f4c27ad9f8bfd1f3208d882da2b09c301bc1c828fd3a00d0216d2fbbff6"
+checksum = "a8a2db397cb1c8772f31494cb8917e48cd1e64f0fa7efac59fbd741a0a8ce841"
dependencies = [
"crc32fast",
"miniz_oxide",
@@ -1732,9 +1849,9 @@ dependencies = [
[[package]]
name = "futures"
-version = "0.3.25"
+version = "0.3.28"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "38390104763dc37a5145a53c29c63c1290b5d316d6086ec32c293f6736051bb0"
+checksum = "23342abe12aba583913b2e62f22225ff9c950774065e4bfb61a19cd9770fec40"
dependencies = [
"futures-channel",
"futures-core",
@@ -1747,9 +1864,9 @@ dependencies = [
[[package]]
name = "futures-channel"
-version = "0.3.25"
+version = "0.3.28"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "52ba265a92256105f45b719605a571ffe2d1f0fea3807304b522c1d778f79eed"
+checksum = "955518d47e09b25bbebc7a18df10b81f0c766eaf4c4f1cccef2fca5f2a4fb5f2"
dependencies = [
"futures-core",
"futures-sink",
@@ -1757,15 +1874,15 @@ dependencies = [
[[package]]
name = "futures-core"
-version = "0.3.25"
+version = "0.3.28"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "04909a7a7e4633ae6c4a9ab280aeb86da1236243a77b694a49eacd659a4bd3ac"
+checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c"
[[package]]
name = "futures-executor"
-version = "0.3.25"
+version = "0.3.28"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7acc85df6714c176ab5edf386123fafe217be88c0840ec11f199441134a074e2"
+checksum = "ccecee823288125bd88b4d7f565c9e58e41858e47ab72e8ea2d64e93624386e0"
dependencies = [
"futures-core",
"futures-task",
@@ -1774,9 +1891,9 @@ dependencies = [
[[package]]
name = "futures-io"
-version = "0.3.25"
+version = "0.3.28"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "00f5fb52a06bdcadeb54e8d3671f8888a39697dcb0b81b23b55174030427f4eb"
+checksum = "4fff74096e71ed47f8e023204cfd0aa1289cd54ae5430a9523be060cdb849964"
[[package]]
name = "futures-lite"
@@ -1795,32 +1912,32 @@ dependencies = [
[[package]]
name = "futures-macro"
-version = "0.3.25"
+version = "0.3.28"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bdfb8ce053d86b91919aad980c220b1fb8401a9394410e1c289ed7e66b61835d"
+checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72"
dependencies = [
"proc-macro2",
"quote",
- "syn 1.0.103",
+ "syn 2.0.12",
]
[[package]]
name = "futures-sink"
-version = "0.3.25"
+version = "0.3.28"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "39c15cf1a4aa79df40f1bb462fb39676d0ad9e366c2a33b590d7c66f4f81fcf9"
+checksum = "f43be4fe21a13b9781a69afa4985b0f6ee0e1afab2c6f454a8cf30e2b2237b6e"
[[package]]
name = "futures-task"
-version = "0.3.25"
+version = "0.3.28"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2ffb393ac5d9a6eaa9d3fdf37ae2776656b706e200c8e16b1bdb227f5198e6ea"
+checksum = "76d3d132be6c0e6aa1534069c705a74a5997a356c0dc2f86a47765e5617c5b65"
[[package]]
name = "futures-util"
-version = "0.3.25"
+version = "0.3.28"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "197676987abd2f9cadff84926f410af1c183608d36641465df73ae8211dc65d6"
+checksum = "26b01e40b772d54cf6c6d721c1d1abd0647a0106a12ecaa1c186273392a69533"
dependencies = [
"futures-channel",
"futures-core",
@@ -1834,20 +1951,11 @@ dependencies = [
"slab",
]
-[[package]]
-name = "fxhash"
-version = "0.2.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c"
-dependencies = [
- "byteorder",
-]
-
[[package]]
name = "generic-array"
-version = "0.14.6"
+version = "0.14.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bff49e947297f3312447abdca79f45f4738097cc82b06e72054d2223f601f1b9"
+checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a"
dependencies = [
"typenum",
"version_check",
@@ -1878,9 +1986,9 @@ dependencies = [
[[package]]
name = "gimli"
-version = "0.26.2"
+version = "0.27.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "22030e2c5a68ec659fde1e949a745124b48e6fa8b045b7ed5bd1fe4ccc5c4e5d"
+checksum = "ad0a93d233ebf96623465aad4046a8d3aa4da22d4f4beba5388838c8a434bbb4"
[[package]]
name = "glam"
@@ -1899,11 +2007,23 @@ version = "0.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b"
+[[package]]
+name = "gloo-timers"
+version = "0.2.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9b995a66bb87bebce9a0f4a95aed01daca4872c050bfcb21653361c03bc35e5c"
+dependencies = [
+ "futures-channel",
+ "futures-core",
+ "js-sys",
+ "wasm-bindgen",
+]
+
[[package]]
name = "glow"
-version = "0.12.0"
+version = "0.12.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8edf6019dff2d92ad27c1e3ff82ad50a0aea5b01370353cc928bfdc33e95925c"
+checksum = "4e007a07a24de5ecae94160f141029e9a347282cfe25d1d58d85d845cf3130f1"
dependencies = [
"js-sys",
"slotmap",
@@ -1934,7 +2054,7 @@ dependencies = [
"inflections",
"proc-macro2",
"quote",
- "syn 1.0.103",
+ "syn 1.0.109",
]
[[package]]
@@ -1955,7 +2075,7 @@ version = "0.5.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7fc59e5f710e310e76e6707f86c561dd646f69a8876da9131703b2f717de818d"
dependencies = [
- "bitflags",
+ "bitflags 1.3.2",
"gpu-alloc-types",
]
@@ -1965,7 +2085,7 @@ version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "54804d0d6bc9d7f26db4eaec1ad10def69b599315f487d32c334a80d1efe67a5"
dependencies = [
- "bitflags",
+ "bitflags 1.3.2",
]
[[package]]
@@ -1978,7 +2098,7 @@ dependencies = [
"log",
"thiserror",
"winapi",
- "windows",
+ "windows 0.44.0",
]
[[package]]
@@ -1987,7 +2107,7 @@ version = "0.2.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0b0c02e1ba0bdb14e965058ca34e09c020f8e507a760df1121728e0aef68d57a"
dependencies = [
- "bitflags",
+ "bitflags 1.3.2",
"gpu-descriptor-types",
"hashbrown 0.12.3",
]
@@ -1998,14 +2118,14 @@ version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "363e3677e55ad168fef68cf9de3a4a310b53124c5e784c53a1d70e92d23f2126"
dependencies = [
- "bitflags",
+ "bitflags 1.3.2",
]
[[package]]
name = "h2"
-version = "0.3.15"
+version = "0.3.18"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5f9f29bc9dda355256b2916cf526ab02ce0aeaaaf2bad60d65ef3f12f11dd0f4"
+checksum = "17f8a914c2987b688368b5138aa05321db91f4090cf26118185672ad588bce21"
dependencies = [
"bytes",
"fnv",
@@ -2054,21 +2174,21 @@ dependencies = [
[[package]]
name = "hashbrown"
-version = "0.13.1"
+version = "0.13.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "33ff8ae62cd3a9102e5637afc8452c55acf3844001bd5374e0b0bd7b6616c038"
+checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e"
dependencies = [
- "ahash 0.8.2",
+ "ahash 0.8.3",
"rayon",
]
[[package]]
name = "hassle-rs"
-version = "0.9.0"
+version = "0.10.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "90601c6189668c7345fc53842cb3f3a3d872203d523be1b3cb44a36a3e62fb85"
+checksum = "1397650ee315e8891a0df210707f0fc61771b0cc518c3023896064c5407cb3b0"
dependencies = [
- "bitflags",
+ "bitflags 1.3.2",
"com-rs",
"libc",
"libloading",
@@ -2088,9 +2208,9 @@ dependencies = [
[[package]]
name = "heck"
-version = "0.4.0"
+version = "0.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2540771e65fc8cb83cd6e8a237f70c319bd5c29f78ed1084ba5d50eeac86f7f9"
+checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8"
[[package]]
name = "hermit-abi"
@@ -2110,6 +2230,12 @@ dependencies = [
"libc",
]
+[[package]]
+name = "hermit-abi"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fed44880c466736ef9a5c5b5facefb5ed0785676d0c02d612db14e54f0d84286"
+
[[package]]
name = "hex"
version = "0.4.3"
@@ -2124,9 +2250,9 @@ checksum = "dfa686283ad6dd069f105e5ab091b04c62850d3e4cf5d67debad1933f55023df"
[[package]]
name = "http"
-version = "0.2.8"
+version = "0.2.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "75f43d41e26995c17e71ee126451dd3941010b0514a81a9d11f3b341debc2399"
+checksum = "bd6effc99afb63425aff9b05836f029929e345a6148a14b7ecd5ab67af944482"
dependencies = [
"bytes",
"fnv",
@@ -2164,9 +2290,9 @@ checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4"
[[package]]
name = "hyper"
-version = "0.14.23"
+version = "0.14.26"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "034711faac9d2166cb1baf1a2fb0b60b1f277f8492fd72176c17f3515e1abd3c"
+checksum = "ab302d72a6f11a3b910431ff93aae7e773078c769f0a3ef15fb9ec692ed147d4"
dependencies = [
"bytes",
"futures-channel",
@@ -2188,16 +2314,16 @@ dependencies = [
[[package]]
name = "iana-time-zone"
-version = "0.1.53"
+version = "0.1.54"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "64c122667b287044802d6ce17ee2ddf13207ed924c712de9a66a5814d5b64765"
+checksum = "0c17cc76786e99f8d2f055c11159e7f0091c42474dcc3189fbab96072e873e6d"
dependencies = [
"android_system_properties",
"core-foundation-sys",
"iana-time-zone-haiku",
"js-sys",
"wasm-bindgen",
- "winapi",
+ "windows 0.46.0",
]
[[package]]
@@ -2234,9 +2360,9 @@ dependencies = [
[[package]]
name = "image"
-version = "0.24.5"
+version = "0.24.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "69b7ea949b537b0fd0af141fff8c77690f2ce96f4f41f042ccb6c69c6c965945"
+checksum = "527909aa81e20ac3a44803521443a765550f09b5130c2c2fa1ea59c2f8f50a3a"
dependencies = [
"bytemuck",
"byteorder",
@@ -2256,9 +2382,9 @@ checksum = "d9f1a0777d972970f204fdf8ef319f1f4f8459131636d7e3c96c5d59570d0fa6"
[[package]]
name = "indexmap"
-version = "1.9.2"
+version = "1.9.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1885e79c1fc4b10f0e172c475f458b7f7b93061064d98c3293e98c5ba0c8b399"
+checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99"
dependencies = [
"autocfg",
"hashbrown 0.12.3",
@@ -2266,9 +2392,9 @@ dependencies = [
[[package]]
name = "indoc"
-version = "1.0.7"
+version = "1.0.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "adab1eaa3408fb7f0c777a73e7465fd5656136fc93b670eb6df3c88c2c1344e3"
+checksum = "bfa799dd5ed20a7e349f3b4639aa80d74549c81716d9ec4f994c9b5815598306"
[[package]]
name = "inflections"
@@ -2282,7 +2408,7 @@ version = "0.9.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f8069d3ec154eb856955c1c0fbffefbf5f3c40a104ec912d4797314c1801abff"
dependencies = [
- "bitflags",
+ "bitflags 1.3.2",
"inotify-sys",
"libc",
]
@@ -2298,9 +2424,9 @@ dependencies = [
[[package]]
name = "insta"
-version = "1.23.0"
+version = "1.29.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e48b08a091dfe5b09a6a9688c468fdd5b4396e92ce09e2eb932f0884b02788a4"
+checksum = "9a28d25139df397cbca21408bb742cf6837e04cdbebf1b07b760caf971d6a972"
dependencies = [
"console",
"lazy_static",
@@ -2323,24 +2449,25 @@ dependencies = [
[[package]]
name = "io-lifetimes"
-version = "1.0.4"
+version = "1.0.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e7d6c6f8c91b4b9ed43484ad1a938e393caf35960fce7f82a040497207bd8e9e"
+checksum = "09270fd4fa1111bc614ed2246c7ef56239a3063d5be0d1ec3b589c505d400aeb"
dependencies = [
+ "hermit-abi 0.3.1",
"libc",
- "windows-sys 0.42.0",
+ "windows-sys 0.45.0",
]
[[package]]
name = "is-terminal"
-version = "0.4.2"
+version = "0.4.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "28dfb6c8100ccc63462345b67d1bbc3679177c75ee4bf59bf29c8b1d110b8189"
+checksum = "256017f749ab3117e93acb91063009e1f1bb56d03965b14c2c8df4eb02c524d8"
dependencies = [
- "hermit-abi 0.2.6",
+ "hermit-abi 0.3.1",
"io-lifetimes",
- "rustix 0.36.7",
- "windows-sys 0.42.0",
+ "rustix",
+ "windows-sys 0.45.0",
]
[[package]]
@@ -2354,22 +2481,24 @@ dependencies = [
[[package]]
name = "itoa"
-version = "1.0.4"
+version = "1.0.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4217ad341ebadf8d8e724e264f13e593e0648f5b3e94b3896a5df283be015ecc"
+checksum = "453ad9f582a441959e5f0d088b02ce04cfe8d51a8eaf077f12ac6d3e94164ca6"
[[package]]
name = "jni"
-version = "0.20.0"
+version = "0.21.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "039022cdf4d7b1cf548d31f60ae783138e5fd42013f6271049d7df7afadef96c"
+checksum = "1a87aa2bb7d2af34197c04845522473242e1aa17c12f4935d5856491a7fb8c97"
dependencies = [
"cesu8",
+ "cfg-if",
"combine",
"jni-sys",
"log",
"thiserror",
"walkdir",
+ "windows-sys 0.45.0",
]
[[package]]
@@ -2380,9 +2509,9 @@ checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130"
[[package]]
name = "jobserver"
-version = "0.1.25"
+version = "0.1.26"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "068b1ee6743e4d11fb9c6a1e6064b3693a1b600e7f5f5988047d98b3dc9fb90b"
+checksum = "936cfd212a0155903bcbc060e316fb6cc7cbf2e1907329391ebadc1fe0ce77c2"
dependencies = [
"libc",
]
@@ -2429,10 +2558,19 @@ version = "1.0.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8367585489f01bc55dd27404dcf56b95e6da061a256a666ab23be9ba96a2e587"
dependencies = [
- "bitflags",
+ "bitflags 1.3.2",
"libc",
]
+[[package]]
+name = "kv-log-macro"
+version = "1.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0de8b303297635ad57c9f5059fd9cee7a47f8e8daa09df0fcd07dd39fb22977f"
+dependencies = [
+ "log",
+]
+
[[package]]
name = "lazy_static"
version = "1.4.0"
@@ -2511,9 +2649,9 @@ dependencies = [
[[package]]
name = "libc"
-version = "0.2.137"
+version = "0.2.140"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fc7fcc620a3bff7cdd7a365be3376c97191aeaccc2a603e600951e452615bf89"
+checksum = "99227334921fae1a979cf0bfdfcc6b3e5ce376ef57e16fb6fb3ea2ed6095f80c"
[[package]]
name = "libloading"
@@ -2533,9 +2671,9 @@ checksum = "348108ab3fba42ec82ff6e9564fc4ca0247bdccdc68dd8af9764bbc79c3c8ffb"
[[package]]
name = "libmimalloc-sys"
-version = "0.1.28"
+version = "0.1.30"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "04d1c67deb83e6b75fa4fe3309e09cfeade12e7721d95322af500d3814ea60c9"
+checksum = "dd8c7cbf8b89019683667e347572e6d55a7df7ea36b0c4ce69961b0cde67b174"
dependencies = [
"cc",
"libc",
@@ -2543,9 +2681,9 @@ dependencies = [
[[package]]
name = "link-cplusplus"
-version = "1.0.7"
+version = "1.0.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9272ab7b96c9046fbc5bc56c06c117cb639fe2d509df0c421cad82d2915cf369"
+checksum = "ecd207c9c713c34f95a097a5b029ac2ce6010530c7b49d7fea24d977dede04f5"
dependencies = [
"cc",
]
@@ -2558,15 +2696,9 @@ checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f"
[[package]]
name = "linux-raw-sys"
-version = "0.1.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f051f77a7c8e6957c0696eac88f26b0117e54f52d3fc682ab19397a8812846a4"
-
-[[package]]
-name = "linux-raw-sys"
-version = "0.3.0"
+version = "0.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cd550e73688e6d578f0ac2119e32b797a327631a42f9433e59d02e139c8df60d"
+checksum = "d59d8c75012853d2e872fb56bc8a2e53718e2cafe1a4c823143141c6d90c322f"
[[package]]
name = "litrs"
@@ -2591,6 +2723,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e"
dependencies = [
"cfg-if",
+ "value-bag",
]
[[package]]
@@ -2604,9 +2737,9 @@ dependencies = [
[[package]]
name = "macaw"
-version = "0.18.0"
+version = "0.18.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8f5e66b08df1bc3a0249cadf7f2802ea7c09dc906af44c62b2889d721df1e252"
+checksum = "ed1f4d97d94b7d276711c5b2a74f91c2a90ab532198683bb648240ddc0488cf7"
dependencies = [
"glam",
"num-traits",
@@ -2639,9 +2772,9 @@ checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
[[package]]
name = "memmap2"
-version = "0.5.8"
+version = "0.5.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4b182332558b18d807c4ce1ca8ca983b34c3ee32765e47b3f0f69b90355cc1dc"
+checksum = "83faa42c0a078c393f6b29d5db232d8be22776a891f8f56e5284faee4a20b327"
dependencies = [
"libc",
]
@@ -2655,15 +2788,6 @@ dependencies = [
"autocfg",
]
-[[package]]
-name = "memoffset"
-version = "0.7.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5de893c32cde5f383baa4c04c5d6dbdd735cfd4a794b0debdb2bb1b421da5ff4"
-dependencies = [
- "autocfg",
-]
-
[[package]]
name = "memoffset"
version = "0.8.0"
@@ -2675,9 +2799,9 @@ dependencies = [
[[package]]
name = "memory-stats"
-version = "1.0.0"
+version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5d3f458a3076e337e027943b8cb5f4f72a6651714f9258fc7dcd3ae3b51f0276"
+checksum = "34f79cf9964c5c9545493acda1263f1912f8d2c56c8a2ffee2606cb960acaacc"
dependencies = [
"libc",
"winapi",
@@ -2689,7 +2813,7 @@ version = "0.24.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "de11355d1f6781482d027a3b4d4de7825dcedb197bf573e0596d00008402d060"
dependencies = [
- "bitflags",
+ "bitflags 1.3.2",
"block",
"core-graphics-types",
"foreign-types",
@@ -2699,16 +2823,16 @@ dependencies = [
[[package]]
name = "mimalloc"
-version = "0.1.32"
+version = "0.1.34"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9b2374e2999959a7b583e1811a1ddbf1d3a4b9496eceb9746f1192a59d871eca"
+checksum = "9dcb174b18635f7561a0c6c9fc2ce57218ac7523cf72c50af80e2d79ab8f3ba1"
dependencies = [
"libmimalloc-sys",
]
[[package]]
name = "minimal"
-version = "0.4.0"
+version = "0.6.0-alpha.0"
dependencies = [
"rerun",
]
@@ -2721,19 +2845,19 @@ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"
[[package]]
name = "minimal_options"
-version = "0.4.0"
+version = "0.6.0-alpha.0"
dependencies = [
"anyhow",
- "clap 4.1.4",
+ "clap 4.2.1",
"glam",
"rerun",
]
[[package]]
name = "miniz_oxide"
-version = "0.5.4"
+version = "0.6.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "96590ba8f175222643a85693f33d26e9c8a015f599c216509b1a6894af675d34"
+checksum = "b275950c28b37e794e8c55d88aeb5e139d0ce23fdbbeda68f8d7174abdf9e8fa"
dependencies = [
"adler",
]
@@ -2746,14 +2870,14 @@ checksum = "e53debba6bda7a793e5f99b8dacf19e626084f525f7829104ba9898f367d85ff"
[[package]]
name = "mio"
-version = "0.8.5"
+version = "0.8.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e5d732bc30207a6423068df043e3d02e0735b155ad7ce1a6f76fe2baa5b158de"
+checksum = "5b9d9a46eff5b4ff64b45a9e316a6d1e0bc719ef429cbec4dc630684212bfdf9"
dependencies = [
"libc",
"log",
"wasi 0.11.0+wasi-snapshot-preview1",
- "windows-sys 0.42.0",
+ "windows-sys 0.45.0",
]
[[package]]
@@ -2779,17 +2903,16 @@ checksum = "a8a3e2bde382ebf960c1f3e79689fa5941625fe9bf694a1cb64af3e85faff3af"
dependencies = [
"proc-macro2",
"quote",
- "syn 1.0.103",
+ "syn 1.0.109",
]
[[package]]
name = "naga"
-version = "0.11.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5eafe22a23b797c9bc227c6c896419b26b5bb88fa903417a3adaed08778850d5"
+version = "0.12.0"
+source = "git+https://github.com/gfx-rs/naga?rev=b99d58ea435090e561377949f428bce2c18451bb#b99d58ea435090e561377949f428bce2c18451bb"
dependencies = [
"bit-set",
- "bitflags",
+ "bitflags 1.3.2",
"codespan-reporting",
"hexf-parse",
"indexmap",
@@ -2832,7 +2955,7 @@ version = "0.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "451422b7e4718271c8b5b3aadf5adedba43dc76312454b387e98fae0fc951aa0"
dependencies = [
- "bitflags",
+ "bitflags 1.3.2",
"jni-sys",
"ndk-sys",
"num_enum",
@@ -2855,13 +2978,19 @@ dependencies = [
"jni-sys",
]
+[[package]]
+name = "never"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c96aba5aa877601bb3f6dd6a63a969e1f82e60646e81e71b14496995e9853c91"
+
[[package]]
name = "nix"
version = "0.23.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8f3790c00a0150112de0f4cd161e3d7fc4b2d8a5542ffc35f099a2562aecb35c"
dependencies = [
- "bitflags",
+ "bitflags 1.3.2",
"cc",
"cfg-if",
"libc",
@@ -2870,16 +2999,41 @@ dependencies = [
[[package]]
name = "nix"
-version = "0.24.2"
+version = "0.24.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fa52e972a9a719cecb6864fb88568781eb706bac2cd1d4f04a648542dbf78069"
+dependencies = [
+ "bitflags 1.3.2",
+ "cfg-if",
+ "libc",
+ "memoffset 0.6.5",
+]
+
+[[package]]
+name = "nix"
+version = "0.25.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "195cdbc1741b8134346d515b3a56a1c94b0912758009cfd53f99ea0f57b065fc"
+checksum = "f346ff70e7dbfd675fe90590b92d59ef2de15a8779ae305ebcbfd3f0caf59be4"
dependencies = [
- "bitflags",
+ "autocfg",
+ "bitflags 1.3.2",
"cfg-if",
"libc",
"memoffset 0.6.5",
]
+[[package]]
+name = "nix"
+version = "0.26.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bfdda3d196821d6af13126e40375cdf7da646a96114af134d5f417a9a1dc8e1a"
+dependencies = [
+ "bitflags 1.3.2",
+ "cfg-if",
+ "libc",
+ "static_assertions",
+]
+
[[package]]
name = "nohash-hasher"
version = "0.2.0"
@@ -2888,9 +3042,9 @@ checksum = "2bf50223579dc7cdcfb3bfcacf7069ff68243f8c363f62ffa99cf000a6b9c451"
[[package]]
name = "nom"
-version = "7.1.1"
+version = "7.1.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a8903e5a29a317527874d0402f867152a3d21c908bb0b933e416c65e301d4c36"
+checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a"
dependencies = [
"memchr",
"minimal-lexical",
@@ -2898,11 +3052,11 @@ dependencies = [
[[package]]
name = "notify"
-version = "5.0.0"
+version = "5.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ed2c66da08abae1c024c01d635253e402341b4060a12e99b31c7594063bf490a"
+checksum = "58ea850aa68a06e48fdb069c0ec44d0d64c8dbffa49bf3b6f7f0a901fdea1ba9"
dependencies = [
- "bitflags",
+ "bitflags 1.3.2",
"crossbeam-channel",
"filetime",
"fsevent-sys",
@@ -2911,7 +3065,7 @@ dependencies = [
"libc",
"mio",
"walkdir",
- "winapi",
+ "windows-sys 0.42.0",
]
[[package]]
@@ -2950,9 +3104,9 @@ dependencies = [
[[package]]
name = "num-complex"
-version = "0.4.2"
+version = "0.4.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7ae39348c8bc5fbd7f40c727a9925f03517afd2ab27d46702108b6a7e5414c19"
+checksum = "02e0d21255c828d6f128a1e41534206671e8c3ea0c62f32291e808dc82cff17d"
dependencies = [
"num-traits",
]
@@ -2965,7 +3119,7 @@ checksum = "876a53fff98e03a936a674b29568b0e605f06b29372c2489ff4de23f1949743d"
dependencies = [
"proc-macro2",
"quote",
- "syn 1.0.103",
+ "syn 1.0.109",
]
[[package]]
@@ -3013,33 +3167,33 @@ dependencies = [
[[package]]
name = "num_cpus"
-version = "1.14.0"
+version = "1.15.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f6058e64324c71e02bc2b150e4f3bc8286db6c83092132ffa3f6b1eab0f9def5"
+checksum = "0fac9e2da13b5eb447a6ce3d392f23a29d8694bff781bf03a16cd9ac8697593b"
dependencies = [
- "hermit-abi 0.1.19",
+ "hermit-abi 0.2.6",
"libc",
]
[[package]]
name = "num_enum"
-version = "0.5.7"
+version = "0.5.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cf5395665662ef45796a4ff5486c5d41d29e0c09640af4c5f17fd94ee2c119c9"
+checksum = "1f646caf906c20226733ed5b1374287eb97e3c2a5c227ce668c1f2ce20ae57c9"
dependencies = [
"num_enum_derive",
]
[[package]]
name = "num_enum_derive"
-version = "0.5.7"
+version = "0.5.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3b0498641e53dd6ac1a4f22547548caa6864cc4933784319cd1775271c5a46ce"
+checksum = "dcbff9bc912032c62bf65ef1d5aea88983b420f4f839db1e9b0c281a25c9c799"
dependencies = [
"proc-macro-crate",
"proc-macro2",
"quote",
- "syn 1.0.103",
+ "syn 1.0.109",
]
[[package]]
@@ -3087,9 +3241,9 @@ checksum = "df3b9834c1e95694a05a828b59f55fa2afec6288359cda67146126b3f90a55d7"
[[package]]
name = "objc2"
-version = "0.3.0-beta.3"
+version = "0.3.0-beta.3.patch-leaks.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fe31e5425d3d0b89a15982c024392815da40689aceb34bad364d58732bcfd649"
+checksum = "e7d9bb2ee6b71d02b1b3554ed600d267ee9a2796acc9fa43fb7748e13fe072dd"
dependencies = [
"block2",
"objc-sys",
@@ -3125,19 +3279,19 @@ dependencies = [
[[package]]
name = "object"
-version = "0.29.0"
+version = "0.30.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "21158b2c33aa6d4561f1c0a6ea283ca92bc54802a93b263e910746d679a7eb53"
+checksum = "ea86265d3d3dcb6a27fc51bd29a4bf387fae9d2986b823079d4986af253eb439"
dependencies = [
"memchr",
]
[[package]]
name = "objectron"
-version = "0.4.0"
+version = "0.6.0-alpha.0"
dependencies = [
"anyhow",
- "clap 4.1.4",
+ "clap 4.2.1",
"glam",
"prost",
"prost-build",
@@ -3146,9 +3300,9 @@ dependencies = [
[[package]]
name = "once_cell"
-version = "1.17.0"
+version = "1.17.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6f61fba1741ea2b3d6a1e3178721804bb716a68a6aeba1149b5d52e3d464ea66"
+checksum = "b7e5500299e16ebb147ae15a00a942af264cf3688f47923b8fc2cd5858f23ad3"
[[package]]
name = "oorandom"
@@ -3158,9 +3312,9 @@ checksum = "0ab1bc2a289d34bd04a330323ac98a1b4bc82c9d9fcb1e66b63caa84da26b575"
[[package]]
name = "orbclient"
-version = "0.3.42"
+version = "0.3.43"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ba683f1641c11041c59d5d93689187abcab3c1349dc6d9d70c550c9f9360802f"
+checksum = "974465c5e83cf9df05c1e4137b271d29035c902e39e5ad4c1939837e22160af8"
dependencies = [
"cfg-if",
"redox_syscall 0.2.16",
@@ -3170,9 +3324,9 @@ dependencies = [
[[package]]
name = "ordered-float"
-version = "3.4.0"
+version = "3.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d84eb1409416d254e4a9c8fa56cc24701755025b458f0fcd8e59e1f5f40c23bf"
+checksum = "13a384337e997e6860ffbaa83708b2ef329fd8c54cb67a5f64d421e0f943254f"
dependencies = [
"num-traits",
]
@@ -3189,15 +3343,15 @@ dependencies = [
[[package]]
name = "os_str_bytes"
-version = "6.4.1"
+version = "6.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9b7820b9daea5457c9f21c69448905d723fbd21136ccf521748f23fd49e723ee"
+checksum = "ceedf44fb00f2d1984b0bc98102627ce622e083e49a5bacdb3e514fa4238e267"
[[package]]
name = "owned_ttf_parser"
-version = "0.17.1"
+version = "0.18.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "18904d3c65493a9f0d7542293d1a7f69bfdc309a6b9ef4f46dc3e58b0577edc5"
+checksum = "e25e9fb15717794fae58ab55c26e044103aad13186fbb625893f9a3bbcc24228"
dependencies = [
"ttf-parser",
]
@@ -3226,7 +3380,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f"
dependencies = [
"lock_api",
- "parking_lot_core 0.9.4",
+ "parking_lot_core 0.9.7",
]
[[package]]
@@ -3245,9 +3399,9 @@ dependencies = [
[[package]]
name = "parking_lot_core"
-version = "0.9.4"
+version = "0.9.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4dc9e0dc2adc1c69d09143aff38d3d30c5c3f0df0dad82e6d25547af174ebec0"
+checksum = "9069cbb9f99e3a5083476ccb29ceb1de18b9118cafa53e90c9551235de2b9521"
dependencies = [
"backtrace",
"cfg-if",
@@ -3256,14 +3410,14 @@ dependencies = [
"redox_syscall 0.2.16",
"smallvec",
"thread-id",
- "windows-sys 0.42.0",
+ "windows-sys 0.45.0",
]
[[package]]
name = "paste"
-version = "1.0.9"
+version = "1.0.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b1de2e551fb905ac83f73f7aedf2f0cb4a0da7e35efa24a202a936269f1f18e1"
+checksum = "9f746c4065a8fa3fe23974dd82f15431cc8d40779821001404d10d2e79ca7d79"
[[package]]
name = "pathdiff"
@@ -3279,9 +3433,9 @@ checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e"
[[package]]
name = "petgraph"
-version = "0.6.2"
+version = "0.6.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e6d5014253a1331579ce62aa67443b4a658c5e7dd03d4bc6d302b94474888143"
+checksum = "4dd7d28ee937e54fe3080c91faa1c3a46c06de6252988a7f4592ba2310ef22a4"
dependencies = [
"fixedbitset",
"indexmap",
@@ -3350,11 +3504,11 @@ dependencies = [
[[package]]
name = "png"
-version = "0.17.6"
+version = "0.17.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8f0e7f4c94ec26ff209cee506314212639d6c91b80afb82984819fafce9df01c"
+checksum = "5d708eaf860a19b19ce538740d2b4bdeeb8337fa53f7738455e706623ad5c638"
dependencies = [
- "bitflags",
+ "bitflags 1.3.2",
"crc32fast",
"flate2",
"miniz_oxide",
@@ -3362,29 +3516,29 @@ dependencies = [
[[package]]
name = "polars-arrow"
-version = "0.27.1"
+version = "0.27.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "38fad08b4d4d3e21e8935d5d3d4dfcbb5ca65ffc5fa19364c254751bc1d62f93"
+checksum = "06e57a7b929edf6c73475dbc3f63d35152f14f4a9455476acc6127d770daa0f6"
dependencies = [
"arrow2",
- "hashbrown 0.13.1",
+ "hashbrown 0.13.2",
"num",
"thiserror",
]
[[package]]
name = "polars-core"
-version = "0.27.1"
+version = "0.27.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2256086865cfa7db31af5e66a088f0089bff1ba9692f7195d1661497cebdca05"
+checksum = "5a440cd53916f1a87fac1fda36cd7cc2d226247b4d4570d96242da5fa7f07b2a"
dependencies = [
- "ahash 0.8.2",
+ "ahash 0.8.3",
"anyhow",
"arrow2",
- "bitflags",
+ "bitflags 1.3.2",
"chrono",
"comfy-table 6.1.4",
- "hashbrown 0.13.1",
+ "hashbrown 0.13.2",
"indexmap",
"num",
"once_cell",
@@ -3400,9 +3554,9 @@ dependencies = [
[[package]]
name = "polars-ops"
-version = "0.27.1"
+version = "0.27.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "31168b91a6edddb8dc4dcc4b53af15e9ffefc23f0bff054c1975423e01f3ae15"
+checksum = "36638340fd9f4377dab11f307877ebb5bdac3bc9b25ea32a771584de76e5280a"
dependencies = [
"arrow2",
"polars-arrow",
@@ -3412,9 +3566,9 @@ dependencies = [
[[package]]
name = "polars-utils"
-version = "0.27.1"
+version = "0.27.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bda7fb126f8c77d0a106620fd525bc4fdd1c7e32cb100aa9a82ba3f7c969485a"
+checksum = "a741a3325c544c97c7a9ff57d857f089b60041bd92b06c41582df6940ffaa05b"
dependencies = [
"once_cell",
"rayon",
@@ -3431,16 +3585,18 @@ dependencies = [
[[package]]
name = "polling"
-version = "2.5.2"
+version = "2.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "22122d5ec4f9fe1b3916419b76be1e80bcb93f618d071d2edf841b137b2a2bd6"
+checksum = "7e1f879b2998099c2d69ab9605d145d5b661195627eccc680002c4918a7fb6fa"
dependencies = [
"autocfg",
+ "bitflags 1.3.2",
"cfg-if",
+ "concurrent-queue",
"libc",
"log",
- "wepoll-ffi",
- "windows-sys 0.42.0",
+ "pin-project-lite",
+ "windows-sys 0.45.0",
]
[[package]]
@@ -3457,23 +3613,22 @@ checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de"
[[package]]
name = "prettyplease"
-version = "0.1.23"
+version = "0.1.25"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e97e3215779627f01ee256d2fad52f3d95e8e1c11e9fc6fd08f7cd455d5d5c78"
+checksum = "6c8646e95016a7a6c4adea95bafa8a16baab64b583356217f2c85db4a39d9a86"
dependencies = [
"proc-macro2",
- "syn 1.0.103",
+ "syn 1.0.109",
]
[[package]]
name = "proc-macro-crate"
-version = "1.2.1"
+version = "1.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "eda0fc3b0fb7c975631757e14d9049da17374063edb6ebbcbc54d880d4fe94e9"
+checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919"
dependencies = [
"once_cell",
- "thiserror",
- "toml",
+ "toml_edit",
]
[[package]]
@@ -3485,7 +3640,7 @@ dependencies = [
"proc-macro-error-attr",
"proc-macro2",
"quote",
- "syn 1.0.103",
+ "syn 1.0.109",
"version_check",
]
@@ -3508,9 +3663,9 @@ checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068"
[[package]]
name = "proc-macro2"
-version = "1.0.56"
+version = "1.0.54"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2b63bdb0cd06f1f4dedf69b254734f9b45af66e4a031e42a7480257d9898b435"
+checksum = "e472a104799c74b514a57226160104aa483546de37e839ec50e3c2e41dd87534"
dependencies = [
"unicode-ident",
]
@@ -3523,9 +3678,9 @@ checksum = "74605f360ce573babfe43964cbe520294dcb081afbf8c108fc6e23036b4da2df"
[[package]]
name = "prost"
-version = "0.11.6"
+version = "0.11.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "21dc42e00223fc37204bd4aa177e69420c604ca4a183209a8f9de30c6d934698"
+checksum = "e48e50df39172a3e7eb17e14642445da64996989bc212b583015435d39a58537"
dependencies = [
"bytes",
"prost-derive",
@@ -3533,12 +3688,12 @@ dependencies = [
[[package]]
name = "prost-build"
-version = "0.11.6"
+version = "0.11.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a3f8ad728fb08fe212df3c05169e940fbb6d9d16a877ddde14644a983ba2012e"
+checksum = "2c828f93f5ca4826f97fedcbd3f9a536c16b12cff3dbbb4a007f932bbad95b12"
dependencies = [
"bytes",
- "heck 0.4.0",
+ "heck 0.4.1",
"itertools",
"lazy_static",
"log",
@@ -3548,43 +3703,43 @@ dependencies = [
"prost",
"prost-types",
"regex",
- "syn 1.0.103",
+ "syn 1.0.109",
"tempfile",
"which",
]
[[package]]
name = "prost-derive"
-version = "0.11.6"
+version = "0.11.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8bda8c0881ea9f722eb9629376db3d0b903b462477c1aafcb0566610ac28ac5d"
+checksum = "4ea9b0f8cbe5e15a8a042d030bd96668db28ecb567ec37d691971ff5731d2b1b"
dependencies = [
"anyhow",
"itertools",
"proc-macro2",
"quote",
- "syn 1.0.103",
+ "syn 1.0.109",
]
[[package]]
name = "prost-types"
-version = "0.11.6"
+version = "0.11.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a5e0526209433e96d83d750dd81a99118edbc55739e7e61a46764fd2ad537788"
+checksum = "379119666929a1afd7a043aa6cf96fa67a6dce9af60c88095a4686dbce4c9c88"
dependencies = [
- "bytes",
"prost",
]
[[package]]
name = "puffin"
-version = "0.14.0"
+version = "0.14.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "796a1b7d7d0ec984dde24615178cbd14dc697ea4cdcddfd1fee9a5f87135f9e8"
+checksum = "a7b2c7a01f569fb03e2ff1f5376537f294001447bd23ce75ca51054fcd223fe4"
dependencies = [
"anyhow",
"bincode",
"byteorder",
+ "instant",
"once_cell",
"parking_lot 0.12.1",
"ruzstd",
@@ -3594,9 +3749,9 @@ dependencies = [
[[package]]
name = "puffin_http"
-version = "0.11.0"
+version = "0.11.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "77dae1a51a8887f161ae17809ec4159bb3fbc8be60d12947039fa063cf211f1b"
+checksum = "dd0248f6b7425d45ac24cecefc9272d679b8fc18e82c5d3777e90146eb9a9f85"
dependencies = [
"anyhow",
"crossbeam-channel",
@@ -3606,9 +3761,9 @@ dependencies = [
[[package]]
name = "pyo3"
-version = "0.18.0"
+version = "0.18.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ccd4149c8c3975099622b4e1962dac27565cf5663b76452c3e2b66e0b6824277"
+checksum = "cfb848f80438f926a9ebddf0a539ed6065434fd7aae03a89312a9821f81b8501"
dependencies = [
"cfg-if",
"indoc",
@@ -3622,10 +3777,35 @@ dependencies = [
]
[[package]]
-name = "pyo3-build-config"
+name = "pyo3-asyncio"
+version = "0.18.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d3564762e37035cfc486228e10b0528460fa026d681b5763873c693aa0d5c260"
+dependencies = [
+ "futures",
+ "once_cell",
+ "pin-project-lite",
+ "pyo3",
+ "pyo3-asyncio-macros",
+ "tokio",
+]
+
+[[package]]
+name = "pyo3-asyncio-macros"
version = "0.18.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9cd09fe469834db21ee60e0051030339e5d361293d8cb5ec02facf7fdcf52dbf"
+checksum = "be72d4cd43a27530306bd0d20d3932182fbdd072c6b98d3638bc37efb9d559dd"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "pyo3-build-config"
+version = "0.18.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "98a42e7f42e917ce6664c832d5eee481ad514c98250c49e0b03b20593e2c7ed0"
dependencies = [
"once_cell",
"target-lexicon",
@@ -3633,9 +3813,9 @@ dependencies = [
[[package]]
name = "pyo3-ffi"
-version = "0.18.0"
+version = "0.18.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0c427c9a96b9c5b12156dbc11f76b14f49e9aae8905ca783ea87c249044ef137"
+checksum = "a0707f0ab26826fe4ccd59b69106e9df5e12d097457c7b8f9c0fd1d2743eec4d"
dependencies = [
"libc",
"pyo3-build-config",
@@ -3643,25 +3823,25 @@ dependencies = [
[[package]]
name = "pyo3-macros"
-version = "0.18.0"
+version = "0.18.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "16b822bbba9d60630a44d2109bc410489bb2f439b33e3a14ddeb8a40b378a7c4"
+checksum = "978d18e61465ecd389e1f235ff5a467146dc4e3c3968b90d274fe73a5dd4a438"
dependencies = [
"proc-macro2",
"pyo3-macros-backend",
"quote",
- "syn 1.0.103",
+ "syn 1.0.109",
]
[[package]]
name = "pyo3-macros-backend"
-version = "0.18.0"
+version = "0.18.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "84ae898104f7c99db06231160770f3e40dad6eb9021daddc0fedfa3e41dff10a"
+checksum = "8e0e1128f85ce3fca66e435e08aa2089a2689c1c48ce97803e13f63124058462"
dependencies = [
"proc-macro2",
"quote",
- "syn 1.0.103",
+ "syn 1.0.109",
]
[[package]]
@@ -3715,26 +3895,23 @@ dependencies = [
[[package]]
name = "range-alloc"
-version = "0.1.2"
+version = "0.1.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "63e935c45e09cc6dcf00d2f0b2d630a58f4095320223d47fc68918722f0538b6"
+checksum = "9c8a99fddc9f0ba0a85884b8d14e3592853e787d581ca1816c91349b10e4eeab"
[[package]]
name = "raw-window-handle"
-version = "0.5.0"
+version = "0.5.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ed7e3d950b66e19e0c372f3fa3fbbcf85b1746b571f74e0c2af6042a5c93420a"
-dependencies = [
- "cty",
-]
+checksum = "f2ff9a1f06a88b01621b7ae906ef0211290d1c8a168a15542486a8f61c0833b9"
[[package]]
name = "raw_mesh"
-version = "0.4.0"
+version = "0.6.0-alpha.0"
dependencies = [
"anyhow",
"bytes",
- "clap 4.1.4",
+ "clap 4.2.1",
"gltf",
"mimalloc",
"rerun",
@@ -3770,7 +3947,7 @@ dependencies = [
[[package]]
name = "re_analytics"
-version = "0.4.0"
+version = "0.6.0-alpha.0"
dependencies = [
"anyhow",
"crossbeam",
@@ -3791,9 +3968,9 @@ dependencies = [
[[package]]
name = "re_arrow_store"
-version = "0.4.0"
+version = "0.6.0-alpha.0"
dependencies = [
- "ahash 0.8.2",
+ "ahash 0.8.3",
"anyhow",
"arrow2",
"arrow2_convert",
@@ -3818,7 +3995,7 @@ dependencies = [
[[package]]
name = "re_build_build_info"
-version = "0.4.0"
+version = "0.6.0-alpha.0"
dependencies = [
"anyhow",
"time 0.3.20",
@@ -3826,20 +4003,20 @@ dependencies = [
[[package]]
name = "re_build_info"
-version = "0.4.0"
+version = "0.6.0-alpha.0"
[[package]]
name = "re_build_web_viewer"
-version = "0.4.0"
+version = "0.6.0-alpha.0"
dependencies = [
"cargo_metadata",
]
[[package]]
name = "re_data_store"
-version = "0.4.0"
+version = "0.6.0-alpha.0"
dependencies = [
- "ahash 0.8.2",
+ "ahash 0.8.3",
"criterion",
"document-features",
"itertools",
@@ -3860,14 +4037,14 @@ dependencies = [
[[package]]
name = "re_error"
-version = "0.4.0"
+version = "0.6.0-alpha.0"
dependencies = [
"anyhow",
]
[[package]]
name = "re_format"
-version = "0.4.0"
+version = "0.6.0-alpha.0"
dependencies = [
"arrow2",
"arrow2_convert",
@@ -3877,7 +4054,7 @@ dependencies = [
[[package]]
name = "re_int_histogram"
-version = "0.4.0"
+version = "0.6.0-alpha.0"
dependencies = [
"criterion",
"insta",
@@ -3888,7 +4065,7 @@ dependencies = [
[[package]]
name = "re_log"
-version = "0.4.0"
+version = "0.6.0-alpha.0"
dependencies = [
"env_logger",
"js-sys",
@@ -3901,7 +4078,7 @@ dependencies = [
[[package]]
name = "re_log_encoding"
-version = "0.4.0"
+version = "0.6.0-alpha.0"
dependencies = [
"criterion",
"ehttp",
@@ -3926,9 +4103,9 @@ dependencies = [
[[package]]
name = "re_log_types"
-version = "0.4.0"
+version = "0.6.0-alpha.0"
dependencies = [
- "ahash 0.8.2",
+ "ahash 0.8.3",
"array-init",
"arrow2",
"arrow2_convert",
@@ -3964,9 +4141,9 @@ dependencies = [
[[package]]
name = "re_memory"
-version = "0.4.0"
+version = "0.6.0-alpha.0"
dependencies = [
- "ahash 0.8.2",
+ "ahash 0.8.3",
"backtrace",
"emath",
"instant",
@@ -3984,7 +4161,7 @@ dependencies = [
[[package]]
name = "re_query"
-version = "0.4.0"
+version = "0.6.0-alpha.0"
dependencies = [
"arrow2",
"criterion",
@@ -4002,13 +4179,13 @@ dependencies = [
[[package]]
name = "re_renderer"
-version = "0.4.0"
+version = "0.6.0-alpha.0"
dependencies = [
- "ahash 0.8.2",
+ "ahash 0.8.3",
"anyhow",
"arrow2",
"async-executor",
- "bitflags",
+ "bitflags 1.3.2",
"bytemuck",
"clean-path",
"console_error_panic_hook",
@@ -4026,6 +4203,7 @@ dependencies = [
"itertools",
"log",
"macaw",
+ "never",
"notify",
"ordered-float",
"parking_lot 0.12.1",
@@ -4048,14 +4226,13 @@ dependencies = [
"web-sys",
"wgpu",
"wgpu-core",
- "wgpu-hal",
"winit",
"zip",
]
[[package]]
name = "re_sdk"
-version = "0.4.0"
+version = "0.6.0-alpha.0"
dependencies = [
"arrow2_convert",
"document-features",
@@ -4075,9 +4252,9 @@ dependencies = [
[[package]]
name = "re_sdk_comms"
-version = "0.4.0"
+version = "0.6.0-alpha.0"
dependencies = [
- "ahash 0.8.2",
+ "ahash 0.8.3",
"anyhow",
"bincode",
"crossbeam",
@@ -4091,7 +4268,7 @@ dependencies = [
[[package]]
name = "re_smart_channel"
-version = "0.4.0"
+version = "0.6.0-alpha.0"
dependencies = [
"crossbeam",
"instant",
@@ -4099,9 +4276,9 @@ dependencies = [
[[package]]
name = "re_string_interner"
-version = "0.4.0"
+version = "0.6.0-alpha.0"
dependencies = [
- "ahash 0.8.2",
+ "ahash 0.8.3",
"nohash-hasher",
"once_cell",
"parking_lot 0.12.1",
@@ -4110,9 +4287,9 @@ dependencies = [
[[package]]
name = "re_tensor_ops"
-version = "0.4.0"
+version = "0.6.0-alpha.0"
dependencies = [
- "ahash 0.8.2",
+ "ahash 0.8.3",
"ndarray",
"re_log_types",
"serde",
@@ -4120,7 +4297,7 @@ dependencies = [
[[package]]
name = "re_tuid"
-version = "0.4.0"
+version = "0.6.0-alpha.0"
dependencies = [
"arrow2",
"arrow2_convert",
@@ -4134,7 +4311,7 @@ dependencies = [
[[package]]
name = "re_ui"
-version = "0.4.0"
+version = "0.6.0-alpha.0"
dependencies = [
"eframe",
"egui",
@@ -4152,20 +4329,23 @@ dependencies = [
[[package]]
name = "re_viewer"
-version = "0.4.0"
+version = "0.6.0-alpha.0"
dependencies = [
- "ahash 0.8.2",
+ "ahash 0.8.3",
"anyhow",
"arboard",
+ "async-std",
"bytemuck",
"cocoa",
"console_error_panic_hook",
+ "crossbeam-channel",
"eframe",
"egui",
"egui-wgpu",
"egui_dock",
"egui_extras",
"enumset",
+ "ewebsock",
"glam",
"half 2.2.1",
"image",
@@ -4179,6 +4359,8 @@ dependencies = [
"poll-promise",
"puffin",
"puffin_http",
+ "pyo3",
+ "pyo3-asyncio",
"re_analytics",
"re_arrow_store",
"re_build_build_info",
@@ -4198,10 +4380,15 @@ dependencies = [
"re_ws_comms",
"rfd",
"serde",
+ "serde_json",
"slotmap",
"smallvec",
+ "strum 0.24.1",
+ "strum_macros 0.24.3",
"thiserror",
"time 0.3.20",
+ "tokio",
+ "url",
"uuid",
"vec1",
"wasm-bindgen-futures",
@@ -4212,7 +4399,7 @@ dependencies = [
[[package]]
name = "re_web_viewer_server"
-version = "0.4.0"
+version = "0.6.0-alpha.0"
dependencies = [
"cargo_metadata",
"ctrlc",
@@ -4229,7 +4416,7 @@ dependencies = [
[[package]]
name = "re_ws_comms"
-version = "0.4.0"
+version = "0.6.0-alpha.0"
dependencies = [
"anyhow",
"bincode",
@@ -4253,16 +4440,16 @@ version = "0.2.16"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a"
dependencies = [
- "bitflags",
+ "bitflags 1.3.2",
]
[[package]]
name = "redox_syscall"
-version = "0.3.4"
+version = "0.3.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fb02a9aee8e8c7ad8d86890f1e16b49e0bbbffc9961ff3788c31d57c98bcbf03"
+checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29"
dependencies = [
- "bitflags",
+ "bitflags 1.3.2",
]
[[package]]
@@ -4278,9 +4465,9 @@ dependencies = [
[[package]]
name = "regex"
-version = "1.7.0"
+version = "1.7.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e076559ef8e241f2ae3479e36f97bd5741c0330689e217ad51ce2c76808b868a"
+checksum = "8b1f693b24f6ac912f4893ef08244d70b6067480d2f1a46e950c9691e6749d1d"
dependencies = [
"aho-corasick",
"memchr",
@@ -4289,23 +4476,23 @@ dependencies = [
[[package]]
name = "regex-syntax"
-version = "0.6.28"
+version = "0.6.29"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "456c603be3e8d448b072f410900c09faf164fbce2d480456f50eea6e25f9c848"
+checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1"
[[package]]
name = "renderdoc-sys"
-version = "0.7.1"
+version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f1382d1f0a252c4bf97dc20d979a2fdd05b024acd7c2ed0f7595d7817666a157"
+checksum = "216080ab382b992234dda86873c18d4c48358f5cfcb70fd693d7f6f2131b628b"
[[package]]
name = "rerun"
-version = "0.4.0"
+version = "0.6.0-alpha.0"
dependencies = [
"anyhow",
"backtrace",
- "clap 4.1.4",
+ "clap 4.2.1",
"ctrlc",
"document-features",
"itertools",
@@ -4333,7 +4520,7 @@ dependencies = [
[[package]]
name = "rerun_py"
-version = "0.4.0"
+version = "0.6.0-alpha.0"
dependencies = [
"arrow2",
"document-features",
@@ -4384,7 +4571,7 @@ dependencies = [
"wasm-bindgen",
"wasm-bindgen-futures",
"web-sys",
- "windows",
+ "windows 0.44.0",
]
[[package]]
@@ -4431,13 +4618,13 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "300a51053b1cb55c80b7a9fde4120726ddf25ca241a1cbb926626f62fb136bff"
dependencies = [
"base64 0.13.1",
- "bitflags",
+ "bitflags 1.3.2",
"serde",
]
[[package]]
name = "run_wasm"
-version = "0.4.0"
+version = "0.6.0-alpha.0"
dependencies = [
"cargo-run-wasm",
"pico-args",
@@ -4446,9 +4633,9 @@ dependencies = [
[[package]]
name = "rustc-demangle"
-version = "0.1.21"
+version = "0.1.22"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7ef03e0a2b150c7a90d01faf6254c9c48a41e95fb2a8c2ac1c6f0d2b9aefc342"
+checksum = "d4a36c42d1873f9a77c53bde094f9664d9891bc604a45b4798fd2c389ed12e5b"
[[package]]
name = "rustc-hash"
@@ -4467,37 +4654,23 @@ dependencies = [
[[package]]
name = "rustix"
-version = "0.36.7"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d4fdebc4b395b7fbb9ab11e462e20ed9051e7b16e42d24042c776eca0ac81b03"
-dependencies = [
- "bitflags",
- "errno 0.2.8",
- "io-lifetimes",
- "libc",
- "linux-raw-sys 0.1.4",
- "windows-sys 0.42.0",
-]
-
-[[package]]
-name = "rustix"
-version = "0.37.3"
+version = "0.37.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "62b24138615de35e32031d041a09032ef3487a616d901ca4db224e7d557efae2"
+checksum = "0e78cc525325c06b4a7ff02db283472f3c042b7ff0c391f96c6d5ac6f4f91b75"
dependencies = [
- "bitflags",
- "errno 0.3.0",
+ "bitflags 1.3.2",
+ "errno",
"io-lifetimes",
"libc",
- "linux-raw-sys 0.3.0",
+ "linux-raw-sys",
"windows-sys 0.45.0",
]
[[package]]
name = "rustls"
-version = "0.20.7"
+version = "0.20.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "539a2bfe908f471bfa933876bd1eb6a19cf2176d375f82ef7f99530a40e48c2c"
+checksum = "fff78fc74d175294f4e83b28343315ffcfb114b156f0185e9741cb5570f50e2f"
dependencies = [
"log",
"ring",
@@ -4507,15 +4680,15 @@ dependencies = [
[[package]]
name = "rustversion"
-version = "1.0.9"
+version = "1.0.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "97477e48b4cf8603ad5f7aaf897467cf42ab4218a38ef76fb14c2d6773a6d6a8"
+checksum = "4f3208ce4d8448b3f3e7d168a73f5e0c43a61e32930de3bceeccedb388b6bf06"
[[package]]
name = "ruzstd"
-version = "0.3.0"
+version = "0.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ffae8df4aa221781b715c27bbed0fac16b6f1e2643efb7af8a24dfc78d444493"
+checksum = "9a15e661f0f9dac21f3494fe5d23a6338c0ac116a2d22c2b63010acd89467ffe"
dependencies = [
"byteorder",
"thiserror",
@@ -4524,9 +4697,9 @@ dependencies = [
[[package]]
name = "ryu"
-version = "1.0.11"
+version = "1.0.13"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4501abdff3ae82a1c1b477a17252eb69cee9e66eb915c1abaa4f44d873df9f09"
+checksum = "f91339c0467de62360649f8d3e185ca8de4224ff281f66000de5eb2a77a79041"
[[package]]
name = "safemem"
@@ -4557,9 +4730,9 @@ checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
[[package]]
name = "scratch"
-version = "1.0.2"
+version = "1.0.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9c8132065adcfd6e02db789d9285a0deb2f3fcb04002865ab67d5fb103533898"
+checksum = "1792db035ce95be60c3f8853017b3999209281c24e2ba5bc8e59bf97a0c590c1"
[[package]]
name = "sct"
@@ -4586,47 +4759,47 @@ dependencies = [
[[package]]
name = "semver"
-version = "1.0.14"
+version = "1.0.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e25dfac463d778e353db5be2449d1cce89bd6fd23c9f1ea21310ce6e5a1b29c4"
+checksum = "bebd363326d05ec3e2f532ab7660680f3b02130d780c299bca73469d521bc0ed"
dependencies = [
"serde",
]
[[package]]
name = "serde"
-version = "1.0.147"
+version = "1.0.159"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d193d69bae983fc11a79df82342761dfbf28a99fc8d203dca4c3c1b590948965"
+checksum = "3c04e8343c3daeec41f58990b9d77068df31209f2af111e059e9fe9646693065"
dependencies = [
"serde_derive",
]
[[package]]
name = "serde_bytes"
-version = "0.11.7"
+version = "0.11.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cfc50e8183eeeb6178dcb167ae34a8051d63535023ae38b5d8d12beae193d37b"
+checksum = "416bda436f9aab92e02c8e10d49a15ddd339cea90b6e340fe51ed97abb548294"
dependencies = [
"serde",
]
[[package]]
name = "serde_derive"
-version = "1.0.147"
+version = "1.0.159"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4f1d362ca8fc9c3e3a7484440752472d68a6caa98f1ab81d99b5dfe517cec852"
+checksum = "4c614d17805b093df4b147b51339e7e44bf05ef59fba1e45d83500bcfb4d8585"
dependencies = [
"proc-macro2",
"quote",
- "syn 1.0.103",
+ "syn 2.0.12",
]
[[package]]
name = "serde_json"
-version = "1.0.89"
+version = "1.0.95"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "020ff22c755c2ed3f8cf162dbb41a7268d934702f3ed3631656ea597e08fc3db"
+checksum = "d721eca97ac802aa7777b701877c8004d950fc142651367300d21c1cc0194744"
dependencies = [
"itoa",
"ryu",
@@ -4635,29 +4808,29 @@ dependencies = [
[[package]]
name = "serde_repr"
-version = "0.1.11"
+version = "0.1.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "395627de918015623b32e7669714206363a7fc00382bf477e72c1f7533e8eafc"
+checksum = "bcec881020c684085e55a25f7fd888954d56609ef363479dc5a1305eb0d40cab"
dependencies = [
"proc-macro2",
"quote",
- "syn 1.0.103",
+ "syn 2.0.12",
]
[[package]]
name = "serde_test"
-version = "1.0.149"
+version = "1.0.159"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3434c4787dcd7c8c0837ffbb01e6e34091f8983b2df9655e66393a867f99f7aa"
+checksum = "f259aa64e48efaf5a4fea11f97cacb109f7fc3ae9db7244cbb40c01c7faf42bc"
dependencies = [
"serde",
]
[[package]]
name = "sha-1"
-version = "0.10.0"
+version = "0.10.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "028f48d513f9678cda28f6e4064755b3fbb2af6acd672f2c209b62323f7aea0f"
+checksum = "f5058ada175748e33390e40e872bd0fe59a19f265d0158daa551c5a88a76009c"
dependencies = [
"cfg-if",
"cpufeatures",
@@ -4692,9 +4865,9 @@ dependencies = [
[[package]]
name = "signal-hook"
-version = "0.3.14"
+version = "0.3.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a253b5e89e2698464fc26b545c9edceb338e18a89effeeecfea192c3025be29d"
+checksum = "732768f1176d21d09e076c23a93123d40bba92d50c4058da34d45c8de8e682b9"
dependencies = [
"libc",
"signal-hook-registry",
@@ -4713,9 +4886,9 @@ dependencies = [
[[package]]
name = "signal-hook-registry"
-version = "1.4.0"
+version = "1.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e51e73328dc4ac0c7ccbda3a494dfa03df1de2f46018127f60c693f2648455b0"
+checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1"
dependencies = [
"libc",
]
@@ -4734,9 +4907,9 @@ checksum = "420acb44afdae038210c99e69aae24109f32f15500aa708e81d46c9f29d55fcf"
[[package]]
name = "slab"
-version = "0.4.7"
+version = "0.4.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4614a76b2a8be0058caa9dbbaf66d988527d86d003c11a94fbd335d7661edcef"
+checksum = "6528351c9bc8ab22353f9d776db39a20288e8d6c37ef8cfe3317cf875eecfc2d"
dependencies = [
"autocfg",
]
@@ -4777,13 +4950,13 @@ version = "0.16.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f307c47d32d2715eb2e0ece5589057820e0e5e70d07c247d1063e844e107f454"
dependencies = [
- "bitflags",
+ "bitflags 1.3.2",
"calloop",
"dlib",
"lazy_static",
"log",
"memmap2",
- "nix 0.24.2",
+ "nix 0.24.3",
"pkg-config",
"wayland-client",
"wayland-cursor",
@@ -4802,9 +4975,9 @@ dependencies = [
[[package]]
name = "socket2"
-version = "0.4.7"
+version = "0.4.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "02e2d2db9033d13a1567121ddd7a095ee144db4e1ca1b1bda3419bc0da294ebd"
+checksum = "64a4a911eed85daf18834cfaa86a79b7d266ff93ff5ba14005426219480ed662"
dependencies = [
"libc",
"winapi",
@@ -4822,7 +4995,7 @@ version = "0.2.0+1.5.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "246bfa38fe3db3f1dfc8ca5a2cdeb7348c78be2112740cc0ec8ef18b6d94f830"
dependencies = [
- "bitflags",
+ "bitflags 1.3.2",
"num-traits",
]
@@ -4881,7 +5054,7 @@ dependencies = [
"proc-macro2",
"quote",
"rustversion",
- "syn 1.0.103",
+ "syn 1.0.109",
]
[[package]]
@@ -4890,11 +5063,11 @@ version = "0.24.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1e385be0d24f186b4ce2f9982191e7101bb737312ad61c1f2f984f34bcf85d59"
dependencies = [
- "heck 0.4.0",
+ "heck 0.4.1",
"proc-macro2",
"quote",
"rustversion",
- "syn 1.0.103",
+ "syn 1.0.109",
]
[[package]]
@@ -4905,9 +5078,9 @@ checksum = "fa7986063f7c0ab374407e586d7048a3d5aac94f103f751088bf398e07cd5400"
[[package]]
name = "syn"
-version = "1.0.103"
+version = "1.0.109"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a864042229133ada95abf3b54fdc62ef5ccabe9515b64717bcb9a1919e59445d"
+checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
dependencies = [
"proc-macro2",
"quote",
@@ -4916,9 +5089,9 @@ dependencies = [
[[package]]
name = "syn"
-version = "2.0.15"
+version = "2.0.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a34fcf3e8b60f57e6a14301a2e916d323af98b0ea63c599441eec8558660c822"
+checksum = "79d9531f94112cfc3e4c8f5f02cb2b58f72c97b7efd85f70203cc6d8efda5927"
dependencies = [
"proc-macro2",
"quote",
@@ -4933,15 +5106,15 @@ checksum = "f36bdaa60a83aca3921b5259d5400cbf5e90fc51931376a9bd4a0eb79aa7210f"
dependencies = [
"proc-macro2",
"quote",
- "syn 1.0.103",
+ "syn 1.0.109",
"unicode-xid",
]
[[package]]
name = "sysinfo"
-version = "0.28.3"
+version = "0.28.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f69e0d827cce279e61c2f3399eb789271a8f136d8245edef70f06e3c9601a670"
+checksum = "b4c2f3ca6693feb29a89724516f016488e9aafc7f37264f898593ee4b942f31b"
dependencies = [
"cfg-if",
"core-foundation-sys",
@@ -4953,45 +5126,35 @@ dependencies = [
[[package]]
name = "target-lexicon"
-version = "0.12.5"
+version = "0.12.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9410d0f6853b1d94f0e519fb95df60f29d2c1eff2d921ffdf01a4c8a3b54f12d"
+checksum = "8ae9980cab1db3fceee2f6c6f643d5d8de2997c58ee8d25fb0cc8a9e9e7348e5"
[[package]]
name = "tempfile"
-version = "3.4.0"
+version = "3.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "af18f7ae1acd354b992402e9ec5864359d693cd8a79dcbef59f76891701c1e95"
+checksum = "b9fbec84f381d5795b08656e4912bec604d162bff9291d6189a78f4c8ab87998"
dependencies = [
"cfg-if",
"fastrand",
- "redox_syscall 0.2.16",
- "rustix 0.36.7",
- "windows-sys 0.42.0",
+ "redox_syscall 0.3.5",
+ "rustix",
+ "windows-sys 0.45.0",
]
[[package]]
name = "termcolor"
-version = "1.1.3"
+version = "1.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bab24d30b911b2376f3a13cc2cd443142f0c81dda04c118693e35b3835757755"
+checksum = "be55cf8942feac5c765c2c993422806843c9a9a45d4d5c407ad6dd2ea95eb9b6"
dependencies = [
"winapi-util",
]
-[[package]]
-name = "terminal_size"
-version = "0.1.17"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "633c1a546cee861a1a6d0dc69ebeca693bf4296661ba7852b9d21d159e0506df"
-dependencies = [
- "libc",
- "winapi",
-]
-
[[package]]
name = "test_image_memory"
-version = "0.4.0"
+version = "0.6.0-alpha.0"
dependencies = [
"mimalloc",
"re_format",
@@ -5006,22 +5169,22 @@ checksum = "222a222a5bfe1bba4a77b45ec488a741b3cb8872e5e499451fd7d0129c9c7c3d"
[[package]]
name = "thiserror"
-version = "1.0.37"
+version = "1.0.40"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "10deb33631e3c9018b9baf9dcbbc4f737320d2b576bac10f6aefa048fa407e3e"
+checksum = "978c9a314bd8dc99be594bc3c175faaa9794be04a5a5e153caba6915336cebac"
dependencies = [
"thiserror-impl",
]
[[package]]
name = "thiserror-impl"
-version = "1.0.37"
+version = "1.0.40"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "982d17546b47146b28f7c22e3d08465f6b8903d0ea13c1660d9d84a6e7adcdbb"
+checksum = "f9456a42c5b0d803c8cd86e73dd7cc9edd429499f37a3550d286d5e86720569f"
dependencies = [
"proc-macro2",
"quote",
- "syn 1.0.103",
+ "syn 2.0.12",
]
[[package]]
@@ -5037,9 +5200,9 @@ dependencies = [
[[package]]
name = "tiff"
-version = "0.8.0"
+version = "0.8.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f17def29300a156c19ae30814710d9c63cd50288a49c6fd3a10ccfbe4cf886fd"
+checksum = "7449334f9ff2baf290d55d73983a7d6fa15e01198faef72af07e2a8db851e471"
dependencies = [
"flate2",
"jpeg-decoder",
@@ -5048,9 +5211,9 @@ dependencies = [
[[package]]
name = "time"
-version = "0.1.44"
+version = "0.1.45"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6db9e6914ab8b1ae1c260a4ae7a49b6c5611b40328a735b21862567685e73255"
+checksum = "1b797afad3f312d1c66a56d11d0316f916356d11bd158fbc6ca6389ff6bf805a"
dependencies = [
"libc",
"wasi 0.10.0+wasi-snapshot-preview1",
@@ -5096,9 +5259,9 @@ dependencies = [
[[package]]
name = "tiny-skia"
-version = "0.8.2"
+version = "0.8.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0ae12c22601b6853f4d93abb178e13bf0e1cc8e2454100c85d4d3a59ac71b3f7"
+checksum = "bfef3412c6975196fdfac41ef232f910be2bb37b9dd3313a49a1a6bc815a5bdb"
dependencies = [
"arrayref",
"arrayvec",
@@ -5110,9 +5273,9 @@ dependencies = [
[[package]]
name = "tiny-skia-path"
-version = "0.8.2"
+version = "0.8.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bd665853ce64402daabef6edda442dbb4f8ee93ea80957b66ba1af419f11a104"
+checksum = "a4b5edac058fc98f51c935daea4d805b695b38e2f151241cad125ade2a2ac20d"
dependencies = [
"arrayref",
"bytemuck",
@@ -5140,29 +5303,28 @@ dependencies = [
[[package]]
name = "tinyvec_macros"
-version = "0.1.0"
+version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c"
+checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
[[package]]
name = "tobj"
-version = "3.2.3"
+version = "3.2.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "deacee3abcc4fd8ff3f0f7c08d4583ab51753ed1d5a3acacd6d5773f640c27d6"
+checksum = "2d0bde887a49e2e09f30ba3b454cdba3fbc971703e436c527f9f69a035b45b9b"
dependencies = [
- "ahash 0.7.6",
+ "ahash 0.8.3",
]
[[package]]
name = "tokio"
-version = "1.26.0"
+version = "1.27.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "03201d01c3c27a29c8a5cee5b55a93ddae1ccf6f08f65365c2c918f8c1b76f64"
+checksum = "d0de47a4eecbe11f498978a9b29d792f0d2692d1dd003650c24c76510e3bc001"
dependencies = [
"autocfg",
"bytes",
"libc",
- "memchr",
"mio",
"num_cpus",
"pin-project-lite",
@@ -5173,13 +5335,13 @@ dependencies = [
[[package]]
name = "tokio-macros"
-version = "1.8.0"
+version = "2.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9724f9a975fb987ef7a3cd9be0350edcbe130698af5b8f7a631e23d42d052484"
+checksum = "61a573bdc87985e9d6ddeed1b3d864e8a302c847e40d647746df2f1de209d1ce"
dependencies = [
"proc-macro2",
"quote",
- "syn 1.0.103",
+ "syn 2.0.12",
]
[[package]]
@@ -5211,9 +5373,9 @@ dependencies = [
[[package]]
name = "tokio-util"
-version = "0.7.4"
+version = "0.7.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0bb2e075f03b3d66d8d8785356224ba688d2906a371015e225beeb65ca92c740"
+checksum = "5427d89453009325de0d8f342c9490009f76e999cb7672d77e46267448f7e6b2"
dependencies = [
"bytes",
"futures-core",
@@ -5224,12 +5386,20 @@ dependencies = [
]
[[package]]
-name = "toml"
-version = "0.5.9"
+name = "toml_datetime"
+version = "0.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3ab8ed2edee10b50132aed5f331333428b011c99402b5a534154ed15746f9622"
+
+[[package]]
+name = "toml_edit"
+version = "0.19.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8d82e1a7758622a465f8cee077614c73484dac5b836c02ff6a40d5d1010324d7"
+checksum = "239410c8609e8125456927e6707163a3b1fdb40561e4b803bc041f466ccfdc13"
dependencies = [
- "serde",
+ "indexmap",
+ "toml_datetime",
+ "winnow",
]
[[package]]
@@ -5259,7 +5429,7 @@ checksum = "4017f8f45139870ca7e672686113917c71c7a6e02d4924eda67186083c03081a"
dependencies = [
"proc-macro2",
"quote",
- "syn 1.0.103",
+ "syn 1.0.109",
]
[[package]]
@@ -5273,15 +5443,15 @@ dependencies = [
[[package]]
name = "try-lock"
-version = "0.2.3"
+version = "0.2.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "59547bce71d9c38b83d9c0e92b6066c4253371f15005def0c30d9657f50c7642"
+checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed"
[[package]]
name = "ttf-parser"
-version = "0.17.1"
+version = "0.18.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "375812fa44dab6df41c195cd2f7fecb488f6c09fbaafb62807488cefab642bff"
+checksum = "0609f771ad9c6155384897e1df4d948e692667cc0588548b68eb44d052b27633"
[[package]]
name = "tungstenite"
@@ -5326,9 +5496,9 @@ dependencies = [
[[package]]
name = "typenum"
-version = "1.15.0"
+version = "1.16.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dcf81ac59edc17cc8697ff311e8f5ef2d99fcbd9817b34cec66f90b6c3dfd987"
+checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba"
[[package]]
name = "uds_windows"
@@ -5342,15 +5512,15 @@ dependencies = [
[[package]]
name = "unicode-bidi"
-version = "0.3.8"
+version = "0.3.13"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "099b7128301d285f79ddd55b9a83d5e6b9e97c92e0ea0daebee7263e932de992"
+checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460"
[[package]]
name = "unicode-ident"
-version = "1.0.5"
+version = "1.0.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6ceab39d59e4c9499d4e5a8ee0e2735b891bb7308ac83dfb4e80cad195c9f6f3"
+checksum = "e5464a87b239f13a63a501f2701565754bae92d243d4bb7eb12f6d57d2269bf4"
[[package]]
name = "unicode-normalization"
@@ -5363,9 +5533,9 @@ dependencies = [
[[package]]
name = "unicode-segmentation"
-version = "1.10.0"
+version = "1.10.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0fdbf052a0783de01e944a6ce7a8cb939e295b1e7be835a1112c3b9a7f047a5a"
+checksum = "1dd624098567895118886609431a7c3b8f516e41d30e0643f03d94592a147e36"
[[package]]
name = "unicode-width"
@@ -5381,9 +5551,9 @@ checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c"
[[package]]
name = "unindent"
-version = "0.1.10"
+version = "0.1.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "58ee9362deb4a96cef4d437d1ad49cffc9b9e92d202b6995674e928ce684f112"
+checksum = "e1766d682d402817b5ac4490b3c3002d91dfa0d22812f341609f97b08757359c"
[[package]]
name = "untrusted"
@@ -5432,17 +5602,33 @@ version = "0.7.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9"
+[[package]]
+name = "utf8parse"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a"
+
[[package]]
name = "uuid"
-version = "1.2.2"
+version = "1.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "422ee0de9031b5b948b97a8fc04e3aa35230001a722ddd27943e0be31564ce4c"
+checksum = "1674845326ee10d37ca60470760d4288a6f80f304007d92e5c53bab78c9cfd79"
dependencies = [
"getrandom",
"serde",
"wasm-bindgen",
]
+[[package]]
+name = "value-bag"
+version = "1.0.0-alpha.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2209b78d1249f7e6f3293657c9779fe31ced465df091bbd433a1cf88e916ec55"
+dependencies = [
+ "ctor",
+ "version_check",
+]
+
[[package]]
name = "vec1"
version = "1.10.1"
@@ -5469,12 +5655,11 @@ checksum = "9d5b2c62b4012a3e1eca5a7e077d13b3bf498c4073e33ccd58626607748ceeca"
[[package]]
name = "walkdir"
-version = "2.3.2"
+version = "2.3.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "808cf2735cd4b6866113f648b791c6adc5714537bc222d9347bb203386ffda56"
+checksum = "36df944cda56c7d8d8b7496af378e6b16de9284591917d307c9b4d313c44e698"
dependencies = [
"same-file",
- "winapi",
"winapi-util",
]
@@ -5501,7 +5686,7 @@ dependencies = [
"heck 0.3.3",
"proc-macro2",
"quote",
- "syn 1.0.103",
+ "syn 1.0.109",
]
[[package]]
@@ -5547,7 +5732,7 @@ dependencies = [
"once_cell",
"proc-macro2",
"quote",
- "syn 1.0.103",
+ "syn 1.0.109",
"wasm-bindgen-shared",
]
@@ -5616,7 +5801,7 @@ checksum = "2aff81306fcac3c7515ad4e177f521b5c9a15f2b08f4e32d823066102f35a5f6"
dependencies = [
"proc-macro2",
"quote",
- "syn 1.0.103",
+ "syn 1.0.109",
"wasm-bindgen-backend",
"wasm-bindgen-shared",
]
@@ -5712,10 +5897,10 @@ version = "0.29.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3f3b068c05a039c9f755f881dc50f01732214f5685e379829759088967c46715"
dependencies = [
- "bitflags",
+ "bitflags 1.3.2",
"downcast-rs",
"libc",
- "nix 0.24.2",
+ "nix 0.24.3",
"scoped-tls",
"wayland-commons",
"wayland-scanner",
@@ -5728,7 +5913,7 @@ version = "0.29.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8691f134d584a33a6606d9d717b95c4fa20065605f798a3f350d78dced02a902"
dependencies = [
- "nix 0.24.2",
+ "nix 0.24.3",
"once_cell",
"smallvec",
"wayland-sys",
@@ -5740,7 +5925,7 @@ version = "0.29.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6865c6b66f13d6257bef1cd40cbfe8ef2f150fb8ebbdb1e8e873455931377661"
dependencies = [
- "nix 0.24.2",
+ "nix 0.24.3",
"wayland-client",
"xcursor",
]
@@ -5751,7 +5936,7 @@ version = "0.29.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b950621f9354b322ee817a23474e479b34be96c2e909c14f7bc0100e9a970bc6"
dependencies = [
- "bitflags",
+ "bitflags 1.3.2",
"wayland-client",
"wayland-commons",
"wayland-scanner",
@@ -5791,9 +5976,9 @@ dependencies = [
[[package]]
name = "webbrowser"
-version = "0.8.6"
+version = "0.8.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "769f1a8831de12cad7bd6f9693b15b1432d93a151557810f617f626af823acae"
+checksum = "579cc485bd5ce5bfa0d738e4921dd0b956eca9800be1fd2e5257ebe95bc4617e"
dependencies = [
"core-foundation",
"dirs",
@@ -5818,9 +6003,9 @@ dependencies = [
[[package]]
name = "webpki-roots"
-version = "0.22.5"
+version = "0.22.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "368bfe657969fb01238bb756d351dcade285e0f6fcbd36dcb23359a5169975be"
+checksum = "b6c71e40d7d2c34a5106301fb632274ca37242cd0c9d3e64dbece371a40a2d87"
dependencies = [
"webpki",
]
@@ -5831,20 +6016,10 @@ version = "0.1.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9193164d4de03a926d909d3bc7c30543cecb35400c02114792c2cae20d5e2dbb"
-[[package]]
-name = "wepoll-ffi"
-version = "0.1.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d743fdedc5c64377b5fc2bc036b01c7fd642205a0d96356034ae3404d49eb7fb"
-dependencies = [
- "cc",
-]
-
[[package]]
name = "wgpu"
-version = "0.15.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d745a1b6d91d85c33defbb29f0eee0450e1d2614d987e14bf6baf26009d132d7"
+version = "0.16.0"
+source = "git+https://github.com/rerun-io/wgpu?rev=de497aeda152a3515bac5eb4bf1b17f1757b9dac#de497aeda152a3515bac5eb4bf1b17f1757b9dac"
dependencies = [
"arrayvec",
"cfg-if",
@@ -5866,20 +6041,19 @@ dependencies = [
[[package]]
name = "wgpu-core"
-version = "0.15.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7131408d940e335792645a98f03639573b0480e9e2e7cddbbab74f7c6d9f3fff"
+version = "0.16.0"
+source = "git+https://github.com/rerun-io/wgpu?rev=de497aeda152a3515bac5eb4bf1b17f1757b9dac#de497aeda152a3515bac5eb4bf1b17f1757b9dac"
dependencies = [
"arrayvec",
"bit-vec",
- "bitflags",
+ "bitflags 2.1.0",
"codespan-reporting",
- "fxhash",
"log",
"naga",
"parking_lot 0.12.1",
"profiling",
"raw-window-handle",
+ "rustc-hash",
"smallvec",
"thiserror",
"web-sys",
@@ -5889,20 +6063,18 @@ dependencies = [
[[package]]
name = "wgpu-hal"
-version = "0.15.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bdcf61a283adc744bb5453dd88ea91f3f86d5ca6b027661c6c73c7734ae0288b"
+version = "0.16.0"
+source = "git+https://github.com/rerun-io/wgpu?rev=de497aeda152a3515bac5eb4bf1b17f1757b9dac#de497aeda152a3515bac5eb4bf1b17f1757b9dac"
dependencies = [
"android_system_properties",
"arrayvec",
"ash",
"bit-set",
- "bitflags",
+ "bitflags 2.1.0",
"block",
"core-graphics-types",
"d3d12",
"foreign-types",
- "fxhash",
"glow",
"gpu-alloc",
"gpu-allocator",
@@ -5921,6 +6093,7 @@ dependencies = [
"range-alloc",
"raw-window-handle",
"renderdoc-sys",
+ "rustc-hash",
"smallvec",
"thiserror",
"wasm-bindgen",
@@ -5931,11 +6104,10 @@ dependencies = [
[[package]]
name = "wgpu-types"
-version = "0.15.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "32444e121b0bd00cb02c0de32fde457a9491bd44e03e7a5db6df9b1da2f6f110"
+version = "0.16.0"
+source = "git+https://github.com/rerun-io/wgpu?rev=de497aeda152a3515bac5eb4bf1b17f1757b9dac#de497aeda152a3515bac5eb4bf1b17f1757b9dac"
dependencies = [
- "bitflags",
+ "bitflags 2.1.0",
"js-sys",
"web-sys",
]
@@ -5953,9 +6125,9 @@ dependencies = [
[[package]]
name = "widestring"
-version = "0.5.1"
+version = "1.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "17882f045410753661207383517a6f62ec3dbeb6a4ed2acce01f0728238d1983"
+checksum = "653f141f39ec16bba3c5abe400a0c60da7468261cc2cbf36805022876bc721a8"
[[package]]
name = "winapi"
@@ -6006,6 +6178,15 @@ dependencies = [
"windows-targets",
]
+[[package]]
+name = "windows"
+version = "0.46.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cdacb41e6a96a052c6cb63a144f24900236121c6f63f4f8219fef5977ecb0c25"
+dependencies = [
+ "windows-targets",
+]
+
[[package]]
name = "windows-sys"
version = "0.42.0"
@@ -6032,9 +6213,9 @@ dependencies = [
[[package]]
name = "windows-targets"
-version = "0.42.1"
+version = "0.42.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8e2522491fbfcd58cc84d47aeb2958948c4b8982e9a2d8a2a35bbaed431390e7"
+checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071"
dependencies = [
"windows_aarch64_gnullvm",
"windows_aarch64_msvc",
@@ -6047,54 +6228,54 @@ dependencies = [
[[package]]
name = "windows_aarch64_gnullvm"
-version = "0.42.1"
+version = "0.42.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8c9864e83243fdec7fc9c5444389dcbbfd258f745e7853198f365e3c4968a608"
+checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8"
[[package]]
name = "windows_aarch64_msvc"
-version = "0.42.1"
+version = "0.42.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4c8b1b673ffc16c47a9ff48570a9d85e25d265735c503681332589af6253c6c7"
+checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43"
[[package]]
name = "windows_i686_gnu"
-version = "0.42.1"
+version = "0.42.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "de3887528ad530ba7bdbb1faa8275ec7a1155a45ffa57c37993960277145d640"
+checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f"
[[package]]
name = "windows_i686_msvc"
-version = "0.42.1"
+version = "0.42.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bf4d1122317eddd6ff351aa852118a2418ad4214e6613a50e0191f7004372605"
+checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060"
[[package]]
name = "windows_x86_64_gnu"
-version = "0.42.1"
+version = "0.42.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c1040f221285e17ebccbc2591ffdc2d44ee1f9186324dd3e84e99ac68d699c45"
+checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36"
[[package]]
name = "windows_x86_64_gnullvm"
-version = "0.42.1"
+version = "0.42.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "628bfdf232daa22b0d64fdb62b09fcc36bb01f05a3939e20ab73aaf9470d0463"
+checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3"
[[package]]
name = "windows_x86_64_msvc"
-version = "0.42.1"
+version = "0.42.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "447660ad36a13288b1db4d4248e857b510e8c3a225c822ba4fb748c0aafecffd"
+checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0"
[[package]]
name = "winit"
-version = "0.28.1"
+version = "0.28.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0c4755d4ba0e3d30fc7beef2095e246b1e6a6fad0717608bcb87a2df4b003bcf"
+checksum = "4f504e8c117b9015f618774f8d58cd4781f5a479bc41079c064f974cbb253874"
dependencies = [
"android-activity",
- "bitflags",
+ "bitflags 1.3.2",
"cfg_aliases",
"core-foundation",
"core-graphics",
@@ -6109,7 +6290,7 @@ dependencies = [
"orbclient",
"percent-encoding",
"raw-window-handle",
- "redox_syscall 0.3.4",
+ "redox_syscall 0.3.5",
"sctk-adwaita",
"smithay-client-toolkit",
"wasm-bindgen",
@@ -6122,6 +6303,15 @@ dependencies = [
"x11-dl",
]
+[[package]]
+name = "winnow"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ae8970b36c66498d8ff1d66685dc86b91b29db0c7739899012f63a63814b4b28"
+dependencies = [
+ "memchr",
+]
+
[[package]]
name = "wit-parser"
version = "0.2.0"
@@ -6188,12 +6378,12 @@ dependencies = [
[[package]]
name = "x11-dl"
-version = "2.20.0"
+version = "2.21.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0c83627bc137605acc00bb399c7b908ef460b621fc37c953db2b09f88c449ea6"
+checksum = "38735924fedd5314a6e548792904ed8c6de6636285cb9fec04d5b1db85c1516f"
dependencies = [
- "lazy_static",
"libc",
+ "once_cell",
"pkg-config",
]
@@ -6204,7 +6394,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "592b4883219f345e712b3209c62654ebda0bb50887f330cbd018d0f654bfd507"
dependencies = [
"gethostname",
- "nix 0.24.2",
+ "nix 0.24.3",
"winapi",
"winapi-wsapoll",
"x11rb-protocol",
@@ -6216,7 +6406,7 @@ version = "0.10.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "56b245751c0ac9db0e006dc812031482784e434630205a93c73cfefcaabeac67"
dependencies = [
- "nix 0.24.2",
+ "nix 0.24.3",
]
[[package]]
@@ -6299,7 +6489,7 @@ dependencies = [
"proc-macro2",
"quote",
"regex",
- "syn 1.0.103",
+ "syn 1.0.109",
]
[[package]]
@@ -6315,9 +6505,9 @@ dependencies = [
[[package]]
name = "zip"
-version = "0.6.3"
+version = "0.6.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "537ce7411d25e54e8ae21a7ce0b15840e7bfcff15b51d697ec3266cc76bdf080"
+checksum = "0445d0fbc924bb93539b4316c11afb121ea39296f99a3c4c9edad09e3658cdef"
dependencies = [
"byteorder",
"crc32fast",
@@ -6346,12 +6536,13 @@ dependencies = [
[[package]]
name = "zstd-sys"
-version = "2.0.3+zstd.1.5.2"
+version = "2.0.7+zstd.1.5.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "44ccf97612ac95f3ccb89b2d7346b345e52f1c3019be4984f0455fb4ba991f8a"
+checksum = "94509c3ba2fe55294d752b79842c530ccfab760192521df74a081a78d2b3c7f5"
dependencies = [
"cc",
"libc",
+ "pkg-config",
]
[[package]]
@@ -6377,7 +6568,7 @@ dependencies = [
"proc-macro-crate",
"proc-macro2",
"quote",
- "syn 1.0.103",
+ "syn 1.0.109",
"zvariant_utils",
]
@@ -6389,5 +6580,5 @@ checksum = "53b22993dbc4d128a17a3b6c92f1c63872dd67198537ee728d8b5d7c40640a8b"
dependencies = [
"proc-macro2",
"quote",
- "syn 1.0.103",
+ "syn 1.0.109",
]
diff --git a/Cargo.toml b/Cargo.toml
index 6a433c6954ee..955953fc76c3 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -16,39 +16,39 @@ include = ["../../LICENSE-APACHE", "../../LICENSE-MIT", "**/*.rs", "Cargo.toml"]
license = "MIT OR Apache-2.0"
repository = "https://github.com/rerun-io/rerun"
rust-version = "1.67"
-version = "0.4.0"
+version = "0.6.0-alpha.0"
[workspace.dependencies]
# When using alpha-release, always use exact version, e.g. `version = "=0.x.y-alpha.z"
# This is because we treat alpha-releases as incompatible, but semver doesn't.
# In particular: if we compile rerun 0.3.0-alpha.0 we only want it to use
# re_log_types 0.3.0-alpha.0, NOT 0.3.0-alpha.4 even though it is newer and semver-compatible.
-re_analytics = { path = "crates/re_analytics", version = "0.4.0" }
-re_arrow_store = { path = "crates/re_arrow_store", version = "0.4.0" }
-re_build_build_info = { path = "crates/re_build_build_info", version = "0.4.0" }
-re_build_info = { path = "crates/re_build_info", version = "0.4.0" }
-re_build_web_viewer = { path = "crates/re_build_web_viewer", version = "0.4.0" }
-re_data_store = { path = "crates/re_data_store", version = "0.4.0" }
-re_error = { path = "crates/re_error", version = "0.4.0" }
-re_format = { path = "crates/re_format", version = "0.4.0" }
-re_int_histogram = { path = "crates/re_int_histogram", version = "0.4.0" }
-re_log = { path = "crates/re_log", version = "0.4.0" }
-re_log_encoding = { path = "crates/re_log_encoding", version = "0.4.0" }
-re_log_types = { path = "crates/re_log_types", version = "0.4.0" }
-re_memory = { path = "crates/re_memory", version = "0.4.0" }
-re_query = { path = "crates/re_query", version = "0.4.0" }
-re_renderer = { path = "crates/re_renderer", version = "0.4.0" }
-re_sdk = { path = "crates/re_sdk", version = "0.4.0" }
-re_sdk_comms = { path = "crates/re_sdk_comms", version = "0.4.0" }
-re_smart_channel = { path = "crates/re_smart_channel", version = "0.4.0" }
-re_string_interner = { path = "crates/re_string_interner", version = "0.4.0" }
-re_tensor_ops = { path = "crates/re_tensor_ops", version = "0.4.0" }
-re_tuid = { path = "crates/re_tuid", version = "0.4.0" }
-re_ui = { path = "crates/re_ui", version = "0.4.0" }
-re_viewer = { path = "crates/re_viewer", version = "0.4.0" }
-re_web_viewer_server = { path = "crates/re_web_viewer_server", version = "0.4.0" }
-re_ws_comms = { path = "crates/re_ws_comms", version = "0.4.0" }
-rerun = { path = "crates/rerun", version = "0.4.0" }
+re_sdk_comms = { path = "crates/re_sdk_comms", version = "=0.6.0-alpha.0" }
+re_analytics = { path = "crates/re_analytics", version = "=0.6.0-alpha.0" }
+re_arrow_store = { path = "crates/re_arrow_store", version = "=0.6.0-alpha.0" }
+re_build_build_info = { path = "crates/re_build_build_info", version = "=0.6.0-alpha.0" }
+re_build_info = { path = "crates/re_build_info", version = "=0.6.0-alpha.0" }
+re_build_web_viewer = { path = "crates/re_build_web_viewer", version = "=0.6.0-alpha.0" }
+re_data_store = { path = "crates/re_data_store", version = "=0.6.0-alpha.0" }
+re_error = { path = "crates/re_error", version = "=0.6.0-alpha.0" }
+re_format = { path = "crates/re_format", version = "=0.6.0-alpha.0" }
+re_int_histogram = { path = "crates/re_int_histogram", version = "=0.6.0-alpha.0" }
+re_log = { path = "crates/re_log", version = "=0.6.0-alpha.0" }
+re_log_encoding = { path = "crates/re_log_encoding", version = "=0.6.0-alpha.0" }
+re_log_types = { path = "crates/re_log_types", version = "=0.6.0-alpha.0" }
+re_memory = { path = "crates/re_memory", version = "=0.6.0-alpha.0" }
+re_query = { path = "crates/re_query", version = "=0.6.0-alpha.0" }
+re_renderer = { path = "crates/re_renderer", version = "=0.6.0-alpha.0", default-features = false }
+re_sdk = { path = "crates/re_sdk", version = "=0.6.0-alpha.0" }
+re_smart_channel = { path = "crates/re_smart_channel", version = "=0.6.0-alpha.0" }
+re_string_interner = { path = "crates/re_string_interner", version = "=0.6.0-alpha.0" }
+re_tensor_ops = { path = "crates/re_tensor_ops", version = "=0.6.0-alpha.0" }
+re_tuid = { path = "crates/re_tuid", version = "=0.6.0-alpha.0" }
+re_ui = { path = "crates/re_ui", version = "=0.6.0-alpha.0" }
+re_viewer = { path = "crates/re_viewer", version = "=0.6.0-alpha.0", default-features = false }
+re_web_viewer_server = { path = "crates/re_web_viewer_server", version = "=0.6.0-alpha.0" }
+re_ws_comms = { path = "crates/re_ws_comms", version = "=0.6.0-alpha.0" }
+rerun = { path = "crates/rerun", version = "=0.6.0-alpha.0" }
ahash = "0.8"
anyhow = "1.0"
@@ -59,10 +59,10 @@ comfy-table = { version = "6.1", default-features = false }
ctrlc = { version = "3.0", features = ["termination"] }
ecolor = "0.21.0"
eframe = { version = "0.21.3", default-features = false }
-egui = "0.21.0"
+egui = { version = "0.21.0", features = ["extra_debug_asserts", "log"] }
egui-wgpu = "0.21.0"
egui_dock = "0.4"
-egui_extras = "0.21.0"
+egui_extras = { version = "0.21.0", features = ["log"] }
emath = "0.21.0"
enumset = "1.0.12"
epaint = "0.21.0"
@@ -85,9 +85,8 @@ thiserror = "1.0"
time = { version = "0.3", features = ["wasm-bindgen"] }
tinyvec = { version = "1.6", features = ["alloc", "rustc_1_55"] }
tokio = "1.24"
-wgpu = { version = "0.15.1", default-features = false }
-wgpu-core = { version = "0.15.1", default-features = false }
-wgpu-hal = { version = "0.15.4", default-features = false }
+wgpu = { version = "0.16" }
+wgpu-core = { version = "0.16" }
[profile.dev]
@@ -112,3 +111,17 @@ debug = true
# If that is not possible, patch to a branch that has a PR open on the upstream repo.
# As a last resport, patch with a commit to our own repository.
# ALWAYS document what PR the commit hash is part of, or when it was merged into the upstream trunk.
+
+# TODO(andreas/emilk): Update to a stable egui version
+# wgpu 0.16 support, device configuration dependent on adapter
+ecolor = { git = "https://github.com/emilk/egui", rev = "f76eefb98d23cbf71989255aafe75a07d343f6ed" }
+eframe = { git = "https://github.com/emilk/egui", rev = "f76eefb98d23cbf71989255aafe75a07d343f6ed" }
+egui = { git = "https://github.com/emilk/egui", rev = "f76eefb98d23cbf71989255aafe75a07d343f6ed" }
+egui-wgpu = { git = "https://github.com/emilk/egui", rev = "f76eefb98d23cbf71989255aafe75a07d343f6ed" }
+egui_extras = { git = "https://github.com/emilk/egui", rev = "f76eefb98d23cbf71989255aafe75a07d343f6ed" }
+emath = { git = "https://github.com/emilk/egui", rev = "f76eefb98d23cbf71989255aafe75a07d343f6ed" }
+
+# TODO(andreas): Either work around this issue in wgpu-egui (never discard command buffers) or wait for wgpu patch release.
+# Fix for command buffer dropping crash https://github.com/gfx-rs/wgpu/pull/3726
+wgpu = { git = "https://github.com/rerun-io/wgpu", rev = "de497aeda152a3515bac5eb4bf1b17f1757b9dac" }
+wgpu-core = { git = "https://github.com/rerun-io/wgpu", rev = "de497aeda152a3515bac5eb4bf1b17f1757b9dac" }
diff --git a/README.md b/README.md
index bae9d9f0f30c..ee844ca6a8bf 100644
--- a/README.md
+++ b/README.md
@@ -5,7 +5,7 @@
-
+
@@ -32,57 +32,59 @@ rr.log_rect("car", bbox)
## Getting started
-* **Python**: `pip install rerun-sdk`
-* **Rust**: `cargo add rerun`
-* **C / C++**: Coming soon
+
+- **Python**: `pip install depthai-viewer`
+- **Rust**: `cargo add rerun`
+- **C / C++**: Coming soon
### Rerun Viewer binary
+
Both the Python and Rust library can start the Rerun Viewer, but to stream log data over the network or load our `.rrd` data files you also need the `rerun` binary.
-It can be installed with `pip install rerun-sdk` or with `cargo install rerun`.
+It can be installed with `pip install depthai-viewer` or with `cargo install rerun`.
You should now be able to run `rerun --help` in any terminal.
-
### Documentation
+
- 📚 [High-level docs](http://rerun.io/docs)
- ⚙️ [Examples](examples)
- 🐍 [Python API docs](https://ref.rerun.io/docs/python)
- 🦀 [Rust API docs](https://docs.rs/rerun/)
- ⁉️ [Troubleshooting](https://www.rerun.io/docs/getting-started/troubleshooting)
-
## Status
+
We are in early beta.
There are many features we want to add, and the API is still evolving.
_Expect breaking changes!_
Some shortcomings:
-* Big points clouds (1M+) are slow ([#1136](https://github.com/rerun-io/rerun/issues/1136))
-* The data you want to visualize must fit in RAM.
+
+- Big points clouds (1M+) are slow ([#1136](https://github.com/rerun-io/rerun/issues/1136))
+- The data you want to visualize must fit in RAM.
- See for how to bound memory use
- We plan on having a disk-based data store some time in the future
-* The Rust library takes a long time to compile
+- The Rust library takes a long time to compile
- We have way too many big dependencies, and we are planning on improving the situation ([#1316](https://github.com/rerun-io/rerun/pull/1316))
-
## Business model
+
Rerun uses an open-core model. Everything in this repository will stay open source and free (both as in beer and as in freedom).
In the future, Rerun will offer a commercial product that builds on top of the core free project.
The Rerun open source project targets the needs of individual developers.
The commercial product targets the needs specific to teams that build and run computer vision and robotics products.
-
# Development
-* [`ARCHITECTURE.md`](ARCHITECTURE.md)
-* [`BUILD.md`](BUILD.md)
-* [`rerun_py/README.md`](rerun_py/README.md) - build instructions for Python SDK
-* [`CODE_OF_CONDUCT.md`](CODE_OF_CONDUCT.md)
-* [`CODE_STYLE.md`](CODE_STYLE.md)
-* [`CONTRIBUTING.md`](CONTRIBUTING.md)
-* [`RELEASES.md`](RELEASES.md)
+- [`ARCHITECTURE.md`](ARCHITECTURE.md)
+- [`BUILD.md`](BUILD.md)
+- [`rerun_py/README.md`](rerun_py/README.md) - build instructions for Python SDK
+- [`CODE_OF_CONDUCT.md`](CODE_OF_CONDUCT.md)
+- [`CODE_STYLE.md`](CODE_STYLE.md)
+- [`CONTRIBUTING.md`](CONTRIBUTING.md)
+- [`RELEASES.md`](RELEASES.md)
## Installing a pre-release Python SDK
diff --git a/RELEASES.md b/RELEASES.md
index 6ab1bded58fd..c83448189c04 100644
--- a/RELEASES.md
+++ b/RELEASES.md
@@ -1,24 +1,26 @@
# Releases and versioning
-This document describes the current release and versioning strategy. This strategy is likely to change as Rerun matures.
+This document describes the current release and versioning strategy. This strategy is likely to change as Rerun matures.
## See also
-* [`ARCHITECTURE.md`](ARCHITECTURE.md)
-* [`BUILD.md`](BUILD.md)
-* [`CODE_OF_CONDUCT.md`](CODE_OF_CONDUCT.md)
-* [`CODE_STYLE.md`](CODE_STYLE.md)
-* [`CONTRIBUTING.md`](CONTRIBUTING.md)
+- [`ARCHITECTURE.md`](ARCHITECTURE.md)
+- [`BUILD.md`](BUILD.md)
+- [`CODE_OF_CONDUCT.md`](CODE_OF_CONDUCT.md)
+- [`CODE_STYLE.md`](CODE_STYLE.md)
+- [`CONTRIBUTING.md`](CONTRIBUTING.md)
## Release Cadence
-New Rerun versions are released every two weeks. Sometimes we do out-of-schedule patch releases.
+New Rerun versions are released every two weeks. Sometimes we do out-of-schedule patch releases.
## Library versioning and release cadence
+
Each release include new versions of:
-* The Python SDK
-* The Rust SDK
-* All rust crates
+
+- The Python SDK
+- The Rust SDK
+- All rust crates
We use semantic versioning. All versions are increased in lockstep, with a minor version bump each time (`0.1.0`, `0.2.0`, `0.3.0`, …).
@@ -28,121 +30,127 @@ In rare cases we will do patch releases, e.g. `0.3.1`, when there is a critical
We sometimes do pre-releases. Then we use the versioning `0.2.0-alpha.0` etc.
-
## Data and communication versioning
+
We have not yet committed to any backwards or forwards compatibility.
We tag all data files (`.rrd` files) and communication protocols with the rerun version number. If there is a version mismatch, a warning is logged, but an attempt is still made to load the older or newer data.
-
## Releases
+
Release builds of the Python Wheels are triggered by pushing a release tag to GitHub in the form `v0.2.0`.
If we are doing a patch release, we do a branch off of the latest release tag (e.g. `v0.3.0`) and cherry-pick any fixes we want into that branch.
### Release checklist
+
Go through this checklist from top to bottom, and check each item before moving onto the next.
This is a living document. Strive to improve it on each new release.
-* [ ] Create a release branch called `release-0.x.y`
-* [ ] If it is a patch release branch off `latest` and cherry-pick the commits that should be included
-* [ ] Update `CHANGELOG.md` with the new version number with:
- * [ ] A one-line summary of the release
- * [ ] A multi-line summary of the release
- * [ ] A gif showing a major new feature
- * [ ] Run `pip install GitPython && scripts/generate_changelog.py`
- * [ ] Edit PR descriptions/labels to improve the generated changelog
- * [ ] Copy-paste the results into `CHANGELOG.md`.
- * [ ] Editorialize the changelog if necessary
- * [ ] Make sure the changelog includes instructions for handling any breaking changes
- * [ ] Commit and push the changelog
-* [ ] Create a draft PR containing:
- * [ ] One-line summary of the release
- * [ ] A multi-line summary of the release
- * [ ] A gif showing a major new feature
-* [ ] Test the branch ([see below](#testing-a-release))
-* [ ] Open the PR up for review with the `⛴ release` label
-* [ ] Bump version number in root `Cargo.toml`.
-* [ ] Check that CI is green
-* [ ] Publish the crates (see below)
-* [ ] `git tag -a v0.x.y -m 'Release 0.x.y - summary'`
- * `git push --tags`
- * This will trigger a PyPI release when pushed
-* [ ] `git pull --tags && git tag -d latest && git tag -a latest -m 'Latest release' && git push --tags origin latest --force`
-* [ ] Manually trigger a new web viewer build and upload at https://github.com/rerun-io/rerun/actions/workflows/rust.yml
-* [ ] Wait for CI to build release artifacts and publish them on GitHub and PyPI.
-* [ ] Merge PR
-* [ ] Edit the GitHub release at https://github.com/rerun-io/rerun/releases/edit/v0.x.0
- * [ ] Mark it as as the latest release
- * [ ] Paste in the `CHANGELOG.md`
-* [ ] Wait for wheel to appear on https://pypi.org/project/rerun-sdk/
-* [ ] Test the released Python and Rust libraries (see below)
-* [ ] Wait for documentation to build: https://docs.rs/releases/queue
-* [ ] Point to the latest release via instructions in .
-* [ ] Post on:
- * [ ] Community Discord
- * [ ] Rerun Twitter
- * [ ] Reddit?
-
+- [ ] Create a release branch called `release-0.x.y`
+- [ ] If it is a patch release branch off `latest` and cherry-pick the commits that should be included
+- [ ] Update `CHANGELOG.md` with the new version number with:
+ - [ ] A one-line summary of the release
+ - [ ] A multi-line summary of the release
+ - [ ] A gif showing a major new feature
+ - [ ] Run `pip install GitPython && scripts/generate_changelog.py`
+ - [ ] Edit PR descriptions/labels to improve the generated changelog
+ - [ ] Copy-paste the results into `CHANGELOG.md`.
+ - [ ] Editorialize the changelog if necessary
+ - [ ] Make sure the changelog includes instructions for handling any breaking changes
+ - [ ] Commit and push the changelog
+- [ ] Create a draft PR containing:
+ - [ ] One-line summary of the release
+ - [ ] A multi-line summary of the release
+ - [ ] A gif showing a major new feature
+- [ ] Test the branch ([see below](#testing-a-release))
+- [ ] Open the PR up for review with the `⛴ release` label
+- [ ] Bump version number in root `Cargo.toml`.
+- [ ] Check that CI is green
+- [ ] Publish the crates (see below)
+- [ ] `git tag -a v0.x.y -m 'Release 0.x.y - summary'`
+ - `git push --tags`
+ - This will trigger a PyPI release when pushed
+- [ ] `git pull --tags && git tag -d latest && git tag -a latest -m 'Latest release' && git push --tags origin latest --force`
+- [ ] Manually trigger a new web viewer build and upload at https://github.com/rerun-io/rerun/actions/workflows/rust.yml
+- [ ] Wait for CI to build release artifacts and publish them on GitHub and PyPI.
+- [ ] Merge PR
+- [ ] Edit the GitHub release at https://github.com/rerun-io/rerun/releases/edit/v0.x.0
+ - [ ] Mark it as as the latest release
+ - [ ] Paste in the `CHANGELOG.md`
+- [ ] Wait for wheel to appear on https://pypi.org/project/depthai-viewer/
+- [ ] Test the released Python and Rust libraries (see below)
+- [ ] Wait for documentation to build: https://docs.rs/releases/queue
+- [ ] Point to the latest release via instructions in .
+- [ ] Post on:
+ - [ ] Community Discord
+ - [ ] Rerun Twitter
+ - [ ] Reddit?
### Testing a release
+
Before pushing the release tag:
- * [ ] `just py-run-all`
- * [ ] Test the web viewer:
- * [ ] `cargo run -p rerun --features web_viewer -- --web-viewer ../nyud.rrd`
- * [ ] Test on:
- * [ ] Chromium
- * [ ] Firefox
- * [ ] Mobile
+
+- [ ] `just py-run-all`
+- [ ] Test the web viewer:
+ - [ ] `cargo run -p rerun --features web_viewer -- --web-viewer ../nyud.rrd`
+ - [ ] Test on:
+ - [ ] Chromium
+ - [ ] Firefox
+ - [ ] Mobile
After tagging and the CI has published:
- * [ ] Test the Python packages from PyPI: `pip install rerun_sdk==0.x.0a1`
- * [ ] Test rust install version: `cargo install -f rerun@0.x.0-alpha.1 -F web_viewer && rerun --web-viewer api.rrd`
- * [ ] Test rust crate: Modify Cargo.toml of any example to not point to the workspace
- * [ ] run with `--serve` to test web player
+
+- [ ] Test the Python packages from PyPI: `pip install rerun_sdk==0.x.0a1`
+- [ ] Test rust install version: `cargo install -f rerun@0.x.0-alpha.1 -F web_viewer && rerun --web-viewer api.rrd`
+- [ ] Test rust crate: Modify Cargo.toml of any example to not point to the workspace
+ - [ ] run with `--serve` to test web player
Checklist for testing alpha releases:
-* Windows
- * [ ] Python Wheel
- * [ ] Web
- * [ ] Native
- * [ ] Rust crate
- * [ ] Web
- * [ ] Native
- * [ ] Rust install
- * [ ] Web
- * [ ] Native
-* Linux
- * [ ] Python Wheel
- * [ ] Web
- * [ ] Native
- * [ ] Rust crate
- * [ ] Web
- * [ ] Native
- * [ ] Rust install
- * [ ] Web
- * [ ] Native
-* Mac
- * [ ] Python Wheel
- * [ ] Web
- * [ ] Native
- * [ ] Rust crate
- * [ ] Web
- * [ ] Native
- * [ ] Rust install
- * [ ] Web
- * [ ] Native
+- Windows
+ - [ ] Python Wheel
+ - [ ] Web
+ - [ ] Native
+ - [ ] Rust crate
+ - [ ] Web
+ - [ ] Native
+ - [ ] Rust install
+ - [ ] Web
+ - [ ] Native
+- Linux
+ - [ ] Python Wheel
+ - [ ] Web
+ - [ ] Native
+ - [ ] Rust crate
+ - [ ] Web
+ - [ ] Native
+ - [ ] Rust install
+ - [ ] Web
+ - [ ] Native
+- Mac
+ - [ ] Python Wheel
+ - [ ] Web
+ - [ ] Native
+ - [ ] Rust crate
+ - [ ] Web
+ - [ ] Native
+ - [ ] Rust install
+ - [ ] Web
+ - [ ] Native
## Publishing
+
First login as https://crates.io/users/rerunio with and API key you get from Emil:
```bash
cargo login $API_KEY
```
------------------------------------------------------------------------------------------------
-!! IMPORTANT !! Shut off VSCode, and don't touch anything while `publish_crates.sh` is running!
-!! IMPORTANT !! Read `publish_crates.sh` for details
------------------------------------------------------------------------------------------------
+---
+
+!! IMPORTANT !! Shut off VSCode, and don't touch anything while `publish_crates.sh` is running!
+!! IMPORTANT !! Read `publish_crates.sh` for details
+
+---
./scripts/publish_crates.sh --execute
diff --git a/ci_docker/Dockerfile b/ci_docker/Dockerfile
index 80c2f73bf820..f3fa89019ce5 100644
--- a/ci_docker/Dockerfile
+++ b/ci_docker/Dockerfile
@@ -58,7 +58,8 @@ RUN set -eux; \
# Install some cargo tools we know we'll always need
# We can't do this until after we've installed rust / cargo above
RUN cargo install cargo-deny && \
- cargo install cargo-cranky
+ cargo install cargo-cranky && \
+ cargo install cargo-benchcmp
# Install the python build dependencies
ADD rerun_py/requirements-build.txt requirements-build.txt
diff --git a/clippy.toml b/clippy.toml
index 4da41d009fbc..bd8f68dcbf99 100644
--- a/clippy.toml
+++ b/clippy.toml
@@ -1,4 +1,4 @@
-# There is also a clippy_wasm/clippy.toml which forbids some mthods that are not available in wasm.
+# There is also a scripts/clippy_wasm/clippy.toml which forbids some methods that are not available in wasm.
msrv = "1.67"
@@ -47,7 +47,7 @@ disallowed-types = [
# Allow-list of words for markdown in dosctrings https://rust-lang.github.io/rust-clippy/master/index.html#doc_markdown
doc-valid-idents = [
- # You must also update the same list in `clippy_wasm/clippy.toml`!
+ # You must also update the same list in `scripts/clippy_wasm/clippy.toml`!
"GitHub",
"GLB",
"GLTF",
diff --git a/crates/re_analytics/src/cli.rs b/crates/re_analytics/src/cli.rs
index 7055563dcd92..4b146daa6996 100644
--- a/crates/re_analytics/src/cli.rs
+++ b/crates/re_analytics/src/cli.rs
@@ -83,7 +83,7 @@ const DETAILS: &str = "
What data is collected?
- The exact set of analytics events and parameters can be found here:
https://github.com/rerun-io/rerun/blob/GIT_HASH/crates/re_viewer/src/viewer_analytics.rs
- - We collect high level events about the usage of the Rerun Viewer. For example:
+ - We collect high level events about the usage of the Depthai Viewer. For example:
- The event 'Viewer Opened' helps us estimate how often Rerun is used.
- The event 'Data Source Connected' helps us understand if users tend to use live
data sources or recordings most, which helps us prioritize features.
diff --git a/crates/re_analytics/src/lib.rs b/crates/re_analytics/src/lib.rs
index 9938887a5f55..8f346c3ea3df 100644
--- a/crates/re_analytics/src/lib.rs
+++ b/crates/re_analytics/src/lib.rs
@@ -211,7 +211,7 @@ const DISCLAIMER: &str = "
help the Rerun team improve the library.
Summary:
- - We only collect high level events about the features used within the Rerun Viewer.
+ - We only collect high level events about the features used within the Depthai Viewer.
- The actual data you log to Rerun, such as point clouds, images, or text logs,
will never be collected.
- We don't log IP addresses.
diff --git a/crates/re_build_info/src/crate_version.rs b/crates/re_build_info/src/crate_version.rs
index 9a29e8e734a7..a4c3ee5e04bf 100644
--- a/crates/re_build_info/src/crate_version.rs
+++ b/crates/re_build_info/src/crate_version.rs
@@ -55,7 +55,7 @@ impl CrateVersion {
pub fn from_bytes([major, minor, patch, suffix_byte]: [u8; 4]) -> Self {
let is_alpha = (suffix_byte & IS_ALPHA_BIT) != 0;
let is_prerelease = (suffix_byte & IS_PRERELEASE_BIT) != 0;
- let alpha_version = suffix_byte & 0b0111_1111;
+ let alpha_version = suffix_byte & !(IS_ALPHA_BIT | IS_PRERELEASE_BIT);
Self {
major,
@@ -273,6 +273,22 @@ fn test_format_parse_roundtrip() {
}
}
+#[test]
+fn test_format_parse_roundtrip_bytes() {
+ let parse = CrateVersion::parse;
+ for version in [
+ "0.2.0",
+ "1.2.3",
+ "12.23.24",
+ "12.23.24-alpha.31",
+ "12.23.24-alpha.31+foo",
+ ] {
+ let version = parse(version);
+ let bytes = version.to_bytes();
+ assert_eq!(CrateVersion::from_bytes(bytes), version);
+ }
+}
+
#[test]
fn test_compatibility() {
fn are_compatible(a: &str, b: &str) -> bool {
diff --git a/crates/re_build_web_viewer/src/lib.rs b/crates/re_build_web_viewer/src/lib.rs
index 8ec1d53f0a88..c5f1c179f10a 100644
--- a/crates/re_build_web_viewer/src/lib.rs
+++ b/crates/re_build_web_viewer/src/lib.rs
@@ -12,7 +12,7 @@ fn target_directory() -> Utf8PathBuf {
}
/// Build `re_viewer` as Wasm, generate .js bindings for it, and place it all into the `./web_viewer` folder.
-pub fn build(release: bool) {
+pub fn build(release: bool, webgpu: bool) {
eprintln!("Building web viewer wasm…");
eprintln!("We assume you've already run ./scripts/setup_web.sh");
@@ -63,7 +63,13 @@ pub fn build(release: bool) {
"wasm32-unknown-unknown",
"--target-dir",
target_wasm_dir.as_str(),
+ "--no-default-features",
]);
+ if webgpu {
+ cmd.arg("--features=analytics");
+ } else {
+ cmd.arg("--features=analytics,webgl");
+ }
if release {
cmd.arg("--release");
}
@@ -71,6 +77,7 @@ pub fn build(release: bool) {
// This is required to enable the web_sys clipboard API which egui_web uses
// https://rustwasm.github.io/wasm-bindgen/api/web_sys/struct.Clipboard.html
// https://rustwasm.github.io/docs/wasm-bindgen/web-sys/unstable-apis.html
+ // Furthermore, it's necessary for unstable WebGPU apis to work.
cmd.env("RUSTFLAGS", "--cfg=web_sys_unstable_apis");
// When executing this script from a Rust build script, do _not_, under any circumstances,
diff --git a/crates/re_build_web_viewer/src/main.rs b/crates/re_build_web_viewer/src/main.rs
index 137cd401a742..1c3d2249d26f 100644
--- a/crates/re_build_web_viewer/src/main.rs
+++ b/crates/re_build_web_viewer/src/main.rs
@@ -2,6 +2,7 @@ use std::process::ExitCode;
fn main() -> ExitCode {
let mut release = None;
+ let mut webgpu = false;
for arg in std::env::args().skip(1) {
match arg.as_str() {
@@ -17,6 +18,9 @@ fn main() -> ExitCode {
assert!(release.is_none(), "Can't set both --release and --debug");
release = Some(true);
}
+ "--webgpu" => {
+ webgpu = true;
+ }
_ => {
print_help();
return ExitCode::FAILURE;
@@ -29,7 +33,7 @@ fn main() -> ExitCode {
return ExitCode::FAILURE;
};
- re_build_web_viewer::build(release);
+ re_build_web_viewer::build(release, webgpu);
ExitCode::SUCCESS
}
@@ -41,6 +45,7 @@ fn print_help() {
--debug: Build a debug binary
--release: Compile for release, and run wasm-opt.
NOTE: --release also removes debug symbols which are otherwise useful for in-browser profiling.
+ --webgpu: Enable WebGPU support (experimental). If not set the viewer will use WebGL instead.
"
);
}
diff --git a/crates/re_data_store/src/entity_properties.rs b/crates/re_data_store/src/entity_properties.rs
index 9929ca4c13c3..889a0a8cc2cd 100644
--- a/crates/re_data_store/src/entity_properties.rs
+++ b/crates/re_data_store/src/entity_properties.rs
@@ -44,8 +44,14 @@ pub struct EntityProperties {
pub visible_history: ExtraQueryHistory,
pub interactive: bool,
+ /// Enable color mapping?
+ ///
/// What kind of color mapping should be applied (none, map, texture, transfer..)?
pub color_mapper: EditableAutoValue,
+ /// Points to an entity with an albedo texture.
+ ///
+ /// Only relevant if [`Self::color_mapper`] is set to `AlbedoTexture`.
+ pub albedo_texture: Option,
/// Distance of the projection plane (frustum far plane).
///
@@ -80,6 +86,7 @@ impl Default for EntityProperties {
backproject_depth: EditableAutoValue::Auto(true),
depth_from_world_scale: EditableAutoValue::default(),
backproject_radius_scale: EditableAutoValue::Auto(1.0),
+ albedo_texture: None,
}
}
}
@@ -94,7 +101,7 @@ impl EntityProperties {
interactive: self.interactive && child.interactive,
color_mapper: self.color_mapper.or(&child.color_mapper).clone(),
-
+ albedo_texture: self.albedo_texture.clone().or(child.albedo_texture.clone()),
pinhole_image_plane_distance: self
.pinhole_image_plane_distance
.or(&child.pinhole_image_plane_distance)
@@ -170,25 +177,27 @@ impl std::fmt::Display for Colormap {
pub enum ColorMapper {
/// Use a well-known color map, pre-implemented as a wgsl module.
Colormap(Colormap),
- // TODO(cmc): support textures.
+ /// Point to an entity with an albedo texture.
+ AlbedoTexture,
// TODO(cmc): support custom transfer functions.
}
+impl Default for ColorMapper {
+ #[inline]
+ fn default() -> Self {
+ Self::AlbedoTexture
+ }
+}
+
impl std::fmt::Display for ColorMapper {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
- ColorMapper::Colormap(colormap) => colormap.fmt(f),
+ ColorMapper::Colormap(colormap) => write!(f, "Map:{colormap}"),
+ ColorMapper::AlbedoTexture => write!(f, "Albedo texture"),
}
}
}
-impl Default for ColorMapper {
- #[inline]
- fn default() -> Self {
- Self::Colormap(Colormap::default())
- }
-}
-
// ----------------------------------------------------------------------------
/// Get the latest value for a given [`re_log_types::Component`].
diff --git a/crates/re_format/Cargo.toml b/crates/re_format/Cargo.toml
index 198768511bc0..b502f8f6eb4e 100644
--- a/crates/re_format/Cargo.toml
+++ b/crates/re_format/Cargo.toml
@@ -19,4 +19,4 @@ all-features = true
arrow2.workspace = true
arrow2_convert.workspace = true
comfy-table.workspace = true
-re_tuid.workspace = true
+re_tuid = { workspace = true, features = ["arrow2_convert"] }
diff --git a/crates/re_log_types/src/arrow_msg.rs b/crates/re_log_types/src/arrow_msg.rs
index 54e5c01b68e5..b83e24266d29 100644
--- a/crates/re_log_types/src/arrow_msg.rs
+++ b/crates/re_log_types/src/arrow_msg.rs
@@ -42,13 +42,13 @@ impl serde::Serialize for ArrowMsg {
let mut writer = StreamWriter::new(&mut buf, Default::default());
writer
.start(&self.schema, None)
- .map_err(|e| serde::ser::Error::custom(e.to_string()))?;
+ .map_err(|err| serde::ser::Error::custom(err.to_string()))?;
writer
.write(&self.chunk, None)
- .map_err(|e| serde::ser::Error::custom(e.to_string()))?;
+ .map_err(|err| serde::ser::Error::custom(err.to_string()))?;
writer
.finish()
- .map_err(|e| serde::ser::Error::custom(e.to_string()))?;
+ .map_err(|err| serde::ser::Error::custom(err.to_string()))?;
let mut inner = serializer.serialize_tuple(3)?;
inner.serialize_element(&self.table_id)?;
diff --git a/crates/re_log_types/src/component_types/arrow_convert_shims.rs b/crates/re_log_types/src/component_types/arrow_convert_shims.rs
index 8d196842169d..b78ff5f4c065 100644
--- a/crates/re_log_types/src/component_types/arrow_convert_shims.rs
+++ b/crates/re_log_types/src/component_types/arrow_convert_shims.rs
@@ -79,6 +79,7 @@ impl<'a> Iterator for BufferBinaryArrayIter<'a> {
/// Internal `ArrowArray` helper to iterate over a `BinaryArray` while exposing Buffer slices
pub struct BufferBinaryArray;
+#[cfg(not(target_os = "windows"))]
extern "C" {
fn do_not_call_into_iter(); // we never define this function, so the linker will fail
}
diff --git a/crates/re_log_types/src/component_types/imu.rs b/crates/re_log_types/src/component_types/imu.rs
new file mode 100644
index 000000000000..bfcdf7566eb8
--- /dev/null
+++ b/crates/re_log_types/src/component_types/imu.rs
@@ -0,0 +1,25 @@
+use crate::{Component, EntityPath};
+use arrow2_convert::{ArrowDeserialize, ArrowField, ArrowSerialize};
+
+use super::{Point3D, Quaternion};
+
+#[derive(Clone, Debug, PartialEq, ArrowField, ArrowSerialize, ArrowDeserialize)]
+pub struct ImuData {
+ pub accel: Point3D,
+ pub gyro: Point3D,
+ pub mag: Option,
+ pub orientation: Quaternion,
+}
+
+impl ImuData {
+ pub fn entity_path() -> EntityPath {
+ "imu_data".into()
+ }
+}
+
+impl Component for ImuData {
+ #[inline]
+ fn name() -> crate::ComponentName {
+ "rerun.imu".into()
+ }
+}
diff --git a/crates/re_log_types/src/component_types/mod.rs b/crates/re_log_types/src/component_types/mod.rs
index 61066b8c8f58..ce6334c5b305 100644
--- a/crates/re_log_types/src/component_types/mod.rs
+++ b/crates/re_log_types/src/component_types/mod.rs
@@ -23,12 +23,14 @@ mod class_id;
mod color;
pub mod context;
pub mod coordinates;
+mod imu;
mod instance_key;
mod keypoint_id;
mod label;
mod linestrip;
mod mat;
mod mesh3d;
+mod node_graph;
mod point;
mod quaternion;
mod radius;
@@ -46,12 +48,14 @@ pub use class_id::ClassId;
pub use color::ColorRGBA;
pub use context::{AnnotationContext, AnnotationInfo, ClassDescription};
pub use coordinates::ViewCoordinates;
+pub use imu::ImuData;
pub use instance_key::InstanceKey;
pub use keypoint_id::KeypointId;
pub use label::Label;
pub use linestrip::{LineStrip2D, LineStrip3D};
pub use mat::Mat3x3;
pub use mesh3d::{EncodedMesh3D, Mesh3D, MeshFormat, MeshId, RawMesh3D};
+pub use node_graph::NodeGraph;
pub use point::{Point2D, Point3D};
pub use quaternion::Quaternion;
pub use radius::Radius;
@@ -70,7 +74,7 @@ pub use vec::{Vec2D, Vec3D, Vec4D};
lazy_static! {
//TODO(john): use a run-time type registry
- static ref FIELDS: [Field; 25] = [
+ static ref FIELDS: [Field; 27] = [
::field(),
::field(),
::field(),
@@ -96,6 +100,8 @@ lazy_static! {
::field(),
::field(),
::field(),
+ ::field(),
+ ::field(),
];
}
@@ -210,6 +216,7 @@ where
pub struct FastFixedSizeListArray(std::marker::PhantomData);
+#[cfg(not(target_os = "windows"))]
extern "C" {
fn do_not_call_into_iter(); // we never define this function, so the linker will fail
}
diff --git a/crates/re_log_types/src/component_types/node_graph.rs b/crates/re_log_types/src/component_types/node_graph.rs
new file mode 100644
index 000000000000..edf8a83270ad
--- /dev/null
+++ b/crates/re_log_types/src/component_types/node_graph.rs
@@ -0,0 +1,40 @@
+use arrow2_convert::{ArrowDeserialize, ArrowField, ArrowSerialize};
+
+use crate::Component;
+
+// ---
+
+/// A double-precision NodeGraph.
+///
+/// ## Examples
+///
+/// ```
+/// # use re_log_types::component_types::NodeGraph;
+/// # use arrow2_convert::field::ArrowField;
+/// # use arrow2::datatypes::{DataType, Field};
+/// assert_eq!(NodeGraph::data_type(), DataType::Float64);
+/// ```
+#[derive(Debug, Clone, Copy, ArrowField, ArrowSerialize, ArrowDeserialize)]
+#[arrow_field(transparent)]
+pub struct NodeGraph(pub f64);
+
+impl Component for NodeGraph {
+ #[inline]
+ fn name() -> crate::ComponentName {
+ "rerun.pipeline_graph".into()
+ }
+}
+
+impl From for NodeGraph {
+ #[inline]
+ fn from(value: f64) -> Self {
+ Self(value)
+ }
+}
+
+impl From for f64 {
+ #[inline]
+ fn from(value: NodeGraph) -> Self {
+ value.0
+ }
+}
diff --git a/crates/re_log_types/src/component_types/tensor.rs b/crates/re_log_types/src/component_types/tensor.rs
index 9c4228b845e6..cf02a3bc2b8e 100644
--- a/crates/re_log_types/src/component_types/tensor.rs
+++ b/crates/re_log_types/src/component_types/tensor.rs
@@ -857,7 +857,7 @@ impl Tensor {
/// A thin wrapper around a [`Tensor`] that is guaranteed to not be compressed (never a jpeg).
///
/// All clones are shallow, like for [`Tensor`].
-#[derive(Clone)]
+#[derive(Clone, Debug)]
pub struct DecodedTensor(Tensor);
impl DecodedTensor {
diff --git a/crates/re_log_types/src/lib.rs b/crates/re_log_types/src/lib.rs
index 7775be821e74..956577858493 100644
--- a/crates/re_log_types/src/lib.rs
+++ b/crates/re_log_types/src/lib.rs
@@ -42,7 +42,7 @@ pub use self::component_types::coordinates;
pub use self::component_types::AnnotationContext;
pub use self::component_types::Arrow3D;
pub use self::component_types::DecodedTensor;
-pub use self::component_types::{EncodedMesh3D, Mesh3D, MeshFormat, MeshId, RawMesh3D};
+pub use self::component_types::{EncodedMesh3D, ImuData, Mesh3D, MeshFormat, MeshId, RawMesh3D};
pub use self::component_types::{Tensor, ViewCoordinates};
pub use self::data::*;
pub use self::data_cell::{DataCell, DataCellError, DataCellInner, DataCellResult};
diff --git a/crates/re_renderer/Cargo.toml b/crates/re_renderer/Cargo.toml
index 03bc85390551..c5a2fb1df2b7 100644
--- a/crates/re_renderer/Cargo.toml
+++ b/crates/re_renderer/Cargo.toml
@@ -24,7 +24,7 @@ targets = ["x86_64-unknown-linux-gnu", "wasm32-unknown-unknown"]
[features]
-default = ["arrow", "import-obj", "import-gltf"]
+default = ["import-obj", "import-gltf"]
## Support for Arrow datatypes for end-to-end zero-copy.
arrow = ["dep:arrow2"]
@@ -38,6 +38,8 @@ import-gltf = ["dep:gltf"]
## Enable (de)serialization using serde.
serde = ["dep:serde"]
+## Render using webgl instead of webgpu on wasm builds.
+webgl = ["wgpu/webgl"]
[dependencies]
re_error.workspace = true
@@ -55,6 +57,7 @@ glam = { workspace = true, features = ["bytemuck"] }
half = { workspace = true, features = ["bytemuck"] }
itertools = { workspace = true }
macaw.workspace = true
+never = '0.1'
ordered-float = "3.2"
parking_lot.workspace = true
slotmap = "1.0.6"
@@ -62,6 +65,7 @@ smallvec.workspace = true
static_assertions = "1.1"
thiserror.workspace = true
type-map = "0.5"
+wgpu.workspace = true
# optional
arrow2 = { workspace = true, optional = true }
@@ -74,17 +78,7 @@ tobj = { version = "3.2", optional = true }
crossbeam = "0.8"
notify = "5.0"
puffin.workspace = true
-wgpu = { workspace = true, default-features = false, features = ["wgsl"] }
wgpu-core.workspace = true
-wgpu-hal.workspace = true
-
-# wasm
-[target.'cfg(target_arch = "wasm32")'.dependencies]
-wgpu = { workspace = true, default-features = false, features = [
- "webgl",
- "wgsl",
-] }
-
# For examples:
[dev-dependencies]
@@ -109,7 +103,7 @@ console_error_panic_hook = "0.1.6"
# required to make rand work on wasm, see https://github.com/rust-random/rand#wasm-support
getrandom = { version = "0.2", features = ["js"] }
wasm-bindgen-futures = "0.4.33"
-web-sys = { version = "0.3.60", features = [
+web-sys = { version = "0.3.61", features = [
"Location",
"Blob",
"RequestInit",
diff --git a/crates/re_renderer/examples/2d.rs b/crates/re_renderer/examples/2d.rs
index 32940991c1f2..eb17d6955cfd 100644
--- a/crates/re_renderer/examples/2d.rs
+++ b/crates/re_renderer/examples/2d.rs
@@ -36,16 +36,19 @@ impl framework::Example for Render2D {
);
}
- let rerun_logo_texture = re_ctx.texture_manager_2d.create(
- &mut re_ctx.gpu_resources.textures,
- &Texture2DCreationDesc {
- label: "rerun logo".into(),
- data: image_data.into(),
- format: wgpu::TextureFormat::Rgba8UnormSrgb,
- width: rerun_logo.width(),
- height: rerun_logo.height(),
- },
- );
+ let rerun_logo_texture = re_ctx
+ .texture_manager_2d
+ .create(
+ &mut re_ctx.gpu_resources.textures,
+ &Texture2DCreationDesc {
+ label: "rerun logo".into(),
+ data: image_data.into(),
+ format: wgpu::TextureFormat::Rgba8UnormSrgb,
+ width: rerun_logo.width(),
+ height: rerun_logo.height(),
+ },
+ )
+ .expect("Failed to create texture for rerun logo");
Render2D {
rerun_logo_texture,
diff --git a/crates/re_renderer/examples/depth_cloud.rs b/crates/re_renderer/examples/depth_cloud.rs
index c66c17eb79b3..2f5cdb8f6905 100644
--- a/crates/re_renderer/examples/depth_cloud.rs
+++ b/crates/re_renderer/examples/depth_cloud.rs
@@ -20,8 +20,8 @@ use itertools::Itertools;
use macaw::IsoTransform;
use re_renderer::{
renderer::{
- ColormappedTexture, DepthCloud, DepthCloudDepthData, DepthCloudDrawData, DepthClouds,
- DrawData, GenericSkyboxDrawData, RectangleDrawData, RectangleOptions, TexturedRect,
+ ColormappedTexture, DepthCloud, DepthCloudDrawData, DepthClouds, DrawData,
+ GenericSkyboxDrawData, RectangleDrawData, RectangleOptions, TexturedRect,
},
resource_managers::{GpuTexture2D, Texture2DCreationDesc},
view_builder::{self, Projection, ViewBuilder},
@@ -44,7 +44,6 @@ enum CameraControl {
struct RenderDepthClouds {
depth: DepthTexture,
albedo: AlbedoTexture,
- albedo_handle: GpuTexture2D,
scale: f32,
point_radius_from_world_depth: f32,
@@ -175,14 +174,16 @@ impl RenderDepthClouds {
clouds: vec![DepthCloud {
world_from_obj,
depth_camera_intrinsics: *intrinsics,
- world_depth_from_data_depth: 1.0,
+ world_depth_from_texture_depth: 1.0,
point_radius_from_world_depth: *point_radius_from_world_depth,
max_depth_in_world: 5.0,
depth_dimensions: depth.dimensions,
- depth_data: depth.data.clone(),
+ depth_texture: depth.texture.clone(),
colormap: re_renderer::Colormap::Turbo,
outline_mask_id: Default::default(),
picking_object_id: Default::default(),
+ albedo_dimensions: glam::UVec2::ZERO,
+ albedo_data: None,
}],
radius_boost_in_ui_points_for_outlines: 2.5,
},
@@ -233,19 +234,8 @@ impl framework::Example for RenderDepthClouds {
fn new(re_ctx: &mut re_renderer::RenderContext) -> Self {
re_log::info!("Stop camera movement by pressing 'Space'");
- let depth = DepthTexture::spiral((640, 480).into());
- let albedo = AlbedoTexture::spiral(depth.dimensions);
-
- let albedo_handle = re_ctx.texture_manager_2d.create(
- &mut re_ctx.gpu_resources.textures,
- &Texture2DCreationDesc {
- label: "albedo".into(),
- data: bytemuck::cast_slice(&albedo.rgba8).into(),
- format: wgpu::TextureFormat::Rgba8UnormSrgb,
- width: albedo.dimensions.x,
- height: albedo.dimensions.y,
- },
- );
+ let depth = DepthTexture::spiral(re_ctx, glam::uvec2(640, 480));
+ let albedo = AlbedoTexture::spiral(re_ctx, depth.dimensions);
let scale = 50.0;
let point_radius_from_world_depth = 0.1;
@@ -263,7 +253,6 @@ impl framework::Example for RenderDepthClouds {
RenderDepthClouds {
depth,
albedo,
- albedo_handle,
scale,
point_radius_from_world_depth,
@@ -283,7 +272,6 @@ impl framework::Example for RenderDepthClouds {
) -> Vec {
let Self {
albedo,
- albedo_handle,
camera_control,
camera_position,
..
@@ -326,7 +314,7 @@ impl framework::Example for RenderDepthClouds {
.transform_point3(glam::Vec3::new(1.0, 1.0, 0.0)),
extent_u: world_from_model.transform_vector3(-glam::Vec3::X),
extent_v: world_from_model.transform_vector3(-glam::Vec3::Y),
- colormapped_texture: ColormappedTexture::from_unorm_srgba(albedo_handle.clone()),
+ colormapped_texture: ColormappedTexture::from_unorm_srgba(albedo.texture.clone()),
options: RectangleOptions {
texture_filter_magnification: re_renderer::renderer::TextureFilterMag::Nearest,
texture_filter_minification: re_renderer::renderer::TextureFilterMin::Linear,
@@ -403,40 +391,60 @@ fn spiral(dimensions: glam::UVec2) -> impl Iterator- {
})
}
+pub fn hash(value: &impl std::hash::Hash) -> u64 {
+ ahash::RandomState::with_seeds(1, 2, 3, 4).hash_one(value)
+}
+
struct DepthTexture {
dimensions: glam::UVec2,
- data: DepthCloudDepthData,
+ data: Vec,
+ texture: GpuTexture2D,
}
impl DepthTexture {
- pub fn spiral(dimensions: glam::UVec2) -> Self {
+ pub fn spiral(re_ctx: &mut re_renderer::RenderContext, dimensions: glam::UVec2) -> Self {
let size = (dimensions.x * dimensions.y) as usize;
let mut data = std::iter::repeat(0f32).take(size).collect_vec();
spiral(dimensions).for_each(|(texcoords, d)| {
data[(texcoords.x + texcoords.y * dimensions.x) as usize] = d;
});
- let data = DepthCloudDepthData::F32(data.into());
- Self { dimensions, data }
+ let label = format!("depth texture spiral {dimensions}");
+ let texture = re_ctx
+ .texture_manager_2d
+ .get_or_create(
+ hash(&label),
+ &mut re_ctx.gpu_resources.textures,
+ Texture2DCreationDesc {
+ label: label.into(),
+ data: bytemuck::cast_slice(&data).into(),
+ format: wgpu::TextureFormat::R32Float,
+ width: dimensions.x,
+ height: dimensions.y,
+ },
+ )
+ .expect("Failed to create depth texture.");
+
+ Self {
+ dimensions,
+ data,
+ texture,
+ }
}
pub fn get_linear(&self, x: u32, y: u32) -> f32 {
- match &self.data {
- DepthCloudDepthData::U16(data) => {
- data[(x + y * self.dimensions.x) as usize] as f32 / u16::MAX as f32
- }
- DepthCloudDepthData::F32(data) => data[(x + y * self.dimensions.x) as usize],
- }
+ self.data[(x + y * self.dimensions.x) as usize]
}
}
struct AlbedoTexture {
dimensions: glam::UVec2,
rgba8: Vec,
+ texture: GpuTexture2D,
}
impl AlbedoTexture {
- pub fn spiral(dimensions: glam::UVec2) -> Self {
+ pub fn spiral(re_ctx: &mut re_renderer::RenderContext, dimensions: glam::UVec2) -> Self {
let size = (dimensions.x * dimensions.y) as usize;
let mut rgba8 = std::iter::repeat(0).take(size * 4).collect_vec();
spiral(dimensions).for_each(|(texcoords, d)| {
@@ -444,7 +452,27 @@ impl AlbedoTexture {
rgba8[idx..idx + 4].copy_from_slice(re_renderer::colormap_turbo_srgb(d).as_slice());
});
- Self { dimensions, rgba8 }
+ let label = format!("albedo texture spiral {dimensions}");
+ let texture = re_ctx
+ .texture_manager_2d
+ .get_or_create(
+ hash(&label),
+ &mut re_ctx.gpu_resources.textures,
+ Texture2DCreationDesc {
+ label: label.into(),
+ data: bytemuck::cast_slice(&rgba8).into(),
+ format: wgpu::TextureFormat::Rgba8UnormSrgb,
+ width: dimensions.x,
+ height: dimensions.y,
+ },
+ )
+ .expect("Failed to create albedo texture.");
+
+ Self {
+ dimensions,
+ rgba8,
+ texture,
+ }
}
#[allow(dead_code)]
diff --git a/crates/re_renderer/examples/framework.rs b/crates/re_renderer/examples/framework.rs
index fef6e7544b5b..2575f9d82463 100644
--- a/crates/re_renderer/examples/framework.rs
+++ b/crates/re_renderer/examples/framework.rs
@@ -125,7 +125,7 @@ impl Application {
.await
.context("failed to find an appropriate adapter")?;
- let hardware_tier = HardwareTier::default();
+ let hardware_tier = HardwareTier::from_adapter(&adapter);
hardware_tier.check_downlevel_capabilities(&adapter.get_downlevel_capabilities())?;
let (device, queue) = adapter
.request_device(
@@ -159,6 +159,7 @@ impl Application {
surface.configure(&device, &surface_config);
let mut re_ctx = RenderContext::new(
+ &adapter,
device,
queue,
RenderContextConfig {
diff --git a/crates/re_renderer/shader/colormap.wgsl b/crates/re_renderer/shader/colormap.wgsl
index 59be61afdfe4..7d4676ac8852 100644
--- a/crates/re_renderer/shader/colormap.wgsl
+++ b/crates/re_renderer/shader/colormap.wgsl
@@ -8,11 +8,12 @@ const COLORMAP_MAGMA: u32 = 3u;
const COLORMAP_PLASMA: u32 = 4u;
const COLORMAP_TURBO: u32 = 5u;
const COLORMAP_VIRIDIS: u32 = 6u;
-
+const ALBEDO_TEXTURE: u32 = 7u;
/// Returns a gamma-space sRGB in 0-1 range.
///
/// The input will be saturated to [0, 1] range.
-fn colormap_srgb(which: u32, t: f32) -> Vec3 {
+fn colormap_srgb(which: u32, t_unsaturated: f32) -> Vec3 {
+ let t = saturate(t_unsaturated);
if which == COLORMAP_GRAYSCALE {
return linear_from_srgb(Vec3(t));
} else if which == COLORMAP_INFERNO {
@@ -61,7 +62,6 @@ fn colormap_turbo_srgb(t: f32) -> Vec3 {
let g2 = Vec2(4.27729857, 2.82956604);
let b2 = Vec2(-89.90310912, 27.34824973);
- let t = saturate(t);
let v4 = vec4(1.0, t, t * t, t * t * t);
let v2 = v4.zw * v4.z;
@@ -97,7 +97,6 @@ fn colormap_viridis_srgb(t: f32) -> Vec3 {
let c4 = Vec3(6.228269936347081, 14.17993336680509, 56.69055260068105);
let c5 = Vec3(4.776384997670288, -13.74514537774601, -65.35303263337234);
let c6 = Vec3(-5.435455855934631, 4.645852612178535, 26.3124352495832);
- let t = saturate(t);
return c0 + t * (c1 + t * (c2 + t * (c3 + t * (c4 + t * (c5 + t * c6)))));
}
@@ -112,7 +111,6 @@ fn colormap_plasma_srgb(t: f32) -> Vec3 {
let c4 = Vec3(-11.10743619062271, -82.66631109428045, 60.13984767418263);
let c5 = Vec3(10.02306557647065, 71.41361770095349, -54.07218655560067);
let c6 = Vec3(-3.658713842777788, -22.93153465461149, 18.19190778539828);
- let t = saturate(t);
return c0 + t * (c1 + t * (c2 + t * (c3 + t * (c4 + t * (c5 + t * c6)))));
}
@@ -127,7 +125,6 @@ fn colormap_magma_srgb(t: f32) -> Vec3 {
let c4 = Vec3(52.17613981234068, -27.94360607168351, 12.94416944238394);
let c5 = Vec3(-50.76852536473588, 29.04658282127291, 4.23415299384598);
let c6 = Vec3(18.65570506591883, -11.48977351997711, -5.601961508734096);
- let t = saturate(t);
return c0 + t * (c1 + t * (c2 + t * (c3 + t * (c4 + t * (c5 + t * c6)))));
}
@@ -142,6 +139,5 @@ fn colormap_inferno_srgb(t: f32) -> Vec3 {
let c4 = Vec3(77.162935699427, -33.40235894210092, -81.80730925738993);
let c5 = Vec3(-71.31942824499214, 32.62606426397723, 73.20951985803202);
let c6 = Vec3(25.13112622477341, -12.24266895238567, -23.07032500287172);
- let t = saturate(t);
return c0 + t * (c1 + t * (c2 + t * (c3 + t * (c4 + t * (c5 + t * c6)))));
}
diff --git a/crates/re_renderer/shader/depth_cloud.wgsl b/crates/re_renderer/shader/depth_cloud.wgsl
index 1e7f7afdf0d7..db39dd6d20d2 100644
--- a/crates/re_renderer/shader/depth_cloud.wgsl
+++ b/crates/re_renderer/shader/depth_cloud.wgsl
@@ -43,16 +43,26 @@ struct DepthCloudInfo {
/// Configures color mapping mode, see `colormap.wgsl`.
colormap: u32,
+ /// Is the albedo texture rgb or mono
+ albedo_color_space: u32,
+
/// Changes between the opaque and outline draw-phases.
radius_boost_in_ui_points: f32,
};
+const ALBEDO_COLOR_RGB: u32 = 0u;
+const ALBEDO_COLOR_MONO: u32 = 1u;
+
@group(1) @binding(0)
var depth_cloud_info: DepthCloudInfo;
@group(1) @binding(1)
var depth_texture: texture_2d;
+/// Only sampled if `DepthCloudInfo::colormap == ALBEDO_TEXTURE`.
+@group(1) @binding(2)
+var albedo_texture: texture_2d;
+
struct VertexOut {
@builtin(position)
pos_in_clip: Vec4,
@@ -82,19 +92,32 @@ struct PointData {
}
// Backprojects the depth texture using the intrinsics passed in the uniform buffer.
-fn compute_point_data(quad_idx: i32) -> PointData {
+fn compute_point_data(quad_idx: u32) -> PointData {
let wh = textureDimensions(depth_texture);
- let texcoords = IVec2(quad_idx % wh.x, quad_idx / wh.x);
+ let texcoords = UVec2(quad_idx % wh.x, quad_idx / wh.x);
// TODO(cmc): expose knobs to linearize/normalize/flip/cam-to-plane depth.
let world_space_depth = depth_cloud_info.world_depth_from_texture_value * textureLoad(depth_texture, texcoords, 0).x;
var data: PointData;
-
if 0.0 < world_space_depth && world_space_depth < f32max {
// TODO(cmc): albedo textures
- let color = Vec4(colormap_linear(depth_cloud_info.colormap, world_space_depth / depth_cloud_info.max_depth_in_world), 1.0);
-
+ // let color = Vec4(colormap_linear(depth_cloud_info.colormap, world_space_depth / depth_cloud_info.max_depth_in_world), 1.0);
+
+ var color: Vec4;
+ if depth_cloud_info.colormap == ALBEDO_TEXTURE {
+ color = textureSampleLevel(
+ albedo_texture,
+ trilinear_sampler,
+ Vec2(texcoords) / Vec2(textureDimensions(albedo_texture)),
+ 0.0
+ );
+ if depth_cloud_info.albedo_color_space == ALBEDO_COLOR_MONO {
+ color = Vec4(linear_from_srgb(Vec3(color.r)), 1.0);
+ }
+ } else {
+ color = Vec4(colormap_srgb(depth_cloud_info.colormap, world_space_depth), 1.0);
+ }
// TODO(cmc): This assumes a pinhole camera; need to support other kinds at some point.
let intrinsics = depth_cloud_info.depth_camera_intrinsics;
let focal_length = Vec2(intrinsics[0][0], intrinsics[1][1]);
diff --git a/crates/re_renderer/shader/lines.wgsl b/crates/re_renderer/shader/lines.wgsl
index c8812e8112df..6a143a8233c8 100644
--- a/crates/re_renderer/shader/lines.wgsl
+++ b/crates/re_renderer/shader/lines.wgsl
@@ -32,11 +32,8 @@ struct BatchUniformBuffer {
@group(2) @binding(0)
var batch: BatchUniformBuffer;
-
-// textureLoad needs i32 right now, so we use that with all sizes & indices to avoid casts
-// https://github.com/gfx-rs/naga/issues/1997
-const POSITION_TEXTURE_SIZE: i32 = 512;
-const LINE_STRIP_TEXTURE_SIZE: i32 = 256;
+const POSITION_TEXTURE_SIZE: u32 = 512u;
+const LINE_STRIP_TEXTURE_SIZE: u32 = 256u;
// Flags
// See lines.rs#LineStripFlags
@@ -87,9 +84,7 @@ struct LineStripData {
// Read and unpack line strip data at a given location
fn read_strip_data(idx: u32) -> LineStripData {
- // can be u32 once https://github.com/gfx-rs/naga/issues/1997 is solved
- let idx = i32(idx);
- let coord = IVec2(idx % LINE_STRIP_TEXTURE_SIZE, idx / LINE_STRIP_TEXTURE_SIZE);
+ let coord = UVec2(idx % LINE_STRIP_TEXTURE_SIZE, idx / LINE_STRIP_TEXTURE_SIZE);
var raw_data = textureLoad(position_data_texture, coord, 0).xy;
var data: LineStripData;
@@ -110,9 +105,7 @@ struct PositionData {
// Read and unpack position data at a given location
fn read_position_data(idx: u32) -> PositionData {
- // can be u32 once https://github.com/gfx-rs/naga/issues/1997 is solved
- let idx = i32(idx);
- var raw_data = textureLoad(line_strip_texture, IVec2(idx % POSITION_TEXTURE_SIZE, idx / POSITION_TEXTURE_SIZE), 0);
+ var raw_data = textureLoad(line_strip_texture, UVec2(idx % POSITION_TEXTURE_SIZE, idx / POSITION_TEXTURE_SIZE), 0);
var data: PositionData;
let pos_4d = batch.world_from_obj * Vec4(raw_data.xyz, 1.0);
@@ -198,7 +191,7 @@ fn vs_main(@builtin(vertex_index) vertex_idx: u32) -> VertexOut {
quad_dir = pos_data_quad_after.pos - pos_data_quad_end.pos; // Go one pos data forward.
} else if is_cap_triangle {
// Discard vertex.
- center_position = Vec3(0.0/0.0, 0.0/0.0, 0.0/0.0);
+ center_position = Vec3(f32max);
} else {
quad_dir = pos_data_quad_end.pos - pos_data_quad_begin.pos;
}
diff --git a/crates/re_renderer/shader/point_cloud.wgsl b/crates/re_renderer/shader/point_cloud.wgsl
index dc6efe6df9b5..a55404230692 100644
--- a/crates/re_renderer/shader/point_cloud.wgsl
+++ b/crates/re_renderer/shader/point_cloud.wgsl
@@ -36,10 +36,7 @@ var batch: BatchUniformBuffer;
// Flags
// See point_cloud.rs#PointCloudBatchFlags
const ENABLE_SHADING: u32 = 1u;
-
-// textureLoad needs i32 right now, so we use that with all sizes & indices to avoid casts
-// https://github.com/gfx-rs/naga/issues/1997
-var TEXTURE_SIZE: i32 = 2048;
+const TEXTURE_SIZE: u32 = 2048u;
struct VertexOut {
@builtin(position)
@@ -75,8 +72,8 @@ struct PointData {
}
// Read and unpack data at a given location
-fn read_data(idx: i32) -> PointData {
- let coord = IVec2(i32(idx % TEXTURE_SIZE), idx / TEXTURE_SIZE);
+fn read_data(idx: u32) -> PointData {
+ let coord = UVec2(idx % TEXTURE_SIZE, idx / TEXTURE_SIZE);
let position_data = textureLoad(position_data_texture, coord, 0);
let color = textureLoad(color_texture, coord, 0);
diff --git a/crates/re_renderer/shader/rectangle_fs.wgsl b/crates/re_renderer/shader/rectangle_fs.wgsl
index 0d1a35cad961..62f65952fe21 100644
--- a/crates/re_renderer/shader/rectangle_fs.wgsl
+++ b/crates/re_renderer/shader/rectangle_fs.wgsl
@@ -86,10 +86,12 @@ fn fs_main(in: VertexOut) -> @location(0) Vec4 {
let colormap_size = textureDimensions(colormap_texture).xy;
let color_index = normalized_value.r * f32(colormap_size.x * colormap_size.y);
// TODO(emilk): interpolate between neighboring colors for non-integral color indices
- let color_index_i32 = i32(color_index);
- let x = color_index_i32 % colormap_size.x;
- let y = color_index_i32 / colormap_size.x;
- texture_color = textureLoad(colormap_texture, IVec2(x, y), 0);
+ // It's important to round here since otherwise numerical instability can push us to the adjacent class-id
+ // See: https://github.com/rerun-io/rerun/issues/1968
+ let color_index_u32 = u32(round(color_index));
+ let x = color_index_u32 % colormap_size.x;
+ let y = color_index_u32 / colormap_size.x;
+ texture_color = textureLoad(colormap_texture, UVec2(x, y), 0);
} else {
return ERROR_RGBA; // unknown color mapper
}
diff --git a/crates/re_renderer/shader/screen_triangle_vertex.wgsl b/crates/re_renderer/shader/screen_triangle_vertex.wgsl
index 224da3317d4b..e42fac7827a6 100644
--- a/crates/re_renderer/shader/screen_triangle_vertex.wgsl
+++ b/crates/re_renderer/shader/screen_triangle_vertex.wgsl
@@ -4,8 +4,10 @@ struct VertexOutput {
// Mark output position as invariant so it's safe to use it with depth test Equal.
// Without @invariant, different usages in different render pipelines might optimize differently,
// causing slightly different results.
- @invariant @builtin(position) position: Vec4,
- @location(0) texcoord: Vec2,
+ @invariant @builtin(position)
+ position: Vec4,
+ @location(0)
+ texcoord: Vec2,
};
// Workaround for https://github.com/gfx-rs/naga/issues/2252
diff --git a/crates/re_renderer/shader/types.wgsl b/crates/re_renderer/shader/types.wgsl
index 3323c7a6cd1f..6355bcc668b5 100644
--- a/crates/re_renderer/shader/types.wgsl
+++ b/crates/re_renderer/shader/types.wgsl
@@ -1,16 +1,16 @@
// Names chosen to match [`glam`](https://docs.rs/glam/latest/glam/)
-type Vec2 = vec2;
-type Vec3 = vec3;
-type Vec4 = vec4;
-type UVec2 = vec2;
-type UVec3 = vec3;
-type UVec4 = vec4;
-type IVec2 = vec2;
-type IVec3 = vec3;
-type IVec4 = vec4;
-type Mat3 = mat3x3;
-type Mat4x3 = mat4x3;
-type Mat4 = mat4x4;
+alias Vec2 = vec2;
+alias Vec3 = vec3;
+alias Vec4 = vec4;
+alias UVec2 = vec2;
+alias UVec3 = vec3;
+alias UVec4 = vec4;
+alias IVec2 = vec2;
+alias IVec3 = vec3;
+alias IVec4 = vec4;
+alias Mat3 = mat3x3;
+alias Mat4x3 = mat4x3;
+alias Mat4 = mat4x4;
// Extreme values as documented by the spec:
// https://www.w3.org/TR/WGSL/#floating-point-types
@@ -22,7 +22,7 @@ const f32min_normal = 0x1p-126f; // Smallest positive normal float value.
//const f16max = 0x1.ffcp+15h; // Largest positive float value.
//const f16min_normal = 0x1p-14h; // Smallest positive normal float value.
// https://www.w3.org/TR/WGSL/#integer-types
-const i32min = -0x80000000i;
+const i32min = -2147483648; // Naga has some issues with correct negative hexadecimal numbers https://github.com/gfx-rs/naga/issues/2314
const i32max = 0x7fffffffi;
const u32min = 0u;
const u32max = 0xffffffffu;
diff --git a/crates/re_renderer/shader/utils/sphere_quad.wgsl b/crates/re_renderer/shader/utils/sphere_quad.wgsl
index ccdd4b771a0b..00937d8e7701 100644
--- a/crates/re_renderer/shader/utils/sphere_quad.wgsl
+++ b/crates/re_renderer/shader/utils/sphere_quad.wgsl
@@ -56,8 +56,8 @@ fn sphere_quad_span_orthographic(point_pos: Vec3, point_radius: f32, top_bottom:
}
/// Returns the index of the current quad.
-fn sphere_quad_index(vertex_idx: u32) -> i32 {
- return i32(vertex_idx) / 6;
+fn sphere_quad_index(vertex_idx: u32) -> u32 {
+ return vertex_idx / 6u;
}
struct SphereQuadData {
diff --git a/crates/re_renderer/src/allocator/cpu_write_gpu_read_belt.rs b/crates/re_renderer/src/allocator/cpu_write_gpu_read_belt.rs
index db1a1d085a90..6bc86a60d112 100644
--- a/crates/re_renderer/src/allocator/cpu_write_gpu_read_belt.rs
+++ b/crates/re_renderer/src/allocator/cpu_write_gpu_read_belt.rs
@@ -1,6 +1,9 @@
-use std::{num::NonZeroU32, sync::mpsc};
+use std::sync::mpsc;
-use crate::wgpu_resources::{BufferDesc, GpuBuffer, GpuBufferPool, Texture2DBufferInfo};
+use crate::{
+ texture_info::Texture2DBufferInfo,
+ wgpu_resources::{BufferDesc, GpuBuffer, GpuBufferPool},
+};
/// A sub-allocated staging buffer that can be written to.
///
@@ -119,7 +122,7 @@ where
buffer: &self.chunk_buffer,
layout: wgpu::ImageDataLayout {
offset: self.byte_offset_in_chunk_buffer,
- bytes_per_row: NonZeroU32::new(buffer_info.bytes_per_row_padded),
+ bytes_per_row: Some(buffer_info.bytes_per_row_padded),
rows_per_image: None,
},
},
@@ -290,7 +293,7 @@ impl CpuWriteGpuReadBelt {
);
// Largest uncompressed texture format (btw. many compressed texture format have the same block size!)
debug_assert!(
- wgpu::TextureFormat::Rgba32Uint.describe().block_size as u64
+ wgpu::TextureFormat::Rgba32Uint.block_size(None).unwrap() as u64
<= CpuWriteGpuReadBelt::MIN_OFFSET_ALIGNMENT
);
diff --git a/crates/re_renderer/src/allocator/gpu_readback_belt.rs b/crates/re_renderer/src/allocator/gpu_readback_belt.rs
index 8e5f413743e9..d20e231cb269 100644
--- a/crates/re_renderer/src/allocator/gpu_readback_belt.rs
+++ b/crates/re_renderer/src/allocator/gpu_readback_belt.rs
@@ -1,6 +1,7 @@
-use std::{num::NonZeroU32, ops::Range, sync::mpsc};
+use std::{ops::Range, sync::mpsc};
-use crate::wgpu_resources::{BufferDesc, GpuBuffer, GpuBufferPool, Texture2DBufferInfo};
+use crate::texture_info::Texture2DBufferInfo;
+use crate::wgpu_resources::{BufferDesc, GpuBuffer, GpuBufferPool};
/// Identifier used to identify a buffer upon retrieval of the data.
///
@@ -16,6 +17,12 @@ struct PendingReadbackRange {
user_data: GpuReadbackUserDataStorage,
}
+#[derive(thiserror::Error, Debug)]
+pub enum GpuReadbackError {
+ #[error("Texture format {0:?} is not supported for readback.")]
+ UnsupportedTextureFormatForReadback(wgpu::TextureFormat),
+}
+
/// A reserved slice for GPU readback.
///
/// Readback needs to happen from a buffer/texture with copy-source usage,
@@ -36,8 +43,8 @@ impl GpuReadbackBuffer {
encoder: &mut wgpu::CommandEncoder,
source: wgpu::ImageCopyTexture<'_>,
copy_extents: glam::UVec2,
- ) {
- self.read_multiple_texture2d(encoder, &[(source, copy_extents)]);
+ ) -> Result<(), GpuReadbackError> {
+ self.read_multiple_texture2d(encoder, &[(source, copy_extents)])
}
/// Reads multiple textures into the same buffer.
@@ -54,11 +61,17 @@ impl GpuReadbackBuffer {
mut self,
encoder: &mut wgpu::CommandEncoder,
sources_and_extents: &[(wgpu::ImageCopyTexture<'_>, glam::UVec2)],
- ) {
+ ) -> Result<(), GpuReadbackError> {
for (source, copy_extents) in sources_and_extents {
let start_offset = wgpu::util::align_to(
self.range_in_chunk.start,
- source.texture.format().describe().block_size as u64,
+ source
+ .texture
+ .format()
+ .block_size(Some(source.aspect))
+ .ok_or(GpuReadbackError::UnsupportedTextureFormatForReadback(
+ source.texture.format(),
+ ))? as u64,
);
let buffer_info = Texture2DBufferInfo::new(source.texture.format(), *copy_extents);
@@ -75,7 +88,7 @@ impl GpuReadbackBuffer {
buffer: &self.chunk_buffer,
layout: wgpu::ImageDataLayout {
offset: start_offset,
- bytes_per_row: NonZeroU32::new(buffer_info.bytes_per_row_padded),
+ bytes_per_row: Some(buffer_info.bytes_per_row_padded),
rows_per_image: None,
},
},
@@ -89,6 +102,7 @@ impl GpuReadbackBuffer {
self.range_in_chunk =
(start_offset + buffer_info.buffer_size_padded)..self.range_in_chunk.end;
}
+ Ok(())
}
// TODO(andreas): Unused & untested so far!
diff --git a/crates/re_renderer/src/allocator/mod.rs b/crates/re_renderer/src/allocator/mod.rs
index 11a092b1b374..382376416d54 100644
--- a/crates/re_renderer/src/allocator/mod.rs
+++ b/crates/re_renderer/src/allocator/mod.rs
@@ -9,7 +9,8 @@ mod uniform_buffer_fill;
pub use cpu_write_gpu_read_belt::{CpuWriteGpuReadBelt, CpuWriteGpuReadBuffer};
pub use gpu_readback_belt::{
- GpuReadbackBelt, GpuReadbackBuffer, GpuReadbackIdentifier, GpuReadbackUserDataStorage,
+ GpuReadbackBelt, GpuReadbackBuffer, GpuReadbackError, GpuReadbackIdentifier,
+ GpuReadbackUserDataStorage,
};
pub use uniform_buffer_fill::{
create_and_fill_uniform_buffer, create_and_fill_uniform_buffer_batch,
diff --git a/crates/re_renderer/src/colormap.rs b/crates/re_renderer/src/colormap.rs
index 15cd98d5dc14..e4a4927ed3fe 100644
--- a/crates/re_renderer/src/colormap.rs
+++ b/crates/re_renderer/src/colormap.rs
@@ -18,6 +18,7 @@ pub enum Colormap {
Plasma = 4,
Turbo = 5,
Viridis = 6,
+ AlbedoTexture = 7,
}
impl Colormap {
@@ -40,6 +41,7 @@ impl std::fmt::Display for Colormap {
Colormap::Plasma => write!(f, "Plasma"),
Colormap::Turbo => write!(f, "Turbo"),
Colormap::Viridis => write!(f, "Viridis"),
+ Colormap::AlbedoTexture => write!(f, "AlbedoTexture"),
}
}
}
@@ -52,6 +54,10 @@ pub fn colormap_srgb(which: Colormap, t: f32) -> [u8; 4] {
Colormap::Plasma => colormap_plasma_srgb(t),
Colormap::Magma => colormap_magma_srgb(t),
Colormap::Inferno => colormap_inferno_srgb(t),
+ Colormap::AlbedoTexture => {
+ re_log::error_once!("Trying to do texture sampling on the CPU");
+ [0; 4]
+ }
}
}
diff --git a/crates/re_renderer/src/config.rs b/crates/re_renderer/src/config.rs
index 91e0315d401d..7b85283b505f 100644
--- a/crates/re_renderer/src/config.rs
+++ b/crates/re_renderer/src/config.rs
@@ -2,6 +2,11 @@
///
/// To reduce complexity, we don't do fine-grained feature checks,
/// but instead support set of features, each a superset of the next.
+///
+/// Tiers are sorted from lowest to highest. Certain tiers may not be possible on a given machine/setup,
+/// but choosing lower tiers is always possible.
+/// Tiers may loosely relate to quality settings, but their primary function is an easier way to
+/// do bundle feature *support* checks.
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub enum HardwareTier {
/// Limited feature support as provided by WebGL and native GLES2/OpenGL3(ish).
@@ -34,18 +39,22 @@ impl HardwareTier {
}
}
-impl Default for HardwareTier {
- fn default() -> Self {
- // Use "Basic" tier for actual web but also if someone forces the GL backend!
- if supported_backends() == wgpu::Backends::GL {
- HardwareTier::Gles
- } else {
- HardwareTier::FullWebGpuSupport
+impl HardwareTier {
+ /// Picks the highest possible tier for a given adapter.
+ ///
+ /// Note that it is always possible to pick a lower tier!
+ pub fn from_adapter(adapter: &wgpu::Adapter) -> Self {
+ match adapter.get_info().backend {
+ wgpu::Backend::Vulkan
+ | wgpu::Backend::Metal
+ | wgpu::Backend::Dx12
+ | wgpu::Backend::BrowserWebGpu => HardwareTier::FullWebGpuSupport,
+
+ // Dx11 support in wgpu is sporadic, treat it like GLES to be on the safe side.
+ wgpu::Backend::Dx11 | wgpu::Backend::Gl | wgpu::Backend::Empty => HardwareTier::Gles,
}
}
-}
-impl HardwareTier {
/// Wgpu limits required by the given hardware tier.
pub fn limits(self) -> wgpu::Limits {
wgpu::Limits {
@@ -127,22 +136,19 @@ pub struct RenderContextConfig {
///
/// Other backend might work as well, but lack of support isn't regarded as a bug.
pub fn supported_backends() -> wgpu::Backends {
- // Native.
- // Only use Vulkan & Metal unless explicitly told so since this reduces surfaces and thus surprises.
- //
- // Bunch of cases where it's still useful to switch though:
- // * Some Windows VMs only provide DX12 drivers, observed with Parallels on Apple Silicon
- // * May run into Linux issues that warrant trying out the GL backend.
- //
- // For changing the backend we use standard wgpu env var, i.e. WGPU_BACKEND.
- #[cfg(not(target_arch = "wasm32"))]
- {
+ if cfg!(target_arch = "wasm32") {
+ // Web - WebGL is used automatically when wgpu is compiled with `webgl` feature.
+ wgpu::Backends::GL | wgpu::Backends::BROWSER_WEBGPU
+ } else {
+ // Native.
+ // Only use Vulkan & Metal unless explicitly told so since this reduces surfaces and thus surprises.
+ //
+ // Bunch of cases where it's still useful to switch though:
+ // * Some Windows VMs only provide DX12 drivers, observed with Parallels on Apple Silicon
+ // * May run into Linux issues that warrant trying out the GL backend.
+ //
+ // For changing the backend we use standard wgpu env var, i.e. WGPU_BACKEND.
wgpu::util::backend_bits_from_env()
.unwrap_or(wgpu::Backends::VULKAN | wgpu::Backends::METAL)
}
- // Web - we support only WebGL right now, WebGPU should work but hasn't been tested.
- #[cfg(target_arch = "wasm32")]
- {
- wgpu::Backends::GL
- }
}
diff --git a/crates/re_renderer/src/context.rs b/crates/re_renderer/src/context.rs
index 701d1800d561..a2c8d032b819 100644
--- a/crates/re_renderer/src/context.rs
+++ b/crates/re_renderer/src/context.rs
@@ -106,6 +106,7 @@ impl RenderContext {
const MAX_NUM_INFLIGHT_QUEUE_SUBMISSIONS: usize = 4;
pub fn new(
+ adapter: &wgpu::Adapter,
device: Arc,
queue: Arc,
config: RenderContextConfig,
@@ -138,7 +139,16 @@ impl RenderContext {
config.hardware_tier.features(),
device.features(),
);
- // Can't check downlevel feature flags since they sit on the adapter, not on the device.
+ assert!(adapter.get_downlevel_capabilities().flags.contains(config.hardware_tier.required_downlevel_capabilities().flags),
+ "The given device doesn't support the required downlevel capabilities for the given hardware tier {:?}.
+ Required:
+ {:?}
+ Actual:
+ {:?}",
+ config.hardware_tier,
+ config.hardware_tier.required_downlevel_capabilities(),
+ adapter.get_downlevel_capabilities(),
+ );
// In debug builds, make sure to catch all errors, never crash, and try to
// always let the user find a way to return a poisoned pipeline back into a
@@ -178,6 +188,21 @@ impl RenderContext {
frame_index: 0,
};
+ // Register shader workarounds for the current device.
+ if adapter.get_info().backend == wgpu::Backend::BrowserWebGpu {
+ // Chrome/Tint does not support `@invariant` when targeting Metal.
+ // https://bugs.chromium.org/p/chromium/issues/detail?id=1439273
+ // (bug is fixed as of writing, but hasn't hit any public released version yet)
+ // Ignoring it is fine in the cases we use it, it's mostly there to avoid a (correct!) warning in wgpu.
+ gpu_resources
+ .shader_modules
+ .shader_text_workaround_replacements
+ .push((
+ "@invariant @builtin(position)".to_owned(),
+ "@builtin(position)".to_owned(),
+ ));
+ }
+
RenderContext {
device,
queue,
diff --git a/crates/re_renderer/src/draw_phases/mod.rs b/crates/re_renderer/src/draw_phases/mod.rs
index fe7ce542f245..f77d70e9ec5c 100644
--- a/crates/re_renderer/src/draw_phases/mod.rs
+++ b/crates/re_renderer/src/draw_phases/mod.rs
@@ -6,7 +6,8 @@ pub use outlines::{OutlineConfig, OutlineMaskPreference, OutlineMaskProcessor};
mod picking_layer;
pub use picking_layer::{
- PickingLayerId, PickingLayerInstanceId, PickingLayerObjectId, PickingLayerProcessor,
+ PickingLayerError, PickingLayerId, PickingLayerInstanceId, PickingLayerObjectId,
+ PickingLayerProcessor,
};
mod screenshot;
diff --git a/crates/re_renderer/src/draw_phases/picking_layer.rs b/crates/re_renderer/src/draw_phases/picking_layer.rs
index dc5cf38f033f..cd4d6601ebb0 100644
--- a/crates/re_renderer/src/draw_phases/picking_layer.rs
+++ b/crates/re_renderer/src/draw_phases/picking_layer.rs
@@ -13,11 +13,12 @@ use crate::{
allocator::create_and_fill_uniform_buffer,
global_bindings::FrameUniformBuffer,
include_shader_module,
+ texture_info::Texture2DBufferInfo,
view_builder::ViewBuilder,
wgpu_resources::{
BindGroupDesc, BindGroupEntry, BindGroupLayoutDesc, GpuBindGroup, GpuRenderPipelineHandle,
GpuTexture, GpuTextureHandle, PipelineLayoutDesc, PoolError, RenderPipelineDesc,
- Texture2DBufferInfo, TextureDesc, WgpuResourcePools,
+ TextureDesc, WgpuResourcePools,
},
DebugLabel, GpuReadbackBuffer, GpuReadbackIdentifier, IntRect, RenderContext,
};
@@ -132,6 +133,15 @@ pub fn pixel_coord_to_ndc(coord: glam::Vec2, target_resolution: glam::Vec2) -> g
)
}
+#[derive(thiserror::Error, Debug)]
+pub enum PickingLayerError {
+ #[error(transparent)]
+ ReadbackError(#[from] crate::allocator::GpuReadbackError),
+
+ #[error(transparent)]
+ ResourcePoolError(#[from] PoolError),
+}
+
/// Manages the rendering of the picking layer pass, its render targets & readback buffer.
///
/// The view builder creates this for every frame that requests a picking result.
@@ -278,8 +288,10 @@ impl PickingLayerProcessor {
// Offset of the depth buffer in the readback buffer needs to be aligned to size of a depth pixel.
// This is "trivially true" if the size of the depth format is a multiple of the size of the id format.
debug_assert!(
- Self::PICKING_LAYER_FORMAT.describe().block_size
- % Self::PICKING_LAYER_DEPTH_FORMAT.describe().block_size
+ Self::PICKING_LAYER_FORMAT.block_size(None).unwrap()
+ % Self::PICKING_LAYER_DEPTH_FORMAT
+ .block_size(Some(wgpu::TextureAspect::DepthOnly))
+ .unwrap()
== 0
);
let buffer_size = row_info_id.buffer_size_padded + row_info_depth.buffer_size_padded;
@@ -342,7 +354,7 @@ impl PickingLayerProcessor {
self,
encoder: &mut wgpu::CommandEncoder,
pools: &WgpuResourcePools,
- ) -> Result<(), PoolError> {
+ ) -> Result<(), PickingLayerError> {
let extent = glam::uvec2(
self.picking_target.texture.width(),
self.picking_target.texture.height(),
@@ -373,12 +385,16 @@ impl PickingLayerProcessor {
texture: &readable_depth_texture.texture,
mip_level: 0,
origin: wgpu::Origin3d::ZERO,
- aspect: wgpu::TextureAspect::All,
+ aspect: if self.depth_readback_workaround.is_some() {
+ wgpu::TextureAspect::All
+ } else {
+ wgpu::TextureAspect::DepthOnly
+ },
},
extent,
),
],
- );
+ )?;
Ok(())
}
@@ -401,11 +417,13 @@ impl PickingLayerProcessor {
.readback_data::>(identifier, |data, metadata| {
// Assert that our texture data reinterpretation works out from a pixel size point of view.
debug_assert_eq!(
- Self::PICKING_LAYER_DEPTH_FORMAT.describe().block_size as usize,
- std::mem::size_of::()
+ Self::PICKING_LAYER_DEPTH_FORMAT
+ .block_size(Some(wgpu::TextureAspect::DepthOnly))
+ .unwrap(),
+ std::mem::size_of::() as u32
);
debug_assert_eq!(
- Self::PICKING_LAYER_FORMAT.describe().block_size as usize,
+ Self::PICKING_LAYER_FORMAT.block_size(None).unwrap() as usize,
std::mem::size_of::()
);
@@ -432,8 +450,8 @@ impl PickingLayerProcessor {
// See https://github.com/gfx-rs/wgpu/issues/3644
debug_assert_eq!(
DepthReadbackWorkaround::READBACK_FORMAT
- .describe()
- .block_size as usize,
+ .block_size(None)
+ .unwrap() as usize,
std::mem::size_of::() * 4
);
picking_depth_data = picking_depth_data.into_iter().step_by(4).collect();
diff --git a/crates/re_renderer/src/draw_phases/screenshot.rs b/crates/re_renderer/src/draw_phases/screenshot.rs
index 68c05b3b545c..79cac54c1a6a 100644
--- a/crates/re_renderer/src/draw_phases/screenshot.rs
+++ b/crates/re_renderer/src/draw_phases/screenshot.rs
@@ -11,7 +11,9 @@
//! Or alternatively try to render the images in several tiles 🤔. In any case this would greatly improve quality!
use crate::{
- wgpu_resources::{GpuTexture, Texture2DBufferInfo, TextureDesc},
+ allocator::GpuReadbackError,
+ texture_info::Texture2DBufferInfo,
+ wgpu_resources::{GpuTexture, TextureDesc},
DebugLabel, GpuReadbackBuffer, GpuReadbackIdentifier, RenderContext,
};
@@ -95,7 +97,10 @@ impl ScreenshotProcessor {
pass
}
- pub fn end_render_pass(self, encoder: &mut wgpu::CommandEncoder) {
+ pub fn end_render_pass(
+ self,
+ encoder: &mut wgpu::CommandEncoder,
+ ) -> Result<(), GpuReadbackError> {
self.screenshot_readback_buffer.read_texture2d(
encoder,
wgpu::ImageCopyTexture {
@@ -108,7 +113,7 @@ impl ScreenshotProcessor {
self.screenshot_texture.texture.width(),
self.screenshot_texture.texture.height(),
),
- );
+ )
}
/// Returns the oldest received screenshot results for a given identifier and user data type.
diff --git a/crates/re_renderer/src/global_bindings.rs b/crates/re_renderer/src/global_bindings.rs
index c00ad0315c67..33fdfa4b2191 100644
--- a/crates/re_renderer/src/global_bindings.rs
+++ b/crates/re_renderer/src/global_bindings.rs
@@ -82,14 +82,14 @@ impl GlobalBindings {
// Sampler without any filtering.
wgpu::BindGroupLayoutEntry {
binding: 1,
- visibility: wgpu::ShaderStages::FRAGMENT,
+ visibility: wgpu::ShaderStages::VERTEX | wgpu::ShaderStages::FRAGMENT,
ty: wgpu::BindingType::Sampler(wgpu::SamplerBindingType::NonFiltering),
count: None,
},
// Trilinear sampler.
wgpu::BindGroupLayoutEntry {
binding: 2,
- visibility: wgpu::ShaderStages::FRAGMENT,
+ visibility: wgpu::ShaderStages::VERTEX | wgpu::ShaderStages::FRAGMENT,
ty: wgpu::BindingType::Sampler(wgpu::SamplerBindingType::Filtering),
count: None,
},
diff --git a/crates/re_renderer/src/importer/gltf.rs b/crates/re_renderer/src/importer/gltf.rs
index 9d628931c6f3..ba259c9f30bb 100644
--- a/crates/re_renderer/src/importer/gltf.rs
+++ b/crates/re_renderer/src/importer/gltf.rs
@@ -68,8 +68,16 @@ pub fn load_gltf_from_buffer(
};
images_as_textures.push(
- ctx.texture_manager_2d
- .create(&mut ctx.gpu_resources.textures, &texture),
+ match ctx
+ .texture_manager_2d
+ .create(&mut ctx.gpu_resources.textures, &texture)
+ {
+ Ok(texture) => texture,
+ Err(err) => {
+ re_log::error!("Failed to create texture: {err}");
+ ctx.texture_manager_2d.white_texture_unorm_handle().clone()
+ }
+ },
);
}
diff --git a/crates/re_renderer/src/lib.rs b/crates/re_renderer/src/lib.rs
index 770c0589f7fe..1932e1aeb9e2 100644
--- a/crates/re_renderer/src/lib.rs
+++ b/crates/re_renderer/src/lib.rs
@@ -12,6 +12,7 @@ pub mod importer;
pub mod mesh;
pub mod renderer;
pub mod resource_managers;
+pub mod texture_info;
pub mod view_builder;
mod allocator;
diff --git a/crates/re_renderer/src/renderer/debug_overlay.rs b/crates/re_renderer/src/renderer/debug_overlay.rs
index 6e615cd4a710..5b78ac3e3139 100644
--- a/crates/re_renderer/src/renderer/debug_overlay.rs
+++ b/crates/re_renderer/src/renderer/debug_overlay.rs
@@ -49,6 +49,12 @@ pub struct DebugOverlayRenderer {
bind_group_layout: GpuBindGroupLayoutHandle,
}
+#[derive(thiserror::Error, Debug)]
+pub enum DebugOverlayError {
+ #[error("Can't display texture with format: {0:?}")]
+ UnsupportedTextureFormat(wgpu::TextureFormat),
+}
+
/// Debug overlay for quick & dirty display of texture contents.
///
/// Executed as part of the composition draw phase in order to allow "direct" output to the screen.
@@ -70,7 +76,7 @@ impl DebugOverlayDrawData {
debug_texture: &GpuTexture,
screen_resolution: glam::UVec2,
overlay_rect: IntRect,
- ) -> Self {
+ ) -> Result {
let mut renderers = ctx.renderers.write();
let debug_overlay = renderers.get_or_create::<_, DebugOverlayRenderer>(
&ctx.shared_renderer_data,
@@ -79,13 +85,22 @@ impl DebugOverlayDrawData {
&mut ctx.resolver,
);
- let mode = match debug_texture.texture.format().describe().sample_type {
- wgpu::TextureSampleType::Depth | wgpu::TextureSampleType::Float { .. } => {
+ let mode = match debug_texture
+ .texture
+ .format()
+ .sample_type(Some(wgpu::TextureAspect::All))
+ {
+ Some(wgpu::TextureSampleType::Depth | wgpu::TextureSampleType::Float { .. }) => {
gpu_data::DebugOverlayMode::ShowFloatTexture
}
- wgpu::TextureSampleType::Sint | wgpu::TextureSampleType::Uint => {
+ Some(wgpu::TextureSampleType::Sint | wgpu::TextureSampleType::Uint) => {
gpu_data::DebugOverlayMode::ShowUintTexture
}
+ None => {
+ return Err(DebugOverlayError::UnsupportedTextureFormat(
+ debug_texture.texture.format(),
+ ))
+ }
};
let uniform_buffer_binding = create_and_fill_uniform_buffer(
@@ -112,7 +127,7 @@ impl DebugOverlayDrawData {
),
};
- DebugOverlayDrawData {
+ Ok(DebugOverlayDrawData {
bind_group: ctx.gpu_resources.bind_groups.alloc(
&ctx.device,
&ctx.gpu_resources,
@@ -126,7 +141,7 @@ impl DebugOverlayDrawData {
layout: debug_overlay.bind_group_layout,
},
),
- }
+ })
}
}
diff --git a/crates/re_renderer/src/renderer/depth_cloud.rs b/crates/re_renderer/src/renderer/depth_cloud.rs
index 285c0a2f9fd0..a74e4e9e0a96 100644
--- a/crates/re_renderer/src/renderer/depth_cloud.rs
+++ b/crates/re_renderer/src/renderer/depth_cloud.rs
@@ -11,18 +11,18 @@
//! The vertex shader backprojects the depth texture using the user-specified intrinsics, and then
//! behaves pretty much exactly like our point cloud renderer (see [`point_cloud.rs`]).
+use itertools::Itertools;
use smallvec::smallvec;
use crate::{
allocator::create_and_fill_uniform_buffer_batch,
draw_phases::{DrawPhase, OutlineMaskProcessor},
include_shader_module,
- resource_managers::ResourceManagerError,
+ resource_managers::{GpuTexture2D, ResourceManagerError},
view_builder::ViewBuilder,
wgpu_resources::{
BindGroupDesc, BindGroupEntry, BindGroupLayoutDesc, GpuBindGroup, GpuBindGroupLayoutHandle,
- GpuRenderPipelineHandle, GpuTexture, PipelineLayoutDesc, RenderPipelineDesc,
- Texture2DBufferInfo, TextureDesc,
+ GpuRenderPipelineHandle, GpuTexture, PipelineLayoutDesc, RenderPipelineDesc, TextureDesc,
},
Colormap, OutlineMaskPreference, PickingLayerObjectId, PickingLayerProcessor,
};
@@ -34,8 +34,19 @@ use super::{
// ---
+#[derive(Debug, Clone, Copy)]
+enum AlbedoColorSpace {
+ RGB,
+ MONO,
+}
+
mod gpu_data {
- use crate::{wgpu_buffer_types, PickingLayerObjectId};
+ use crate::{
+ wgpu_buffer_types::{self, U32RowPadded},
+ PickingLayerObjectId,
+ };
+
+ use super::{AlbedoColorSpace, DepthCloudAlbedoData};
/// Keep in sync with mirror in `depth_cloud.wgsl.`
#[repr(C, align(256))]
@@ -50,7 +61,7 @@ mod gpu_data {
pub picking_layer_object_id: PickingLayerObjectId,
/// Multiplier to get world-space depth from whatever is in the texture.
- pub world_depth_from_texture_value: f32,
+ pub world_depth_from_texture_depth: f32,
/// Point radius is calculated as world-space depth times this value.
pub point_radius_from_world_depth: f32,
@@ -61,10 +72,13 @@ mod gpu_data {
/// Which colormap should be used.
pub colormap: u32,
+ /// Is the albedo texture rgb or mono
+ pub albedo_color_space: wgpu_buffer_types::U32RowPadded,
+
/// Changes over different draw-phases.
pub radius_boost_in_ui_points: wgpu_buffer_types::F32RowPadded,
- pub end_padding: [wgpu_buffer_types::PaddingRow; 16 - 4 - 3 - 1 - 1 - 1],
+ pub end_padding: [wgpu_buffer_types::PaddingRow; 16 - 4 - 3 - 1 - 1 - 1 - 1],
}
impl DepthCloudInfoUBO {
@@ -75,31 +89,35 @@ mod gpu_data {
let super::DepthCloud {
world_from_obj,
depth_camera_intrinsics,
- world_depth_from_data_depth,
+ world_depth_from_texture_depth,
point_radius_from_world_depth,
max_depth_in_world,
depth_dimensions: _,
- depth_data,
+ depth_texture: _,
colormap,
outline_mask_id,
picking_object_id,
+ albedo_dimensions,
+ albedo_data,
} = depth_cloud;
- let user_depth_from_texture_value = match depth_data {
- super::DepthCloudDepthData::U16(_) => 65535.0, // un-normalize
- super::DepthCloudDepthData::F32(_) => 1.0,
- };
- let world_depth_from_texture_value =
- world_depth_from_data_depth * user_depth_from_texture_value;
-
Self {
world_from_obj: (*world_from_obj).into(),
depth_camera_intrinsics: (*depth_camera_intrinsics).into(),
outline_mask_id: outline_mask_id.0.unwrap_or_default().into(),
- world_depth_from_texture_value,
+ world_depth_from_texture_depth: *world_depth_from_texture_depth,
point_radius_from_world_depth: *point_radius_from_world_depth,
max_depth_in_world: *max_depth_in_world,
colormap: *colormap as u32,
+ albedo_color_space: (depth_cloud
+ .albedo_data
+ .as_ref()
+ .map(|albedo_data| match albedo_data {
+ DepthCloudAlbedoData::Mono8(_) => AlbedoColorSpace::MONO,
+ _ => AlbedoColorSpace::RGB,
+ })
+ .unwrap_or(AlbedoColorSpace::RGB) as u32)
+ .into(),
radius_boost_in_ui_points: radius_boost_in_ui_points.into(),
picking_layer_object_id: *picking_object_id,
end_padding: Default::default(),
@@ -108,30 +126,17 @@ mod gpu_data {
}
}
-/// The raw data from a depth texture.
-///
-/// This is either `u16` or `f32` values; in both cases the data will be uploaded to the shader
-/// as-is.
-/// For `u16`s, this results in a `Depth16Unorm` texture, otherwise an `R32Float`.
-/// The reason we normalize `u16` is so that the shader can use a `float` texture in both cases.
-/// However, it means we need to multiply the sampled value by `65535.0` in the shader to get
-/// the actual depth.
-///
-/// The shader assumes that this is normalized, linear, non-flipped depth using the camera
-/// position as reference point (not the camera plane!).
+/// The raw data for the (optional) albedo texture.
//
-// TODO(cmc): support more depth data types.
-// TODO(cmc): expose knobs to linearize/normalize/flip/cam-to-plane depth.
+// TODO(cmc): support more albedo data types.
+// TODO(cmc): arrow buffers for u8...
#[derive(Debug, Clone)]
-pub enum DepthCloudDepthData {
- U16(crate::Buffer),
- F32(crate::Buffer),
-}
-
-impl Default for DepthCloudDepthData {
- fn default() -> Self {
- Self::F32(Default::default())
- }
+pub enum DepthCloudAlbedoData {
+ Rgb8(Vec),
+ Rgb8Srgb(Vec),
+ Rgba8(Vec),
+ Rgba8Srgb(Vec),
+ Mono8(Vec),
}
pub struct DepthCloud {
@@ -143,8 +148,8 @@ pub struct DepthCloud {
/// Only supports pinhole cameras at the moment.
pub depth_camera_intrinsics: glam::Mat3,
- /// Multiplier to get world-space depth from whatever is in [`Self::depth_data`].
- pub world_depth_from_data_depth: f32,
+ /// Multiplier to get world-space depth from whatever is in [`Self::depth_texture`].
+ pub world_depth_from_texture_depth: f32,
/// Point radius is calculated as world-space depth times this value.
pub point_radius_from_world_depth: f32,
@@ -155,10 +160,10 @@ pub struct DepthCloud {
/// The dimensions of the depth texture in pixels.
pub depth_dimensions: glam::UVec2,
- /// The actual data from the depth texture.
+ /// The actual data for the depth texture.
///
- /// See [`DepthCloudDepthData`] for more information.
- pub depth_data: DepthCloudDepthData,
+ /// Only textures with sample type `Float` are supported.
+ pub depth_texture: GpuTexture2D,
/// Configures color mapping mode.
pub colormap: Colormap,
@@ -168,6 +173,16 @@ pub struct DepthCloud {
/// Picking object id that applies for the entire depth cloud.
pub picking_object_id: PickingLayerObjectId,
+
+ /// The dimensions of the (optional) albedo texture in pixels.
+ ///
+ /// Irrelevant if [`Self::albedo_data`] isn't set.
+ pub albedo_dimensions: glam::UVec2,
+
+ /// The actual data for the (optional) albedo texture.
+ ///
+ /// If set, takes precedence over [`Self::colormap`].
+ pub albedo_data: Option,
}
impl DepthCloud {
@@ -223,11 +238,20 @@ impl DrawData for DepthCloudDrawData {
type Renderer = DepthCloudRenderer;
}
+#[derive(thiserror::Error, Debug)]
+pub enum DepthCloudDrawDataError {
+ #[error("Depth texture format was {0:?}, only formats with sample type float are supported")]
+ InvalidDepthTextureFormat(wgpu::TextureFormat),
+
+ #[error(transparent)]
+ ResourceManagerError(#[from] ResourceManagerError),
+}
+
impl DepthCloudDrawData {
pub fn new(
ctx: &mut RenderContext,
depth_clouds: &DepthClouds,
- ) -> Result {
+ ) -> Result {
crate::profile_function!();
let DepthClouds {
@@ -276,44 +300,72 @@ impl DepthCloudDrawData {
depth_cloud_ubo_binding_outlines,
depth_cloud_ubo_binding_opaque
) {
- let depth_texture = match &depth_cloud.depth_data {
- DepthCloudDepthData::U16(data) => {
- if cfg!(target_arch = "wasm32") {
- // Web: manual normalization because Depth16Unorm textures aren't supported on
- // the web (and won't ever be on the WebGL backend, see
- // https://github.com/gfx-rs/wgpu/issues/3537).
- //
- // TODO(cmc): use an RG8 texture and unpack it manually in the shader instead.
- use itertools::Itertools as _;
- let dataf32 = data
- .as_slice()
- .iter()
- .map(|d| *d as f32 / u16::MAX as f32)
+ if !matches!(
+ depth_cloud.depth_texture.format().sample_type(None),
+ Some(wgpu::TextureSampleType::Float { filterable: _ })
+ ) {
+ return Err(DepthCloudDrawDataError::InvalidDepthTextureFormat(
+ depth_cloud.depth_texture.format(),
+ ));
+ }
+ let albedo_texture = depth_cloud
+ .albedo_data
+ .as_ref()
+ .map(|data| match data {
+ DepthCloudAlbedoData::Rgba8(data) => create_and_upload_texture(
+ ctx,
+ depth_cloud.albedo_dimensions,
+ wgpu::TextureFormat::Rgba8Unorm,
+ data.as_slice(),
+ ),
+ DepthCloudAlbedoData::Rgba8Srgb(data) => create_and_upload_texture(
+ ctx,
+ depth_cloud.albedo_dimensions,
+ wgpu::TextureFormat::Rgba8UnormSrgb,
+ data.as_slice(),
+ ),
+ // TODO
+ DepthCloudAlbedoData::Rgb8(data) => {
+ let data = data
+ .chunks(3)
+ .into_iter()
+ .flat_map(|c| [c[0], c[1], c[2], 255])
.collect_vec();
create_and_upload_texture(
ctx,
- depth_cloud,
- dataf32.as_slice(),
- wgpu::TextureFormat::R32Float,
+ depth_cloud.albedo_dimensions,
+ wgpu::TextureFormat::Rgba8Unorm,
+ data.as_slice(),
)
- } else {
- // Native: We use Depth16Unorm over R16Unorm because the latter is behind a feature flag and doesn't work on WebGPU.
+ }
+ DepthCloudAlbedoData::Rgb8Srgb(data) => {
+ let data = data
+ .chunks(3)
+ .into_iter()
+ .flat_map(|c| [c[0], c[1], c[2], 255])
+ .collect_vec();
create_and_upload_texture(
ctx,
- depth_cloud,
+ depth_cloud.albedo_dimensions,
+ wgpu::TextureFormat::Rgba8UnormSrgb,
data.as_slice(),
- wgpu::TextureFormat::Depth16Unorm,
)
}
- }
- DepthCloudDepthData::F32(data) => create_and_upload_texture(
- ctx,
- depth_cloud,
- data.as_slice(),
- wgpu::TextureFormat::R32Float,
- ),
- };
-
+ DepthCloudAlbedoData::Mono8(data) => create_and_upload_texture(
+ ctx,
+ depth_cloud.albedo_dimensions,
+ wgpu::TextureFormat::R8Unorm,
+ data.as_slice(),
+ ),
+ })
+ .unwrap_or_else(|| {
+ create_and_upload_texture(
+ ctx,
+ (1, 1).into(),
+ wgpu::TextureFormat::Rgba8Unorm,
+ [0u8; 4].as_slice(),
+ )
+ });
let mk_bind_group = |label, ubo: BindGroupEntry| {
ctx.gpu_resources.bind_groups.alloc(
&ctx.device,
@@ -322,7 +374,8 @@ impl DepthCloudDrawData {
label,
entries: smallvec![
ubo,
- BindGroupEntry::DefaultTextureView(depth_texture.handle),
+ BindGroupEntry::DefaultTextureView(depth_cloud.depth_texture.handle),
+ BindGroupEntry::DefaultTextureView(albedo_texture.handle),
],
layout: bg_layout,
},
@@ -346,77 +399,53 @@ impl DepthCloudDrawData {
fn create_and_upload_texture(
ctx: &mut RenderContext,
- depth_cloud: &DepthCloud,
+ dimensions: glam::UVec2,
+ format: wgpu::TextureFormat,
data: &[T],
- depth_format: wgpu::TextureFormat,
) -> GpuTexture {
crate::profile_function!();
- let depth_texture_size = wgpu::Extent3d {
- width: depth_cloud.depth_dimensions.x,
- height: depth_cloud.depth_dimensions.y,
+ let texture_size = wgpu::Extent3d {
+ width: dimensions.x,
+ height: dimensions.y,
depth_or_array_layers: 1,
};
- let depth_texture_desc = TextureDesc {
- label: "depth_texture".into(),
- size: depth_texture_size,
+ let texture_desc = TextureDesc {
+ label: "texture".into(),
+ size: texture_size,
mip_level_count: 1,
sample_count: 1,
dimension: wgpu::TextureDimension::D2,
- format: depth_format,
+ format,
usage: wgpu::TextureUsages::TEXTURE_BINDING | wgpu::TextureUsages::COPY_DST,
};
- let depth_texture = ctx
- .gpu_resources
- .textures
- .alloc(&ctx.device, &depth_texture_desc);
-
- // Not supporting compressed formats here.
- debug_assert!(depth_texture_desc.format.describe().block_dimensions == (1, 1));
-
- let buffer_info =
- Texture2DBufferInfo::new(depth_texture_desc.format, depth_cloud.depth_dimensions);
-
- // TODO(andreas): CpuGpuWriteBelt should make it easier to do this.
- let bytes_padding_per_row =
- (buffer_info.bytes_per_row_padded - buffer_info.bytes_per_row_unpadded) as usize;
- // Sanity check the padding size. If this happens something is seriously wrong, as it would imply
- // that we can't express the required alignment with the block size.
- debug_assert!(
- bytes_padding_per_row % std::mem::size_of::() == 0,
- "Padding is not a multiple of pixel size. Can't correctly pad the texture data"
- );
+ let texture = ctx.gpu_resources.textures.alloc(&ctx.device, &texture_desc);
+
+ let format_info = texture_desc.format;
+ let width_blocks = dimensions.x / format_info.block_dimensions().0 as u32;
+ let bytes_per_row_unaligned = width_blocks * format_info.block_size(None).unwrap() as u32;
+ // TODO
+ let bytes_per_row = u32::max(bytes_per_row_unaligned, wgpu::COPY_BYTES_PER_ROW_ALIGNMENT);
- let mut depth_texture_staging = ctx.cpu_write_gpu_read_belt.lock().allocate::(
+ let mut texture_staging = ctx.cpu_write_gpu_read_belt.lock().allocate::(
&ctx.device,
&ctx.gpu_resources.buffers,
- buffer_info.buffer_size_padded as usize / std::mem::size_of::(),
+ data.len(),
);
+ texture_staging.extend_from_slice(data);
- // Fill with a single copy if possible, otherwise do multiple, filling in padding.
- if bytes_padding_per_row == 0 {
- depth_texture_staging.extend_from_slice(data);
- } else {
- let num_pixel_padding_per_row = bytes_padding_per_row / std::mem::size_of::();
- for row in data.chunks(depth_texture_desc.size.width as usize) {
- depth_texture_staging.extend_from_slice(row);
- depth_texture_staging
- .extend(std::iter::repeat(T::zeroed()).take(num_pixel_padding_per_row));
- }
- }
-
- depth_texture_staging.copy_to_texture2d(
+ texture_staging.copy_to_texture2d(
ctx.active_frame.before_view_builder_encoder.lock().get(),
wgpu::ImageCopyTexture {
- texture: &depth_texture.inner.texture,
+ texture: &texture.inner.texture,
mip_level: 0,
origin: wgpu::Origin3d::ZERO,
aspect: wgpu::TextureAspect::All,
},
- depth_cloud.depth_dimensions,
+ glam::UVec2::new(texture_size.width, texture_size.height),
);
- depth_texture
+ texture
}
pub struct DepthCloudRenderer {
@@ -473,6 +502,16 @@ impl Renderer for DepthCloudRenderer {
},
count: None,
},
+ wgpu::BindGroupLayoutEntry {
+ binding: 2,
+ visibility: wgpu::ShaderStages::VERTEX,
+ ty: wgpu::BindingType::Texture {
+ sample_type: wgpu::TextureSampleType::Float { filterable: true },
+ view_dimension: wgpu::TextureViewDimension::D2,
+ multisampled: false,
+ },
+ count: None,
+ },
],
},
);
diff --git a/crates/re_renderer/src/renderer/lines.rs b/crates/re_renderer/src/renderer/lines.rs
index cf1222acfe1b..a46571928c63 100644
--- a/crates/re_renderer/src/renderer/lines.rs
+++ b/crates/re_renderer/src/renderer/lines.rs
@@ -104,10 +104,7 @@
//! * note that this would let us remove the degenerated quads between lines, making the approach cleaner and removing the "restart bit"
//!
-use std::{
- num::{NonZeroU32, NonZeroU64},
- ops::Range,
-};
+use std::{num::NonZeroU64, ops::Range};
use bitflags::bitflags;
use bytemuck::Zeroable;
@@ -479,7 +476,7 @@ impl LineDrawData {
bytemuck::cast_slice(&position_data_staging),
wgpu::ImageDataLayout {
offset: 0,
- bytes_per_row: NonZeroU32::new(
+ bytes_per_row: Some(
POSITION_TEXTURE_SIZE * std::mem::size_of::() as u32,
),
rows_per_image: None,
@@ -529,7 +526,7 @@ impl LineDrawData {
bytemuck::cast_slice(&line_strip_info_staging),
wgpu::ImageDataLayout {
offset: 0,
- bytes_per_row: NonZeroU32::new(
+ bytes_per_row: Some(
LINE_STRIP_TEXTURE_SIZE
* std::mem::size_of::() as u32,
),
diff --git a/crates/re_renderer/src/renderer/mod.rs b/crates/re_renderer/src/renderer/mod.rs
index 3b4284bc2a6d..b8b2bc508968 100644
--- a/crates/re_renderer/src/renderer/mod.rs
+++ b/crates/re_renderer/src/renderer/mod.rs
@@ -15,7 +15,7 @@ pub use point_cloud::{
mod depth_cloud;
pub use self::depth_cloud::{
- DepthCloud, DepthCloudDepthData, DepthCloudDrawData, DepthCloudRenderer, DepthClouds,
+ DepthCloud, DepthCloudAlbedoData, DepthCloudDrawData, DepthCloudRenderer, DepthClouds,
};
mod test_triangle;
@@ -35,7 +35,7 @@ mod compositor;
pub(crate) use compositor::CompositorDrawData;
mod debug_overlay;
-pub use debug_overlay::{DebugOverlayDrawData, DebugOverlayRenderer};
+pub use debug_overlay::{DebugOverlayDrawData, DebugOverlayError, DebugOverlayRenderer};
use crate::{
context::{RenderContext, SharedRendererData},
diff --git a/crates/re_renderer/src/renderer/point_cloud.rs b/crates/re_renderer/src/renderer/point_cloud.rs
index 639db5a17ceb..03611b80a256 100644
--- a/crates/re_renderer/src/renderer/point_cloud.rs
+++ b/crates/re_renderer/src/renderer/point_cloud.rs
@@ -130,7 +130,7 @@ pub struct PointCloudBatchInfo {
/// Defines an outline mask for an individual vertex ranges.
///
- /// Vertex ranges are *not* relative within the current batch, but relates to the draw data vertex buffer.
+ /// Vertex ranges are relative within the current batch.
///
/// Having many of these individual outline masks can be slow as they require each their own uniform buffer & draw call.
/// This feature is meant for a limited number of "extra selections"
@@ -455,6 +455,8 @@ impl PointCloudDrawData {
));
for (range, _) in &batch_info.additional_outline_mask_ids_vertex_ranges {
+ let range = (range.start + start_point_for_next_batch)
+ ..(range.end + start_point_for_next_batch);
batches_internal.push(point_renderer.create_point_cloud_batch(
ctx,
format!("{:?} strip-only {:?}", batch_info.label, range).into(),
diff --git a/crates/re_renderer/src/renderer/rectangles.rs b/crates/re_renderer/src/renderer/rectangles.rs
index 799655ecf78c..8b380a30a2bd 100644
--- a/crates/re_renderer/src/renderer/rectangles.rs
+++ b/crates/re_renderer/src/renderer/rectangles.rs
@@ -19,6 +19,7 @@ use crate::{
draw_phases::{DrawPhase, OutlineMaskProcessor},
include_shader_module,
resource_managers::{GpuTexture2D, ResourceManagerError},
+ texture_info,
view_builder::ViewBuilder,
wgpu_resources::{
BindGroupDesc, BindGroupEntry, BindGroupLayoutDesc, GpuBindGroup, GpuBindGroupLayoutHandle,
@@ -33,7 +34,7 @@ use super::{
};
/// Texture filter setting for magnification (a texel covers several pixels).
-#[derive(Debug)]
+#[derive(Debug, Clone, Copy)]
pub enum TextureFilterMag {
Linear,
Nearest,
@@ -41,7 +42,7 @@ pub enum TextureFilterMag {
}
/// Texture filter setting for minification (several texels fall to one pixel).
-#[derive(Debug)]
+#[derive(Debug, Clone, Copy)]
pub enum TextureFilterMin {
Linear,
Nearest,
@@ -98,6 +99,7 @@ impl ColormappedTexture {
}
}
+#[derive(Clone)]
pub struct TexturedRect {
/// Top left corner position in world space.
pub top_left_corner_position: glam::Vec3,
@@ -114,6 +116,7 @@ pub struct TexturedRect {
pub options: RectangleOptions,
}
+#[derive(Clone)]
pub struct RectangleOptions {
pub texture_filter_magnification: TextureFilterMag,
pub texture_filter_minification: TextureFilterMin,
@@ -166,7 +169,7 @@ pub enum RectangleError {
}
mod gpu_data {
- use crate::wgpu_buffer_types;
+ use crate::{texture_info, wgpu_buffer_types};
use super::{ColorMapper, RectangleError, TexturedRect};
@@ -214,9 +217,11 @@ mod gpu_data {
}
impl UniformBuffer {
- pub fn from_textured_rect(rectangle: &super::TexturedRect) -> Result {
+ pub fn from_textured_rect(
+ rectangle: &super::TexturedRect,
+ device_features: wgpu::Features,
+ ) -> Result {
let texture_format = rectangle.colormapped_texture.texture.format();
- let texture_info = texture_format.describe();
let TexturedRect {
top_left_corner_position,
@@ -241,25 +246,25 @@ mod gpu_data {
outline_mask,
} = options;
- let sample_type = match texture_info.sample_type {
- wgpu::TextureSampleType::Float { .. } => {
- if super::is_float_filterable(&texture_format) {
+ let sample_type = match texture_format.sample_type(None) {
+ Some(wgpu::TextureSampleType::Float { .. }) => {
+ if texture_info::is_float_filterable(texture_format, device_features) {
SAMPLE_TYPE_FLOAT_FILTER
} else {
SAMPLE_TYPE_FLOAT_NOFILTER
}
}
- wgpu::TextureSampleType::Depth => {
+ Some(wgpu::TextureSampleType::Sint) => SAMPLE_TYPE_SINT_NOFILTER,
+ Some(wgpu::TextureSampleType::Uint) => SAMPLE_TYPE_UINT_NOFILTER,
+ _ => {
return Err(RectangleError::DepthTexturesNotSupported);
}
- wgpu::TextureSampleType::Sint => SAMPLE_TYPE_SINT_NOFILTER,
- wgpu::TextureSampleType::Uint => SAMPLE_TYPE_UINT_NOFILTER,
};
let mut colormap_function = 0;
let color_mapper_int;
- match texture_info.components {
+ match texture_info::num_texture_components(texture_format) {
1 => match color_mapper {
Some(ColorMapper::Function(colormap)) => {
color_mapper_int = COLOR_MAPPER_FUNCTION;
@@ -352,7 +357,7 @@ impl RectangleDrawData {
// TODO(emilk): continue on error (skipping just that rectangle)?
let uniform_buffers: Vec<_> = rectangles
.iter()
- .map(gpu_data::UniformBuffer::from_textured_rect)
+ .map(|rect| gpu_data::UniformBuffer::from_textured_rect(rect, ctx.device.features()))
.try_collect()?;
let uniform_buffer_bindings = create_and_fill_uniform_buffer_batch(
@@ -387,10 +392,9 @@ impl RectangleDrawData {
let texture = &rectangle.colormapped_texture.texture;
let texture_format = texture.creation_desc.format;
- let texture_description = texture_format.describe();
- if texture_description.required_features != Default::default() {
+ if texture_format.required_features() != Default::default() {
return Err(RectangleError::SpecialFeatures(
- texture_description.required_features,
+ texture_format.required_features(),
));
}
@@ -400,23 +404,23 @@ impl RectangleDrawData {
let mut texture_sint = ctx.texture_manager_2d.zeroed_texture_sint().handle;
let mut texture_uint = ctx.texture_manager_2d.zeroed_texture_uint().handle;
- match texture_description.sample_type {
- wgpu::TextureSampleType::Float { .. } => {
- if is_float_filterable(&texture_format) {
+ match texture_format.sample_type(None) {
+ Some(wgpu::TextureSampleType::Float { .. }) => {
+ if texture_info::is_float_filterable(texture_format, ctx.device.features()) {
texture_float_filterable = texture.handle;
} else {
texture_float_nofilter = texture.handle;
}
}
- wgpu::TextureSampleType::Depth => {
- return Err(RectangleError::DepthTexturesNotSupported);
- }
- wgpu::TextureSampleType::Sint => {
+ Some(wgpu::TextureSampleType::Sint) => {
texture_sint = texture.handle;
}
- wgpu::TextureSampleType::Uint => {
+ Some(wgpu::TextureSampleType::Uint) => {
texture_uint = texture.handle;
}
+ _ => {
+ return Err(RectangleError::DepthTexturesNotSupported);
+ }
}
// We also set up an optional colormap texture.
@@ -689,11 +693,3 @@ impl Renderer for RectangleRenderer {
]
}
}
-
-fn is_float_filterable(format: &wgpu::TextureFormat) -> bool {
- format
- .describe()
- .guaranteed_format_features
- .flags
- .contains(wgpu::TextureFormatFeatureFlags::FILTERABLE)
-}
diff --git a/crates/re_renderer/src/resource_managers/mod.rs b/crates/re_renderer/src/resource_managers/mod.rs
index 7e1eff185a79..d9455d266071 100644
--- a/crates/re_renderer/src/resource_managers/mod.rs
+++ b/crates/re_renderer/src/resource_managers/mod.rs
@@ -10,7 +10,10 @@ mod mesh_manager;
pub use mesh_manager::{GpuMeshHandle, MeshManager};
mod texture_manager;
-pub use texture_manager::{GpuTexture2D, Texture2DCreationDesc, TextureManager2D};
+pub use texture_manager::{
+ GpuTexture2D, Texture2DCreationDesc, TextureCreationError, TextureManager2D,
+ TextureManager2DError,
+};
mod resource_manager;
pub use resource_manager::{ResourceHandle, ResourceLifeTime, ResourceManagerError};
diff --git a/crates/re_renderer/src/resource_managers/texture_manager.rs b/crates/re_renderer/src/resource_managers/texture_manager.rs
index 980918cb8a48..80da2c5768fe 100644
--- a/crates/re_renderer/src/resource_managers/texture_manager.rs
+++ b/crates/re_renderer/src/resource_managers/texture_manager.rs
@@ -1,4 +1,4 @@
-use std::{num::NonZeroU32, sync::Arc};
+use std::sync::Arc;
use ahash::{HashMap, HashSet};
@@ -75,7 +75,9 @@ pub struct Texture2DCreationDesc<'a> {
pub label: DebugLabel,
/// Data for the highest mipmap level.
- /// Must be padded according to wgpu rules and ready for upload.
+ ///
+ /// Data is expected to be tightly packed.
+ /// I.e. it is *not* padded according to wgpu buffer->texture transfer rules, padding will happen on the fly if necessary.
/// TODO(andreas): This should be a kind of factory function/builder instead which gets target memory passed in.
pub data: std::borrow::Cow<'a, [u8]>,
pub format: wgpu::TextureFormat,
@@ -93,6 +95,41 @@ impl<'a> Texture2DCreationDesc<'a> {
}
}
+// TODO(andreas): Move this to texture pool.
+#[derive(thiserror::Error, Debug)]
+pub enum TextureCreationError {
+ #[error("Texture with debug label {0:?} has zero width or height!")]
+ ZeroSize(DebugLabel),
+
+ #[error(
+ "Texture with debug label {label:?} has a format {format:?} that data can't be transferred to!"
+ )]
+ UnsupportedFormatForTransfer {
+ label: DebugLabel,
+ format: wgpu::TextureFormat,
+ },
+}
+
+#[derive(thiserror::Error, Debug)]
+pub enum TextureManager2DError {
+ /// Something went wrong when creating the GPU texture.
+ #[error(transparent)]
+ TextureCreation(#[from] TextureCreationError),
+
+ /// Something went wrong in a user-callback.
+ #[error(transparent)]
+ DataCreation(DataCreationError),
+}
+
+impl From> for TextureCreationError {
+ fn from(err: TextureManager2DError) -> Self {
+ match err {
+ TextureManager2DError::TextureCreation(texture_creation) => texture_creation,
+ TextureManager2DError::DataCreation(never) => match never {},
+ }
+ }
+}
+
/// Texture manager for 2D textures.
///
/// The scope is intentionally limited to particular kinds of textures that currently
@@ -144,7 +181,8 @@ impl TextureManager2D {
width: 1,
height: 1,
},
- );
+ )
+ .expect("Failed to create white pixel texture!");
let zeroed_texture_float =
create_zero_texture(texture_pool, &device, wgpu::TextureFormat::Rgba8Unorm);
@@ -174,7 +212,7 @@ impl TextureManager2D {
&mut self,
texture_pool: &mut GpuTexturePool,
creation_desc: &Texture2DCreationDesc<'_>,
- ) -> GpuTexture2D {
+ ) -> Result {
// TODO(andreas): Disabled the warning as we're moving towards using this texture manager for user-logged images.
// However, it's still very much a concern especially once we add mipmapping. Something we need to keep in mind.
//
@@ -201,39 +239,47 @@ impl TextureManager2D {
key: u64,
texture_pool: &mut GpuTexturePool,
texture_desc: Texture2DCreationDesc<'_>,
- ) -> GpuTexture2D {
- enum Never {}
- match self.get_or_create_with(key, texture_pool, || -> Result<_, Never> {
- Ok(texture_desc)
- }) {
- Ok(tex_handle) => tex_handle,
- Err(never) => match never {},
- }
+ ) -> Result {
+ self.get_or_create_with(key, texture_pool, || texture_desc)
}
/// Creates a new 2D texture resource and schedules data upload to the GPU if a texture
/// wasn't already created using the same key.
- pub fn get_or_create_with<'a, Err>(
+ pub fn get_or_create_with<'a>(
+ &mut self,
+ key: u64,
+ texture_pool: &mut GpuTexturePool,
+ create_texture_desc: impl FnOnce() -> Texture2DCreationDesc<'a>,
+ ) -> Result {
+ self.get_or_try_create_with(key, texture_pool, || -> Result<_, never::Never> {
+ Ok(create_texture_desc())
+ })
+ .map_err(|err| err.into())
+ }
+
+ /// Creates a new 2D texture resource and schedules data upload to the GPU if a texture
+ /// wasn't already created using the same key.
+ pub fn get_or_try_create_with<'a, Err: std::fmt::Display>(
&mut self,
key: u64,
texture_pool: &mut GpuTexturePool,
try_create_texture_desc: impl FnOnce() -> Result, Err>,
- ) -> Result {
+ ) -> Result> {
let texture_handle = match self.texture_cache.entry(key) {
std::collections::hash_map::Entry::Occupied(texture_handle) => {
texture_handle.get().clone() // already inserted
}
std::collections::hash_map::Entry::Vacant(entry) => {
// Run potentially expensive texture creation code:
- let tex_creation_desc = try_create_texture_desc()?;
- entry
- .insert(Self::create_and_upload_texture(
- &self.device,
- &self.queue,
- texture_pool,
- &tex_creation_desc,
- ))
- .clone()
+ let tex_creation_desc = try_create_texture_desc()
+ .map_err(|err| TextureManager2DError::DataCreation(err))?;
+ let texture = Self::create_and_upload_texture(
+ &self.device,
+ &self.queue,
+ texture_pool,
+ &tex_creation_desc,
+ )?;
+ entry.insert(texture).clone()
}
};
@@ -276,8 +322,13 @@ impl TextureManager2D {
queue: &wgpu::Queue,
texture_pool: &mut GpuTexturePool,
creation_desc: &Texture2DCreationDesc<'_>,
- ) -> GpuTexture2D {
+ ) -> Result {
crate::profile_function!();
+
+ if creation_desc.width == 0 || creation_desc.height == 0 {
+ return Err(TextureCreationError::ZeroSize(creation_desc.label.clone()));
+ }
+
let size = wgpu::Extent3d {
width: creation_desc.width,
height: creation_desc.height,
@@ -296,9 +347,15 @@ impl TextureManager2D {
},
);
- let format_info = creation_desc.format.describe();
- let width_blocks = creation_desc.width / format_info.block_dimensions.0 as u32;
- let bytes_per_row_unaligned = width_blocks * format_info.block_size as u32;
+ let width_blocks = creation_desc.width / creation_desc.format.block_dimensions().0;
+ let block_size = creation_desc
+ .format
+ .block_size(Some(wgpu::TextureAspect::All))
+ .ok_or_else(|| TextureCreationError::UnsupportedFormatForTransfer {
+ label: creation_desc.label.clone(),
+ format: creation_desc.format,
+ })?;
+ let bytes_per_row_unaligned = width_blocks * block_size;
// TODO(andreas): Once we have our own temp buffer for uploading, we can do the padding inplace
// I.e. the only difference will be if we do one memcopy or one memcopy per row, making row padding a nuisance!
@@ -317,9 +374,7 @@ impl TextureManager2D {
data,
wgpu::ImageDataLayout {
offset: 0,
- bytes_per_row: Some(
- NonZeroU32::new(bytes_per_row_unaligned).expect("invalid bytes per row"),
- ),
+ bytes_per_row: Some(bytes_per_row_unaligned),
rows_per_image: None,
},
size,
@@ -327,7 +382,7 @@ impl TextureManager2D {
// TODO(andreas): mipmap generation
- GpuTexture2D(texture)
+ Ok(GpuTexture2D(texture))
}
pub(crate) fn begin_frame(&mut self, _frame_index: u64) {
diff --git a/crates/re_renderer/src/texture_info.rs b/crates/re_renderer/src/texture_info.rs
new file mode 100644
index 000000000000..e18d447e62f8
--- /dev/null
+++ b/crates/re_renderer/src/texture_info.rs
@@ -0,0 +1,206 @@
+use std::borrow::Cow;
+
+/// Utility for dealing with buffers containing raw 2D texture data.
+#[derive(Clone)]
+pub struct Texture2DBufferInfo {
+ /// How many bytes per row contain actual data.
+ pub bytes_per_row_unpadded: u32,
+
+ /// How many bytes per row are required to be allocated in total.
+ ///
+ /// Padding bytes are always at the end of a row.
+ pub bytes_per_row_padded: u32,
+
+ /// Size required for an unpadded buffer.
+ pub buffer_size_unpadded: wgpu::BufferAddress,
+
+ /// Size required for a padded buffer as it is read/written from/to the GPU.
+ pub buffer_size_padded: wgpu::BufferAddress,
+}
+
+impl Texture2DBufferInfo {
+ /// Retrieves 2D texture buffer info for a given format & texture size.
+ ///
+ /// If a single buffer is not possible for all aspects of the texture format, all sizes will be zero.
+ #[inline]
+ pub fn new(format: wgpu::TextureFormat, extent: glam::UVec2) -> Self {
+ let block_dimensions = format.block_dimensions();
+ let width_blocks = extent.x / block_dimensions.0;
+ let height_blocks = extent.y / block_dimensions.1;
+
+ let block_size = format
+ .block_size(Some(wgpu::TextureAspect::All))
+ .unwrap_or(0); // This happens if we can't have a single buffer.
+ let bytes_per_row_unpadded = width_blocks * block_size;
+ let bytes_per_row_padded =
+ wgpu::util::align_to(bytes_per_row_unpadded, wgpu::COPY_BYTES_PER_ROW_ALIGNMENT);
+
+ Self {
+ bytes_per_row_unpadded,
+ bytes_per_row_padded,
+ buffer_size_unpadded: (bytes_per_row_unpadded * height_blocks) as wgpu::BufferAddress,
+ buffer_size_padded: (bytes_per_row_padded * height_blocks) as wgpu::BufferAddress,
+ }
+ }
+
+ #[inline]
+ pub fn num_rows(&self) -> u32 {
+ self.buffer_size_padded as u32 / self.bytes_per_row_padded
+ }
+
+ /// Removes the padding from a buffer containing gpu texture data.
+ ///
+ /// The passed in buffer is to be expected to be exactly of size [`Texture2DBufferInfo::buffer_size_padded`].
+ ///
+ /// Note that if you're passing in gpu data, there no alignment guarantees on the returned slice,
+ /// do NOT convert it using [`bytemuck`]. Use [`Texture2DBufferInfo::remove_padding_and_convert`] instead.
+ pub fn remove_padding<'a>(&self, buffer: &'a [u8]) -> Cow<'a, [u8]> {
+ crate::profile_function!();
+
+ assert_eq!(buffer.len() as wgpu::BufferAddress, self.buffer_size_padded);
+
+ if self.bytes_per_row_padded == self.bytes_per_row_unpadded {
+ return Cow::Borrowed(buffer);
+ }
+
+ let mut unpadded_buffer = Vec::with_capacity(self.buffer_size_unpadded as _);
+
+ for row in 0..self.num_rows() {
+ let offset = (self.bytes_per_row_padded * row) as usize;
+ unpadded_buffer.extend_from_slice(
+ &buffer[offset..(offset + self.bytes_per_row_unpadded as usize)],
+ );
+ }
+
+ unpadded_buffer.into()
+ }
+
+ /// Removes the padding from a buffer containing gpu texture data and remove convert to a given type.
+ ///
+ /// The passed in buffer is to be expected to be exactly of size [`Texture2DBufferInfo::buffer_size_padded`].
+ ///
+ /// The unpadded row size is expected to be a multiple of the size of the target type.
+ /// (Which means that, while uncommon, it technically doesn't need to be as big as a block in the pixel - this can be useful for e.g. packing wide bitfields)
+ pub fn remove_padding_and_convert(&self, buffer: &[u8]) -> Vec {
+ crate::profile_function!();
+
+ assert_eq!(buffer.len() as wgpu::BufferAddress, self.buffer_size_padded);
+ assert!(self.bytes_per_row_unpadded % std::mem::size_of::() as u32 == 0);
+
+ // Due to https://github.com/gfx-rs/wgpu/issues/3508 the data might be completely unaligned,
+ // so much, that we can't even interpret it as e.g. a u32 slice.
+ // Therefore, we have to do a copy of the data regardless of whether it's padded or not.
+
+ let mut unpadded_buffer: Vec = vec![
+ T::zeroed();
+ (self.num_rows() * self.bytes_per_row_unpadded / std::mem::size_of::() as u32)
+ as usize
+ ]; // TODO(andreas): Consider using unsafe set_len() instead of vec![] to avoid zeroing the memory.
+
+ // The copy has to happen on a u8 slice, because any other type would assume some alignment that we can't guarantee because of the above.
+ let unpadded_buffer_u8_view = bytemuck::cast_slice_mut(&mut unpadded_buffer);
+
+ for row in 0..self.num_rows() {
+ let offset_padded = (self.bytes_per_row_padded * row) as usize;
+ let offset_unpadded = (self.bytes_per_row_unpadded * row) as usize;
+ unpadded_buffer_u8_view
+ [offset_unpadded..(offset_unpadded + self.bytes_per_row_unpadded as usize)]
+ .copy_from_slice(
+ &buffer[offset_padded..(offset_padded + self.bytes_per_row_unpadded as usize)],
+ );
+ }
+
+ unpadded_buffer
+ }
+}
+
+pub fn is_float_filterable(format: wgpu::TextureFormat, device_features: wgpu::Features) -> bool {
+ format
+ .guaranteed_format_features(device_features)
+ .flags
+ .contains(wgpu::TextureFormatFeatureFlags::FILTERABLE)
+}
+
+pub fn num_texture_components(format: wgpu::TextureFormat) -> u8 {
+ #[allow(clippy::match_same_arms)]
+ match format {
+ wgpu::TextureFormat::R8Unorm
+ | wgpu::TextureFormat::R8Snorm
+ | wgpu::TextureFormat::R8Uint
+ | wgpu::TextureFormat::R8Sint
+ | wgpu::TextureFormat::R16Uint
+ | wgpu::TextureFormat::R16Sint
+ | wgpu::TextureFormat::R16Unorm
+ | wgpu::TextureFormat::R16Snorm
+ | wgpu::TextureFormat::R16Float
+ | wgpu::TextureFormat::R32Uint
+ | wgpu::TextureFormat::R32Sint
+ | wgpu::TextureFormat::R32Float => 1,
+
+ wgpu::TextureFormat::Rg8Unorm
+ | wgpu::TextureFormat::Rg8Snorm
+ | wgpu::TextureFormat::Rg8Uint
+ | wgpu::TextureFormat::Rg8Sint
+ | wgpu::TextureFormat::Rg16Uint
+ | wgpu::TextureFormat::Rg16Sint
+ | wgpu::TextureFormat::Rg16Unorm
+ | wgpu::TextureFormat::Rg16Snorm
+ | wgpu::TextureFormat::Rg16Float
+ | wgpu::TextureFormat::Rg32Uint
+ | wgpu::TextureFormat::Rg32Sint
+ | wgpu::TextureFormat::Rg32Float => 2,
+
+ wgpu::TextureFormat::Rgba8Unorm
+ | wgpu::TextureFormat::Rgba8UnormSrgb
+ | wgpu::TextureFormat::Rgba8Snorm
+ | wgpu::TextureFormat::Rgba8Uint
+ | wgpu::TextureFormat::Rgba8Sint
+ | wgpu::TextureFormat::Bgra8Unorm
+ | wgpu::TextureFormat::Bgra8UnormSrgb
+ | wgpu::TextureFormat::Rgba16Uint
+ | wgpu::TextureFormat::Rgba16Sint
+ | wgpu::TextureFormat::Rgba16Unorm
+ | wgpu::TextureFormat::Rgba16Snorm
+ | wgpu::TextureFormat::Rgba16Float
+ | wgpu::TextureFormat::Rgba32Uint
+ | wgpu::TextureFormat::Rgba32Sint
+ | wgpu::TextureFormat::Rgba32Float => 4,
+
+ wgpu::TextureFormat::Rgb9e5Ufloat | wgpu::TextureFormat::Rg11b10Float => 3,
+ wgpu::TextureFormat::Rgb10a2Unorm => 4,
+
+ wgpu::TextureFormat::Stencil8
+ | wgpu::TextureFormat::Depth16Unorm
+ | wgpu::TextureFormat::Depth24Plus
+ | wgpu::TextureFormat::Depth32Float => 1,
+
+ // It's complicated. Each aspect has actually only a single channel.
+ wgpu::TextureFormat::Depth24PlusStencil8 | wgpu::TextureFormat::Depth32FloatStencil8 => 2,
+
+ wgpu::TextureFormat::Bc1RgbaUnorm
+ | wgpu::TextureFormat::Bc1RgbaUnormSrgb
+ | wgpu::TextureFormat::Bc2RgbaUnorm
+ | wgpu::TextureFormat::Bc2RgbaUnormSrgb
+ | wgpu::TextureFormat::Bc3RgbaUnorm
+ | wgpu::TextureFormat::Bc3RgbaUnormSrgb
+ | wgpu::TextureFormat::Bc4RUnorm
+ | wgpu::TextureFormat::Bc4RSnorm
+ | wgpu::TextureFormat::Bc5RgUnorm
+ | wgpu::TextureFormat::Bc5RgSnorm
+ | wgpu::TextureFormat::Bc6hRgbUfloat
+ | wgpu::TextureFormat::Bc6hRgbFloat
+ | wgpu::TextureFormat::Bc7RgbaUnorm
+ | wgpu::TextureFormat::Bc7RgbaUnormSrgb
+ | wgpu::TextureFormat::Etc2Rgb8Unorm
+ | wgpu::TextureFormat::Etc2Rgb8UnormSrgb
+ | wgpu::TextureFormat::Etc2Rgb8A1Unorm
+ | wgpu::TextureFormat::Etc2Rgb8A1UnormSrgb
+ | wgpu::TextureFormat::Etc2Rgba8Unorm
+ | wgpu::TextureFormat::Etc2Rgba8UnormSrgb
+ | wgpu::TextureFormat::EacR11Unorm
+ | wgpu::TextureFormat::EacR11Snorm
+ | wgpu::TextureFormat::EacRg11Unorm
+ | wgpu::TextureFormat::EacRg11Snorm
+ | wgpu::TextureFormat::Astc { .. } => 4,
+ }
+}
diff --git a/crates/re_renderer/src/view_builder.rs b/crates/re_renderer/src/view_builder.rs
index 3d57b21a6f1c..86d8fc817b59 100644
--- a/crates/re_renderer/src/view_builder.rs
+++ b/crates/re_renderer/src/view_builder.rs
@@ -6,7 +6,8 @@ use crate::{
allocator::{create_and_fill_uniform_buffer, GpuReadbackIdentifier},
context::RenderContext,
draw_phases::{
- DrawPhase, OutlineConfig, OutlineMaskProcessor, PickingLayerProcessor, ScreenshotProcessor,
+ DrawPhase, OutlineConfig, OutlineMaskProcessor, PickingLayerError, PickingLayerProcessor,
+ ScreenshotProcessor,
},
global_bindings::FrameUniformBuffer,
renderer::{CompositorDrawData, DebugOverlayDrawData, DrawData, Renderer},
@@ -37,6 +38,9 @@ pub enum ViewBuilderError {
#[error("Picking rectangle readback was already scheduled.")]
PickingRectAlreadyScheduled,
+
+ #[error(transparent)]
+ InvalidDebugOverlay(#[from] crate::renderer::DebugOverlayError),
}
/// The highest level rendering block in `re_renderer`.
@@ -562,7 +566,15 @@ impl ViewBuilder {
//pass.set_bind_group(0, &setup.bind_group_0, &[]);
self.draw_phase(ctx, DrawPhase::PickingLayer, &mut pass);
}
- picking_processor.end_render_pass(&mut encoder, &ctx.gpu_resources)?;
+ match picking_processor.end_render_pass(&mut encoder, &ctx.gpu_resources) {
+ Err(PickingLayerError::ResourcePoolError(err)) => {
+ return Err(err);
+ }
+ Err(PickingLayerError::ReadbackError(err)) => {
+ re_log::warn_once!("Failed to schedule picking data readback: {err}");
+ }
+ Ok(()) => {}
+ }
}
if let Some(outline_mask_processor) = self.outline_mask_processor.take() {
@@ -582,7 +594,12 @@ impl ViewBuilder {
pass.set_bind_group(0, &setup.bind_group_0, &[]);
self.draw_phase(ctx, DrawPhase::CompositingScreenshot, &mut pass);
}
- screenshot_processor.end_render_pass(&mut encoder);
+ match screenshot_processor.end_render_pass(&mut encoder) {
+ Ok(()) => {}
+ Err(err) => {
+ re_log::warn_once!("Failed to schedule screenshot data readback: {err}");
+ }
+ }
}
Ok(encoder.finish())
@@ -692,7 +709,7 @@ impl ViewBuilder {
&picking_processor.picking_target,
self.setup.resolution_in_pixel.into(),
picking_rect,
- ));
+ )?);
}
self.picking_processor = Some(picking_processor);
diff --git a/crates/re_renderer/src/wgpu_resources/dynamic_resource_pool.rs b/crates/re_renderer/src/wgpu_resources/dynamic_resource_pool.rs
index 6c873429db4b..5c71fe51ac28 100644
--- a/crates/re_renderer/src/wgpu_resources/dynamic_resource_pool.rs
+++ b/crates/re_renderer/src/wgpu_resources/dynamic_resource_pool.rs
@@ -148,6 +148,13 @@ where
self.current_frame_index = frame_index;
let state = self.state.get_mut();
+ let update_stats = |creation_desc: &Desc| {
+ self.total_resource_size_in_bytes.fetch_sub(
+ creation_desc.resource_size_in_bytes(),
+ std::sync::atomic::Ordering::Relaxed,
+ );
+ };
+
// Throw out any resources that we haven't reclaimed last frame.
for (desc, resources) in state.last_frame_deallocated.drain() {
re_log::trace!(
@@ -160,11 +167,8 @@ where
debug_assert!(false, "a resource was marked as destroyed last frame that we no longer kept track of");
continue;
};
+ update_stats(&desc);
on_destroy_resource(&removed_resource);
- self.total_resource_size_in_bytes.fetch_sub(
- desc.resource_size_in_bytes(),
- std::sync::atomic::Ordering::Relaxed,
- );
}
}
@@ -184,6 +188,7 @@ where
.push(resource.handle);
true
} else {
+ update_stats(&resource.creation_desc);
on_destroy_resource(&resource.inner);
false
}
diff --git a/crates/re_renderer/src/wgpu_resources/mod.rs b/crates/re_renderer/src/wgpu_resources/mod.rs
index 06f30b6292d3..e5e3a389f731 100644
--- a/crates/re_renderer/src/wgpu_resources/mod.rs
+++ b/crates/re_renderer/src/wgpu_resources/mod.rs
@@ -7,7 +7,6 @@
//! higher level resources that arise from processing user provided data.
mod bind_group_layout_pool;
-use std::borrow::Cow;
pub use bind_group_layout_pool::{
BindGroupLayoutDesc, GpuBindGroupLayoutHandle, GpuBindGroupLayoutPool,
@@ -116,112 +115,3 @@ impl WgpuResourcePools {
}
}
}
-
-/// Utility for dealing with buffers containing raw 2D texture data.
-#[derive(Clone)]
-pub struct Texture2DBufferInfo {
- /// How many bytes per row contain actual data.
- pub bytes_per_row_unpadded: u32,
-
- /// How many bytes per row are required to be allocated in total.
- ///
- /// Padding bytes are always at the end of a row.
- pub bytes_per_row_padded: u32,
-
- /// Size required for an unpadded buffer.
- pub buffer_size_unpadded: wgpu::BufferAddress,
-
- /// Size required for a padded buffer as it is read/written from/to the GPU.
- pub buffer_size_padded: wgpu::BufferAddress,
-}
-
-impl Texture2DBufferInfo {
- #[inline]
- pub fn new(format: wgpu::TextureFormat, extent: glam::UVec2) -> Self {
- let format_info = format.describe();
-
- let width_blocks = extent.x / format_info.block_dimensions.0 as u32;
- let height_blocks = extent.y / format_info.block_dimensions.1 as u32;
-
- let bytes_per_row_unpadded = width_blocks * format_info.block_size as u32;
- let bytes_per_row_padded =
- wgpu::util::align_to(bytes_per_row_unpadded, wgpu::COPY_BYTES_PER_ROW_ALIGNMENT);
-
- Self {
- bytes_per_row_unpadded,
- bytes_per_row_padded,
- buffer_size_unpadded: (bytes_per_row_unpadded * height_blocks) as wgpu::BufferAddress,
- buffer_size_padded: (bytes_per_row_padded * height_blocks) as wgpu::BufferAddress,
- }
- }
-
- #[inline]
- pub fn num_rows(&self) -> u32 {
- self.buffer_size_padded as u32 / self.bytes_per_row_padded
- }
-
- /// Removes the padding from a buffer containing gpu texture data.
- ///
- /// The passed in buffer is to be expected to be exactly of size [`Texture2DBufferInfo::buffer_size_padded`].
- ///
- /// Note that if you're passing in gpu data, there no alignment guarantees on the returned slice,
- /// do NOT convert it using [`bytemuck`]. Use [`Texture2DBufferInfo::remove_padding_and_convert`] instead.
- pub fn remove_padding<'a>(&self, buffer: &'a [u8]) -> Cow<'a, [u8]> {
- crate::profile_function!();
-
- assert_eq!(buffer.len() as wgpu::BufferAddress, self.buffer_size_padded);
-
- if self.bytes_per_row_padded == self.bytes_per_row_unpadded {
- return Cow::Borrowed(buffer);
- }
-
- let mut unpadded_buffer = Vec::with_capacity(self.buffer_size_unpadded as _);
-
- for row in 0..self.num_rows() {
- let offset = (self.bytes_per_row_padded * row) as usize;
- unpadded_buffer.extend_from_slice(
- &buffer[offset..(offset + self.bytes_per_row_unpadded as usize)],
- );
- }
-
- unpadded_buffer.into()
- }
-
- /// Removes the padding from a buffer containing gpu texture data and remove convert to a given type.
- ///
- /// The passed in buffer is to be expected to be exactly of size [`Texture2DBufferInfo::buffer_size_padded`].
- ///
- /// The unpadded row size is expected to be a multiple of the size of the target type.
- /// (Which means that, while uncommon, it technically doesn't need to be as big as a block in the pixel - this can be useful for e.g. packing wide bitfields)
- pub fn remove_padding_and_convert(&self, buffer: &[u8]) -> Vec {
- crate::profile_function!();
-
- assert_eq!(buffer.len() as wgpu::BufferAddress, self.buffer_size_padded);
- assert!(self.bytes_per_row_unpadded % std::mem::size_of::() as u32 == 0);
-
- // Due to https://github.com/gfx-rs/wgpu/issues/3508 the data might be completely unaligned,
- // so much, that we can't even interpret it as e.g. a u32 slice.
- // Therefore, we have to do a copy of the data regardless of whether it's padded or not.
-
- let mut unpadded_buffer: Vec = vec![
- T::zeroed();
- (self.num_rows() * self.bytes_per_row_unpadded / std::mem::size_of::() as u32)
- as usize
- ]; // TODO(andreas): Consider using unsafe set_len() instead of vec![] to avoid zeroing the memory.
-
- // The copy has to happen on a u8 slice, because any other type would assume some alignment that we can't guarantee because of the above.
- let unpadded_buffer_u8_view = bytemuck::cast_slice_mut(&mut unpadded_buffer);
-
- for row in 0..self.num_rows() {
- let offset_padded = (self.bytes_per_row_padded * row) as usize;
- let offset_unpadded = (self.bytes_per_row_unpadded * row) as usize;
- unpadded_buffer_u8_view
- [offset_unpadded..(offset_unpadded + self.bytes_per_row_unpadded as usize)]
- .copy_from_slice(
- &buffer[offset_padded..(offset_padded + self.bytes_per_row_unpadded as usize)],
- );
- }
-
- unpadded_buffer
- }
-}
diff --git a/crates/re_renderer/src/wgpu_resources/sampler_pool.rs b/crates/re_renderer/src/wgpu_resources/sampler_pool.rs
index 53eed49cdf73..2c03824cf1c9 100644
--- a/crates/re_renderer/src/wgpu_resources/sampler_pool.rs
+++ b/crates/re_renderer/src/wgpu_resources/sampler_pool.rs
@@ -1,4 +1,4 @@
-use std::{hash::Hash, num::NonZeroU8};
+use std::hash::Hash;
use super::{resource::PoolError, static_resource_pool::StaticResourcePool};
use crate::debug_label::DebugLabel;
@@ -33,9 +33,6 @@ pub struct SamplerDesc {
/// Maximum level of detail (i.e. mip level) to use
pub lod_max_clamp: ordered_float::NotNan,
-
- /// Valid values: 1, 2, 4, 8, and 16.
- pub anisotropy_clamp: Option,
}
#[derive(Default)]
@@ -56,11 +53,11 @@ impl GpuSamplerPool {
mipmap_filter: desc.mipmap_filter,
lod_min_clamp: desc.lod_min_clamp.into(),
lod_max_clamp: desc.lod_max_clamp.into(),
- anisotropy_clamp: desc.anisotropy_clamp,
// Unsupported
compare: None,
border_color: None,
+ anisotropy_clamp: 1,
})
})
}
diff --git a/crates/re_renderer/src/wgpu_resources/shader_module_pool.rs b/crates/re_renderer/src/wgpu_resources/shader_module_pool.rs
index 1fb291f47f05..9b42f87d1788 100644
--- a/crates/re_renderer/src/wgpu_resources/shader_module_pool.rs
+++ b/crates/re_renderer/src/wgpu_resources/shader_module_pool.rs
@@ -54,13 +54,18 @@ impl ShaderModuleDesc {
&self,
device: &wgpu::Device,
resolver: &mut FileResolver,
+ shader_text_workaround_replacements: &[(String, String)],
) -> wgpu::ShaderModule {
- let source_interpolated = resolver
+ let mut source_interpolated = resolver
.populate(&self.source)
.context("couldn't resolve shader module's contents")
.map_err(|err| re_log::error!(err=%re_error::format(err)))
.unwrap_or_default();
+ for (from, to) in shader_text_workaround_replacements {
+ source_interpolated.contents = source_interpolated.contents.replace(from, to);
+ }
+
// All wgpu errors come asynchronously: this call will succeed whether the given
// source is valid or not.
// Only when actually submitting passes that make use of this shader will we know if
@@ -78,6 +83,11 @@ impl ShaderModuleDesc {
#[derive(Default)]
pub struct GpuShaderModulePool {
pool: StaticResourcePool,
+
+ /// Workarounds via text replacement in shader source code.
+ ///
+ /// TODO(andreas): These should be solved with a pre-processor.
+ pub shader_text_workaround_replacements: Vec<(String, String)>,
}
impl GpuShaderModulePool {
@@ -87,8 +97,9 @@ impl GpuShaderModulePool {
resolver: &mut FileResolver,
desc: &ShaderModuleDesc,
) -> GpuShaderModuleHandle {
- self.pool
- .get_or_create(desc, |desc| desc.create_shader_module(device, resolver))
+ self.pool.get_or_create(desc, |desc| {
+ desc.create_shader_module(device, resolver, &self.shader_text_workaround_replacements)
+ })
}
pub fn begin_frame(
@@ -115,7 +126,11 @@ impl GpuShaderModulePool {
}
paths.iter().any(|p| updated_paths.contains(p)).then(|| {
- let shader_module = desc.create_shader_module(device, resolver);
+ let shader_module = desc.create_shader_module(
+ device,
+ resolver,
+ &self.shader_text_workaround_replacements,
+ );
re_log::debug!(?desc.source, label = desc.label.get(), "recompiled shader module");
shader_module
})
diff --git a/crates/re_renderer/src/wgpu_resources/texture_pool.rs b/crates/re_renderer/src/wgpu_resources/texture_pool.rs
index c113b4f603d8..d194b387f773 100644
--- a/crates/re_renderer/src/wgpu_resources/texture_pool.rs
+++ b/crates/re_renderer/src/wgpu_resources/texture_pool.rs
@@ -69,9 +69,20 @@ impl DynamicResourcesDesc for TextureDesc {
/// The actual number might be both bigger (padding) and lower (gpu sided compression).
fn resource_size_in_bytes(&self) -> u64 {
let mut size_in_bytes = 0;
- let format_desc = self.format.describe();
- let pixels_per_block =
- format_desc.block_dimensions.0 as u64 * format_desc.block_dimensions.1 as u64;
+ let block_size = self
+ .format
+ .block_size(Some(wgpu::TextureAspect::All))
+ .unwrap_or_else(|| {
+ self.format
+ .block_size(Some(wgpu::TextureAspect::DepthOnly))
+ .unwrap_or(0)
+ + self
+ .format
+ .block_size(Some(wgpu::TextureAspect::StencilOnly))
+ .unwrap_or(0)
+ });
+ let block_dimension = self.format.block_dimensions();
+ let pixels_per_block = block_dimension.0 as u64 * block_dimension.1 as u64;
for mip in 0..self.size.max_mips(self.dimension) {
let mip_size = self
@@ -80,7 +91,7 @@ impl DynamicResourcesDesc for TextureDesc {
.physical_size(self.format);
let num_pixels = mip_size.width * mip_size.height * mip_size.depth_or_array_layers;
let num_blocks = num_pixels as u64 / pixels_per_block;
- size_in_bytes += num_blocks * format_desc.block_size as u64;
+ size_in_bytes += num_blocks * block_size as u64;
}
size_in_bytes
diff --git a/crates/re_ui/Cargo.toml b/crates/re_ui/Cargo.toml
index cfa5732751ca..b9a59e8f9c0e 100644
--- a/crates/re_ui/Cargo.toml
+++ b/crates/re_ui/Cargo.toml
@@ -30,8 +30,8 @@ egui_dock = ["dep:egui_dock"]
[dependencies]
-egui = { workspace = true, features = ["extra_debug_asserts", "tracing"] }
-egui_extras = { workspace = true, features = ["tracing"] }
+egui.workspace = true
+egui_extras.workspace = true
image = { workspace = true, default-features = false, features = ["png"] }
parking_lot.workspace = true
serde = { version = "1", features = ["derive"] }
@@ -39,11 +39,10 @@ serde_json = "1"
strum = { version = "0.24", features = ["derive"] }
strum_macros = "0.24"
sublime_fuzzy = "0.7"
-
## Optional dependencies:
eframe = { workspace = true, optional = true, default-features = false }
egui_dock = { workspace = true, optional = true, features = ["serde"] }
+re_log.workspace = true
[dev-dependencies]
eframe = { workspace = true, default-features = false, features = ["wgpu"] }
-re_log.workspace = true
diff --git a/crates/re_ui/data/design_tokens.json b/crates/re_ui/data/design_tokens.json
index 9c8974d9a4c5..7845d4a7ad2d 100644
--- a/crates/re_ui/data/design_tokens.json
+++ b/crates/re_ui/data/design_tokens.json
@@ -3,121 +3,126 @@
"Color": {
"Surface": {
"Default": {
- "description": "Background color for most UI surfaces in Rerun",
- "value": "{Global.Color.Grey.100}",
- "type": "color"
+ "value": "{Global.Color.Gray.50}",
+ "type": "color",
+ "description": "Background color for most UI surfaces in Rerun"
},
"Floating": {
- "description": "Background color for floating elements like menus, dropdown options, notifications etc.",
- "value": "{Global.Color.Grey.175}",
- "type": "color"
+ "value": "{Global.Color.Primary.25}",
+ "type": "color",
+ "description": "Background color for floating elements like menus, dropdown options, notifications etc."
}
},
"Action": {
"Default": {
- "description": "Background color for UI elements like buttons and selects",
- "value": "{Global.Color.Grey.200}",
- "type": "color"
+ "value": "{Global.Color.Gray.200}",
+ "type": "color",
+ "description": "Background color for UI elements like buttons and selects"
},
"Hovered": {
- "description": "Background color for hovered UI elements",
- "value": "{Global.Color.Grey.225}",
- "type": "color"
+ "value": "{Global.Color.Primary.Hover}",
+ "type": "color",
+ "description": "Background color for hovered UI elements"
},
"Active": {
- "description": "Background color for pressed UI elements",
- "value": "{Global.Color.Grey.250}",
- "type": "color"
+ "value": "{Global.Color.Primary.Hover}",
+ "type": "color",
+ "description": "Background color for pressed UI elements"
},
"Pressed": {
- "description": "Background color for suppressed UI elements, like a select that is currently showing a menu",
- "value": "{Global.Color.Grey.250}",
- "type": "color"
+ "value": "{Global.Color.Primary.Hover}",
+ "type": "color",
+ "description": "Background color for suppressed UI elements, like a select that is currently showing a menu"
+ },
+ "Inactive": {
+ "value": "{Global.Color.Gray.200}",
+ "type": "color",
+ "description": "Background color for inactive buttons and such"
}
},
"NotificationBadge": {
"Unread": {
- "description": "Used for unread notification indicators",
"value": "{Global.Color.Blue.500}",
- "type": "color"
+ "type": "color",
+ "description": "Used for unread notification indicators"
},
"Read": {
- "description": "Used for read notification indicators",
"value": "{Global.Color.Grey.250}",
- "type": "color"
+ "type": "color",
+ "description": "Used for read notification indicators"
}
},
"Text": {
"Default": {
- "description": "Default text color",
- "value": "{Global.Color.Grey.775}",
- "type": "color"
+ "value": "{Global.Color.Text.Primary}",
+ "type": "color",
+ "description": "Default text color"
},
"Subdued": {
- "description": "Used for less important text",
- "value": "{Global.Color.Grey.550}",
- "type": "color"
+ "value": "{Global.Color.Text.Secondary}",
+ "type": "color",
+ "description": "Used for less important text"
},
"Strong": {
- "description": "Used for highlighted or emphasized items, such as current navigation items",
- "value": "{Global.Color.Grey.1000}",
- "type": "color"
+ "value": "{Global.Color.Black}",
+ "type": "color",
+ "description": "Used for highlighted or emphasized items, such as current navigation items"
}
},
"Border": {
"Default": {
- "value": "{Global.Color.OpaqueGrey.Default}",
- "description": "Default color for borders",
- "type": "color"
+ "value": "{Global.Color.Gray.200}",
+ "type": "color",
+ "description": "Default color for borders"
}
},
"Icon": {
"Default": {
- "description": "Default icon color",
"value": "{Global.Color.Grey.775}",
- "type": "color"
+ "type": "color",
+ "description": "Default icon color"
},
"Subdued": {
- "description": "Used together with subdued text",
"value": "{Global.Color.Grey.550}",
- "type": "color"
+ "type": "color",
+ "description": "Used together with subdued text"
},
"Strong": {
- "description": "Used together width strong text",
"value": "{Global.Color.Grey.1000}",
- "type": "color"
+ "type": "color",
+ "description": "Used together width strong text"
}
},
"Highlight": {
"Default": {
- "value": "{Global.Color.Blue.350}",
- "description": "Default color for highlighted items, like hovered menu items",
- "type": "color"
+ "value": "{Global.Color.Primary.Hover}",
+ "type": "color",
+ "description": "Default color for highlighted items, like hovered menu items"
}
}
},
"Typography": {
"Default": {
"value": "{Global.Typography.200}",
- "description": "Default font in Rerun's UI",
- "type": "typography"
+ "type": "typography",
+ "description": "Default font in Rerun's UI"
}
},
"Shadow": {
"Menu": {
- "description": "Used for menus, such as selects",
"value": "{Global.Shadow.100}",
- "type": "boxShadow"
+ "type": "boxShadow",
+ "description": "Used for menus, such as selects"
},
"Popover": {
- "description": "Used for popovers and other semi-modal elements",
"value": "{Global.Shadow.400}",
- "type": "boxShadow"
+ "type": "boxShadow",
+ "description": "Used for popovers and other semi-modal elements"
},
"Modal": {
- "description": "Used for modal views",
"value": "{Global.Shadow.800}",
- "type": "boxShadow"
+ "type": "boxShadow",
+ "description": "Used for modal views"
}
}
},
@@ -126,1042 +131,1280 @@
"Grey": {
"0": {
"value": "#000000",
- "description": "0 - 0",
- "type": "color"
+ "type": "color",
+ "description": "0 - 0"
},
"25": {
"value": "#020303",
- "description": "0.7405999850077014 - 0.025",
- "type": "color"
+ "type": "color",
+ "description": "0.7405999850077014 - 0.025"
},
"50": {
"value": "#050607",
- "description": "1.7116872276823336 - 0.05",
- "type": "color"
+ "type": "color",
+ "description": "1.7116872276823336 - 0.05"
},
"75": {
"value": "#090b0c",
- "description": "2.911127985087129 - 0.075",
- "type": "color"
+ "type": "color",
+ "description": "2.911127985087129 - 0.075"
},
"100": {
"value": "#0d1011",
- "description": "4.335380638931743 - 0.1",
- "type": "color"
+ "type": "color",
+ "description": "4.335380638931743 - 0.1"
},
"125": {
"value": "#111415",
- "description": "5.979517530826747 - 0.125",
- "type": "color"
+ "type": "color",
+ "description": "5.979517530826747 - 0.125"
},
"150": {
"value": "#141819",
- "description": "7.837255342936205 - 0.15",
- "type": "color"
+ "type": "color",
+ "description": "7.837255342936205 - 0.15"
},
"175": {
"value": "#181c1e",
- "description": "9.90099383672154 - 0.175",
- "type": "color"
+ "type": "color",
+ "description": "9.90099383672154 - 0.175"
},
"200": {
"value": "#1c2123",
- "description": "12.16186271093947 - 0.2",
- "type": "color"
+ "type": "color",
+ "description": "12.16186271093947 - 0.2"
},
"225": {
"value": "#212628",
- "description": "14.609776289998841 - 0.225",
- "type": "color"
+ "type": "color",
+ "description": "14.609776289998841 - 0.225"
},
"250": {
"value": "#262b2e",
- "description": "17.233495705504463 - 0.25",
- "type": "color"
+ "type": "color",
+ "description": "17.233495705504463 - 0.25"
},
"275": {
"value": "#2b3134",
- "description": "20.02069818761812 - 0.275",
- "type": "color"
+ "type": "color",
+ "description": "20.02069818761812 - 0.275"
},
"300": {
"value": "#31383b",
- "description": "22.958053039032254 - 0.3",
- "type": "color"
+ "type": "color",
+ "description": "22.958053039032254 - 0.3"
},
"325": {
"value": "#373f42",
- "description": "26.03130382315192 - 0.325",
- "type": "color"
+ "type": "color",
+ "description": "26.03130382315192 - 0.325"
},
"350": {
"value": "#3e464a",
- "description": "29.22535625976699 - 0.35",
- "type": "color"
+ "type": "color",
+ "description": "29.22535625976699 - 0.35"
},
"375": {
"value": "#454e52",
- "description": "32.524371286309126 - 0.375",
- "type": "color"
+ "type": "color",
+ "description": "32.524371286309126 - 0.375"
},
"400": {
"value": "#4c565a",
- "description": "35.91186271093947 - 0.4",
- "type": "color"
+ "type": "color",
+ "description": "35.91186271093947 - 0.4"
},
"425": {
"value": "#545e63",
- "description": "39.37079885540354 - 0.425",
- "type": "color"
+ "type": "color",
+ "description": "39.37079885540354 - 0.425"
},
"450": {
"value": "#5c676c",
- "description": "42.88370756099135 - 0.45",
- "type": "color"
+ "type": "color",
+ "description": "42.88370756099135 - 0.45"
},
"475": {
"value": "#647075",
- "description": "46.43278391020581 - 0.475",
- "type": "color"
+ "type": "color",
+ "description": "46.43278391020581 - 0.475"
},
"500": {
"value": "#6c797f",
- "description": "49.99999999999999 - 0.5",
- "type": "color"
+ "type": "color",
+ "description": "49.99999999999999 - 0.5"
},
"525": {
"value": "#748288",
- "description": "53.56721608979418 - 0.525",
- "type": "color"
+ "type": "color",
+ "description": "53.56721608979418 - 0.525"
},
"550": {
"value": "#7d8c92",
- "description": "57.11629243900867 - 0.55",
- "type": "color"
+ "type": "color",
+ "description": "57.11629243900867 - 0.55"
},
"575": {
"value": "#85959c",
- "description": "60.62920114459644 - 0.575",
- "type": "color"
+ "type": "color",
+ "description": "60.62920114459644 - 0.575"
},
"600": {
"value": "#8e9ea5",
- "description": "64.08813728906053 - 0.6",
- "type": "color"
+ "type": "color",
+ "description": "64.08813728906053 - 0.6"
},
"625": {
"value": "#96a7af",
- "description": "67.47562871369087 - 0.625",
- "type": "color"
+ "type": "color",
+ "description": "67.47562871369087 - 0.625"
},
"650": {
"value": "#9eb0b8",
- "description": "70.774643740233 - 0.65",
- "type": "color"
+ "type": "color",
+ "description": "70.774643740233 - 0.65"
},
"675": {
"value": "#a6b9c1",
- "description": "73.96869617684807 - 0.675",
- "type": "color"
+ "type": "color",
+ "description": "73.96869617684807 - 0.675"
},
"700": {
"value": "#aec2ca",
- "description": "77.04194696096773 - 0.7",
- "type": "color"
+ "type": "color",
+ "description": "77.04194696096773 - 0.7"
},
"725": {
"value": "#b6cad2",
- "description": "79.97930181238189 - 0.725",
- "type": "color"
+ "type": "color",
+ "description": "79.97930181238189 - 0.725"
},
"750": {
"value": "#c0d1d8",
- "description": "82.76650429449552 - 0.75",
- "type": "color"
+ "type": "color",
+ "description": "82.76650429449552 - 0.75"
},
"775": {
"value": "#cad8de",
- "description": "85.39022371000115 - 0.775",
- "type": "color"
+ "type": "color",
+ "description": "85.39022371000115 - 0.775"
},
"800": {
"value": "#d3dee3",
- "description": "87.83813728906054 - 0.8",
- "type": "color"
+ "type": "color",
+ "description": "87.83813728906054 - 0.8"
},
"825": {
"value": "#dbe4e8",
- "description": "90.09900616327847 - 0.825",
- "type": "color"
+ "type": "color",
+ "description": "90.09900616327847 - 0.825"
},
"850": {
"value": "#e3eaed",
- "description": "92.16274465706378 - 0.85",
- "type": "color"
+ "type": "color",
+ "description": "92.16274465706378 - 0.85"
},
"875": {
"value": "#e9eff1",
- "description": "94.02048246917325 - 0.875",
- "type": "color"
+ "type": "color",
+ "description": "94.02048246917325 - 0.875"
},
"900": {
"value": "#eff3f5",
- "description": "95.66461936106825 - 0.9",
- "type": "color"
+ "type": "color",
+ "description": "95.66461936106825 - 0.9"
},
"925": {
"value": "#f4f7f8",
- "description": "97.08887201491288 - 0.925",
- "type": "color"
+ "type": "color",
+ "description": "97.08887201491288 - 0.925"
},
"950": {
"value": "#f9fafb",
- "description": "98.28831277231767 - 0.95",
- "type": "color"
+ "type": "color",
+ "description": "98.28831277231767 - 0.95"
},
"975": {
"value": "#fcfdfd",
- "description": "99.25940001499231 - 0.975",
- "type": "color"
+ "type": "color",
+ "description": "99.25940001499231 - 0.975"
},
"1000": {
"value": "#ffffff",
- "description": "100 - 1",
- "type": "color"
+ "type": "color",
+ "description": "100 - 1"
}
},
"Green": {
"0": {
"value": "#000000",
- "description": "0 - 0",
- "type": "color"
+ "type": "color",
+ "description": "0 - 0"
},
"25": {
"value": "#000401",
- "description": "0.7405999850077014 - 0.025",
- "type": "color"
+ "type": "color",
+ "description": "0.7405999850077014 - 0.025"
},
"50": {
"value": "#000803",
- "description": "1.7116872276823336 - 0.05",
- "type": "color"
+ "type": "color",
+ "description": "1.7116872276823336 - 0.05"
},
"75": {
"value": "#000e04",
- "description": "2.911127985087129 - 0.075",
- "type": "color"
+ "type": "color",
+ "description": "2.911127985087129 - 0.075"
},
"100": {
"value": "#001306",
- "description": "4.335380638931743 - 0.1",
- "type": "color"
+ "type": "color",
+ "description": "4.335380638931743 - 0.1"
},
"125": {
"value": "#001809",
- "description": "5.979517530826747 - 0.125",
- "type": "color"
+ "type": "color",
+ "description": "5.979517530826747 - 0.125"
},
"150": {
"value": "#001c0b",
- "description": "7.837255342936205 - 0.15",
- "type": "color"
+ "type": "color",
+ "description": "7.837255342936205 - 0.15"
},
"175": {
"value": "#00210e",
- "description": "9.90099383672154 - 0.175",
- "type": "color"
+ "type": "color",
+ "description": "9.90099383672154 - 0.175"
},
"200": {
"value": "#002611",
- "description": "12.16186271093947 - 0.2",
- "type": "color"
+ "type": "color",
+ "description": "12.16186271093947 - 0.2"
},
"225": {
"value": "#002c15",
- "description": "14.609776289998841 - 0.225",
- "type": "color"
+ "type": "color",
+ "description": "14.609776289998841 - 0.225"
},
"250": {
"value": "#003219",
- "description": "17.233495705504463 - 0.25",
- "type": "color"
+ "type": "color",
+ "description": "17.233495705504463 - 0.25"
},
"275": {
"value": "#00391d",
- "description": "20.02069818761812 - 0.275",
- "type": "color"
+ "type": "color",
+ "description": "20.02069818761812 - 0.275"
},
"300": {
"value": "#004021",
- "description": "22.958053039032254 - 0.3",
- "type": "color"
+ "type": "color",
+ "description": "22.958053039032254 - 0.3"
},
"325": {
"value": "#004826",
- "description": "26.03130382315192 - 0.325",
- "type": "color"
+ "type": "color",
+ "description": "26.03130382315192 - 0.325"
},
"350": {
"value": "#00502b",
- "description": "29.22535625976699 - 0.35",
- "type": "color"
+ "type": "color",
+ "description": "29.22535625976699 - 0.35"
},
"375": {
"value": "#005930",
- "description": "32.524371286309126 - 0.375",
- "type": "color"
+ "type": "color",
+ "description": "32.524371286309126 - 0.375"
},
"400": {
"value": "#006236",
- "description": "35.91186271093947 - 0.4",
- "type": "color"
+ "type": "color",
+ "description": "35.91186271093947 - 0.4"
},
"425": {
"value": "#006b3b",
- "description": "39.37079885540354 - 0.425",
- "type": "color"
+ "type": "color",
+ "description": "39.37079885540354 - 0.425"
},
"450": {
"value": "#007541",
- "description": "42.88370756099135 - 0.45",
- "type": "color"
+ "type": "color",
+ "description": "42.88370756099135 - 0.45"
},
"475": {
"value": "#007f47",
- "description": "46.43278391020581 - 0.475",
- "type": "color"
+ "type": "color",
+ "description": "46.43278391020581 - 0.475"
},
"500": {
"value": "#00894d",
- "description": "49.99999999999999 - 0.5",
- "type": "color"
+ "type": "color",
+ "description": "49.99999999999999 - 0.5"
},
"525": {
"value": "#009353",
- "description": "53.56721608979418 - 0.525",
- "type": "color"
+ "type": "color",
+ "description": "53.56721608979418 - 0.525"
},
"550": {
"value": "#009e5a",
- "description": "57.11629243900867 - 0.55",
- "type": "color"
+ "type": "color",
+ "description": "57.11629243900867 - 0.55"
},
"575": {
"value": "#00a860",
- "description": "60.62920114459644 - 0.575",
- "type": "color"
+ "type": "color",
+ "description": "60.62920114459644 - 0.575"
},
"600": {
"value": "#00b266",
- "description": "64.08813728906053 - 0.6",
- "type": "color"
+ "type": "color",
+ "description": "64.08813728906053 - 0.6"
},
"625": {
"value": "#00bc6c",
- "description": "67.47562871369087 - 0.625",
- "type": "color"
+ "type": "color",
+ "description": "67.47562871369087 - 0.625"
},
"650": {
"value": "#00c772",
- "description": "70.774643740233 - 0.65",
- "type": "color"
+ "type": "color",
+ "description": "70.774643740233 - 0.65"
},
"675": {
"value": "#00d078",
- "description": "73.96869617684807 - 0.675",
- "type": "color"
+ "type": "color",
+ "description": "73.96869617684807 - 0.675"
},
"700": {
"value": "#00da7e",
- "description": "77.04194696096773 - 0.7",
- "type": "color"
+ "type": "color",
+ "description": "77.04194696096773 - 0.7"
},
"725": {
"value": "#00e384",
- "description": "79.97930181238189 - 0.725",
- "type": "color"
+ "type": "color",
+ "description": "79.97930181238189 - 0.725"
},
"750": {
"value": "#00ec89",
- "description": "82.76650429449552 - 0.75",
- "type": "color"
+ "type": "color",
+ "description": "82.76650429449552 - 0.75"
},
"775": {
"value": "#00f48e",
- "description": "85.39022371000115 - 0.775",
- "type": "color"
+ "type": "color",
+ "description": "85.39022371000115 - 0.775"
},
"800": {
"value": "#00fc93",
- "description": "87.83813728906054 - 0.8",
- "type": "color"
+ "type": "color",
+ "description": "87.83813728906054 - 0.8"
},
"825": {
"value": "#5cffa5",
- "description": "90.09900616327847 - 0.825",
- "type": "color"
+ "type": "color",
+ "description": "90.09900616327847 - 0.825"
},
"850": {
"value": "#91ffbb",
- "description": "92.16274465706378 - 0.85",
- "type": "color"
+ "type": "color",
+ "description": "92.16274465706378 - 0.85"
},
"875": {
"value": "#b2ffcd",
- "description": "94.02048246917325 - 0.875",
- "type": "color"
+ "type": "color",
+ "description": "94.02048246917325 - 0.875"
},
"900": {
"value": "#caffdc",
- "description": "95.66461936106825 - 0.9",
- "type": "color"
+ "type": "color",
+ "description": "95.66461936106825 - 0.9"
},
"925": {
"value": "#ddffe8",
- "description": "97.08887201491288 - 0.925",
- "type": "color"
+ "type": "color",
+ "description": "97.08887201491288 - 0.925"
},
"950": {
"value": "#ebfff1",
- "description": "98.28831277231767 - 0.95",
- "type": "color"
+ "type": "color",
+ "description": "98.28831277231767 - 0.95"
},
"975": {
"value": "#f7fff9",
- "description": "99.25940001499231 - 0.975",
- "type": "color"
+ "type": "color",
+ "description": "99.25940001499231 - 0.975"
},
"1000": {
"value": "#ffffff",
- "description": "100 - 1",
- "type": "color"
+ "type": "color",
+ "description": "100 - 1"
}
},
"Red": {
"0": {
"value": "#000000",
- "description": "0 - 0",
- "type": "color"
+ "type": "color",
+ "description": "0 - 0"
},
"25": {
"value": "#0c0001",
- "description": "0.7405999850077014 - 0.025",
- "type": "color"
+ "type": "color",
+ "description": "0.7405999850077014 - 0.025"
},
"50": {
"value": "#170003",
- "description": "1.7116872276823336 - 0.05",
- "type": "color"
+ "type": "color",
+ "description": "1.7116872276823336 - 0.05"
},
"75": {
"value": "#200005",
- "description": "2.911127985087129 - 0.075",
- "type": "color"
+ "type": "color",
+ "description": "2.911127985087129 - 0.075"
},
"100": {
"value": "#290007",
- "description": "4.335380638931743 - 0.1",
- "type": "color"
+ "type": "color",
+ "description": "4.335380638931743 - 0.1"
},
"125": {
"value": "#310009",
- "description": "5.979517530826747 - 0.125",
- "type": "color"
+ "type": "color",
+ "description": "5.979517530826747 - 0.125"
},
"150": {
"value": "#38000c",
- "description": "7.837255342936205 - 0.15",
- "type": "color"
+ "type": "color",
+ "description": "7.837255342936205 - 0.15"
},
"175": {
"value": "#40000f",
- "description": "9.90099383672154 - 0.175",
- "type": "color"
+ "type": "color",
+ "description": "9.90099383672154 - 0.175"
},
"200": {
"value": "#480012",
- "description": "12.16186271093947 - 0.2",
- "type": "color"
+ "type": "color",
+ "description": "12.16186271093947 - 0.2"
},
"225": {
"value": "#520016",
- "description": "14.609776289998841 - 0.225",
- "type": "color"
+ "type": "color",
+ "description": "14.609776289998841 - 0.225"
},
"250": {
"value": "#5c001a",
- "description": "17.233495705504463 - 0.25",
- "type": "color"
+ "type": "color",
+ "description": "17.233495705504463 - 0.25"
},
"275": {
"value": "#67001e",
- "description": "20.02069818761812 - 0.275",
- "type": "color"
+ "type": "color",
+ "description": "20.02069818761812 - 0.275"
},
"300": {
"value": "#730022",
- "description": "22.958053039032254 - 0.3",
- "type": "color"
+ "type": "color",
+ "description": "22.958053039032254 - 0.3"
},
"325": {
"value": "#800027",
- "description": "26.03130382315192 - 0.325",
- "type": "color"
+ "type": "color",
+ "description": "26.03130382315192 - 0.325"
},
"350": {
"value": "#8e002c",
- "description": "29.22535625976699 - 0.35",
- "type": "color"
+ "type": "color",
+ "description": "29.22535625976699 - 0.35"
},
"375": {
"value": "#9c0031",
- "description": "32.524371286309126 - 0.375",
- "type": "color"
+ "type": "color",
+ "description": "32.524371286309126 - 0.375"
},
"400": {
"value": "#ab0037",
- "description": "35.91186271093947 - 0.4",
- "type": "color"
+ "type": "color",
+ "description": "35.91186271093947 - 0.4"
},
"425": {
"value": "#bb003d",
- "description": "39.37079885540354 - 0.425",
- "type": "color"
+ "type": "color",
+ "description": "39.37079885540354 - 0.425"
},
"450": {
"value": "#cb0043",
- "description": "42.88370756099135 - 0.45",
- "type": "color"
+ "type": "color",
+ "description": "42.88370756099135 - 0.45"
},
"475": {
"value": "#db0049",
- "description": "46.43278391020581 - 0.475",
- "type": "color"
+ "type": "color",
+ "description": "46.43278391020581 - 0.475"
},
"500": {
"value": "#ec004f",
- "description": "49.99999999999999 - 0.5",
- "type": "color"
+ "type": "color",
+ "description": "49.99999999999999 - 0.5"
},
"525": {
"value": "#fd0056",
- "description": "53.56721608979418 - 0.525",
- "type": "color"
+ "type": "color",
+ "description": "53.56721608979418 - 0.525"
},
"550": {
"value": "#ff3865",
- "description": "57.11629243900867 - 0.55",
- "type": "color"
+ "type": "color",
+ "description": "57.11629243900867 - 0.55"
},
"575": {
"value": "#ff5474",
- "description": "60.62920114459644 - 0.575",
- "type": "color"
+ "type": "color",
+ "description": "60.62920114459644 - 0.575"
},
"600": {
"value": "#ff6981",
- "description": "64.08813728906053 - 0.6",
- "type": "color"
+ "type": "color",
+ "description": "64.08813728906053 - 0.6"
},
"625": {
"value": "#ff7a8e",
- "description": "67.47562871369087 - 0.625",
- "type": "color"
+ "type": "color",
+ "description": "67.47562871369087 - 0.625"
},
"650": {
"value": "#ff8a9a",
- "description": "70.774643740233 - 0.65",
- "type": "color"
+ "type": "color",
+ "description": "70.774643740233 - 0.65"
},
"675": {
"value": "#ff99a6",
- "description": "73.96869617684807 - 0.675",
- "type": "color"
+ "type": "color",
+ "description": "73.96869617684807 - 0.675"
},
"700": {
"value": "#ffa6b1",
- "description": "77.04194696096773 - 0.7",
- "type": "color"
+ "type": "color",
+ "description": "77.04194696096773 - 0.7"
},
"725": {
"value": "#ffb2bb",
- "description": "79.97930181238189 - 0.725",
- "type": "color"
+ "type": "color",
+ "description": "79.97930181238189 - 0.725"
},
"750": {
"value": "#ffbdc5",
- "description": "82.76650429449552 - 0.75",
- "type": "color"
+ "type": "color",
+ "description": "82.76650429449552 - 0.75"
},
"775": {
"value": "#ffc8ce",
- "description": "85.39022371000115 - 0.775",
- "type": "color"
+ "type": "color",
+ "description": "85.39022371000115 - 0.775"
},
"800": {
"value": "#ffd1d6",
- "description": "87.83813728906054 - 0.8",
- "type": "color"
+ "type": "color",
+ "description": "87.83813728906054 - 0.8"
},
"825": {
"value": "#ffdade",
- "description": "90.09900616327847 - 0.825",
- "type": "color"
+ "type": "color",
+ "description": "90.09900616327847 - 0.825"
},
"850": {
"value": "#ffe2e5",
- "description": "92.16274465706378 - 0.85",
- "type": "color"
+ "type": "color",
+ "description": "92.16274465706378 - 0.85"
},
"875": {
"value": "#ffe9eb",
- "description": "94.02048246917325 - 0.875",
- "type": "color"
+ "type": "color",
+ "description": "94.02048246917325 - 0.875"
},
"900": {
"value": "#ffeff0",
- "description": "95.66461936106825 - 0.9",
- "type": "color"
+ "type": "color",
+ "description": "95.66461936106825 - 0.9"
},
"925": {
"value": "#fff4f5",
- "description": "97.08887201491288 - 0.925",
- "type": "color"
+ "type": "color",
+ "description": "97.08887201491288 - 0.925"
},
"950": {
"value": "#fff9f9",
- "description": "98.28831277231767 - 0.95",
- "type": "color"
+ "type": "color",
+ "description": "98.28831277231767 - 0.95"
},
"975": {
"value": "#fffcfd",
- "description": "99.25940001499231 - 0.975",
- "type": "color"
+ "type": "color",
+ "description": "99.25940001499231 - 0.975"
},
"1000": {
"value": "#ffffff",
- "description": "100 - 1",
- "type": "color"
+ "type": "color",
+ "description": "100 - 1"
}
},
"Blue": {
"0": {
"value": "#000000",
- "description": "0 - 0",
- "type": "color"
+ "type": "color",
+ "description": "0 - 0"
},
"25": {
"value": "#00020f",
- "description": "0.7405999850077014 - 0.025",
- "type": "color"
+ "type": "color",
+ "description": "0.7405999850077014 - 0.025"
},
"50": {
"value": "#00051c",
- "description": "1.7116872276823336 - 0.05",
- "type": "color"
+ "type": "color",
+ "description": "1.7116872276823336 - 0.05"
},
"75": {
"value": "#000826",
- "description": "2.911127985087129 - 0.075",
- "type": "color"
+ "type": "color",
+ "description": "2.911127985087129 - 0.075"
},
"100": {
"value": "#000c30",
- "description": "4.335380638931743 - 0.1",
- "type": "color"
+ "type": "color",
+ "description": "4.335380638931743 - 0.1"
},
"125": {
"value": "#001038",
- "description": "5.979517530826747 - 0.125",
- "type": "color"
+ "type": "color",
+ "description": "5.979517530826747 - 0.125"
},
"150": {
"value": "#001441",
- "description": "7.837255342936205 - 0.15",
- "type": "color"
+ "type": "color",
+ "description": "7.837255342936205 - 0.15"
},
"175": {
"value": "#001749",
- "description": "9.90099383672154 - 0.175",
- "type": "color"
+ "type": "color",
+ "description": "9.90099383672154 - 0.175"
},
"200": {
"value": "#001b53",
- "description": "12.16186271093947 - 0.2",
- "type": "color"
+ "type": "color",
+ "description": "12.16186271093947 - 0.2"
},
"225": {
"value": "#00205e",
- "description": "14.609776289998841 - 0.225",
- "type": "color"
+ "type": "color",
+ "description": "14.609776289998841 - 0.225"
},
"250": {
"value": "#002569",
- "description": "17.233495705504463 - 0.25",
- "type": "color"
+ "type": "color",
+ "description": "17.233495705504463 - 0.25"
},
"275": {
"value": "#002a76",
- "description": "20.02069818761812 - 0.275",
- "type": "color"
+ "type": "color",
+ "description": "20.02069818761812 - 0.275"
},
"300": {
"value": "#003084",
- "description": "22.958053039032254 - 0.3",
- "type": "color"
+ "type": "color",
+ "description": "22.958053039032254 - 0.3"
},
"325": {
"value": "#003692",
- "description": "26.03130382315192 - 0.325",
- "type": "color"
+ "type": "color",
+ "description": "26.03130382315192 - 0.325"
},
"350": {
"value": "#003da1",
- "description": "29.22535625976699 - 0.35",
- "type": "color"
+ "type": "color",
+ "description": "29.22535625976699 - 0.35"
},
"375": {
"value": "#0044b2",
- "description": "32.524371286309126 - 0.375",
- "type": "color"
+ "type": "color",
+ "description": "32.524371286309126 - 0.375"
},
"400": {
"value": "#004bc2",
- "description": "35.91186271093947 - 0.4",
- "type": "color"
+ "type": "color",
+ "description": "35.91186271093947 - 0.4"
},
"425": {
"value": "#0053d4",
- "description": "39.37079885540354 - 0.425",
- "type": "color"
+ "type": "color",
+ "description": "39.37079885540354 - 0.425"
},
"450": {
"value": "#005ae6",
- "description": "42.88370756099135 - 0.45",
- "type": "color"
+ "type": "color",
+ "description": "42.88370756099135 - 0.45"
},
"475": {
"value": "#0062f9",
- "description": "46.43278391020581 - 0.475",
- "type": "color"
+ "type": "color",
+ "description": "46.43278391020581 - 0.475"
},
"500": {
"value": "#2a6cff",
- "description": "49.99999999999999 - 0.5",
- "type": "color"
+ "type": "color",
+ "description": "49.99999999999999 - 0.5"
},
"525": {
"value": "#4676ff",
- "description": "53.56721608979418 - 0.525",
- "type": "color"
+ "type": "color",
+ "description": "53.56721608979418 - 0.525"
},
"550": {
"value": "#5a81ff",
- "description": "57.11629243900867 - 0.55",
- "type": "color"
+ "type": "color",
+ "description": "57.11629243900867 - 0.55"
},
"575": {
"value": "#6b8bff",
- "description": "60.62920114459644 - 0.575",
- "type": "color"
+ "type": "color",
+ "description": "60.62920114459644 - 0.575"
},
"600": {
"value": "#7a95ff",
- "description": "64.08813728906053 - 0.6",
- "type": "color"
+ "type": "color",
+ "description": "64.08813728906053 - 0.6"
},
"625": {
"value": "#899fff",
- "description": "67.47562871369087 - 0.625",
- "type": "color"
+ "type": "color",
+ "description": "67.47562871369087 - 0.625"
},
"650": {
"value": "#96a8ff",
- "description": "70.774643740233 - 0.65",
- "type": "color"
+ "type": "color",
+ "description": "70.774643740233 - 0.65"
},
"675": {
"value": "#a2b2ff",
- "description": "73.96869617684807 - 0.675",
- "type": "color"
+ "type": "color",
+ "description": "73.96869617684807 - 0.675"
},
"700": {
"value": "#adbbff",
- "description": "77.04194696096773 - 0.7",
- "type": "color"
+ "type": "color",
+ "description": "77.04194696096773 - 0.7"
},
"725": {
"value": "#b8c3ff",
- "description": "79.97930181238189 - 0.725",
- "type": "color"
+ "type": "color",
+ "description": "79.97930181238189 - 0.725"
},
"750": {
"value": "#c2ccff",
- "description": "82.76650429449552 - 0.75",
- "type": "color"
+ "type": "color",
+ "description": "82.76650429449552 - 0.75"
},
"775": {
"value": "#ccd3ff",
- "description": "85.39022371000115 - 0.775",
- "type": "color"
+ "type": "color",
+ "description": "85.39022371000115 - 0.775"
},
"800": {
"value": "#d4dbff",
- "description": "87.83813728906054 - 0.8",
- "type": "color"
+ "type": "color",
+ "description": "87.83813728906054 - 0.8"
},
"825": {
"value": "#dce1ff",
- "description": "90.09900616327847 - 0.825",
- "type": "color"
+ "type": "color",
+ "description": "90.09900616327847 - 0.825"
},
"850": {
"value": "#e4e7ff",
- "description": "92.16274465706378 - 0.85",
- "type": "color"
+ "type": "color",
+ "description": "92.16274465706378 - 0.85"
},
"875": {
"value": "#eaedff",
- "description": "94.02048246917325 - 0.875",
- "type": "color"
+ "type": "color",
+ "description": "94.02048246917325 - 0.875"
},
"900": {
"value": "#f0f2ff",
- "description": "95.66461936106825 - 0.9",
- "type": "color"
+ "type": "color",
+ "description": "95.66461936106825 - 0.9"
},
"925": {
"value": "#f5f6ff",
- "description": "97.08887201491288 - 0.925",
- "type": "color"
+ "type": "color",
+ "description": "97.08887201491288 - 0.925"
},
"950": {
"value": "#f9faff",
- "description": "98.28831277231767 - 0.95",
- "type": "color"
+ "type": "color",
+ "description": "98.28831277231767 - 0.95"
},
"975": {
"value": "#fcfdff",
- "description": "99.25940001499231 - 0.975",
- "type": "color"
+ "type": "color",
+ "description": "99.25940001499231 - 0.975"
},
"1000": {
"value": "#ffffff",
- "description": "100 - 1",
- "type": "color"
+ "type": "color",
+ "description": "100 - 1"
}
},
"Purple": {
"0": {
"value": "#000000",
- "description": "0 - 0",
- "type": "color"
+ "type": "color",
+ "description": "0 - 0"
},
"25": {
"value": "#060011",
- "description": "0.7405999850077014 - 0.025",
- "type": "color"
+ "type": "color",
+ "description": "0.7405999850077014 - 0.025"
},
"50": {
"value": "#0e001e",
- "description": "1.7116872276823336 - 0.05",
- "type": "color"
+ "type": "color",
+ "description": "1.7116872276823336 - 0.05"
},
"75": {
"value": "#150029",
- "description": "2.911127985087129 - 0.075",
- "type": "color"
+ "type": "color",
+ "description": "2.911127985087129 - 0.075"
},
"100": {
"value": "#1b0033",
- "description": "4.335380638931743 - 0.1",
- "type": "color"
+ "type": "color",
+ "description": "4.335380638931743 - 0.1"
},
"125": {
"value": "#21003d",
- "description": "5.979517530826747 - 0.125",
- "type": "color"
+ "type": "color",
+ "description": "5.979517530826747 - 0.125"
},
"150": {
"value": "#270046",
- "description": "7.837255342936205 - 0.15",
- "type": "color"
+ "type": "color",
+ "description": "7.837255342936205 - 0.15"
},
"175": {
"value": "#2d004f",
- "description": "9.90099383672154 - 0.175",
- "type": "color"
+ "type": "color",
+ "description": "9.90099383672154 - 0.175"
},
"200": {
"value": "#330059",
- "description": "12.16186271093947 - 0.2",
- "type": "color"
+ "type": "color",
+ "description": "12.16186271093947 - 0.2"
},
"225": {
"value": "#3a0065",
- "description": "14.609776289998841 - 0.225",
- "type": "color"
+ "type": "color",
+ "description": "14.609776289998841 - 0.225"
},
"250": {
"value": "#420071",
- "description": "17.233495705504463 - 0.25",
- "type": "color"
+ "type": "color",
+ "description": "17.233495705504463 - 0.25"
},
"275": {
"value": "#4b007e",
- "description": "20.02069818761812 - 0.275",
- "type": "color"
+ "type": "color",
+ "description": "20.02069818761812 - 0.275"
},
"300": {
"value": "#54008d",
- "description": "22.958053039032254 - 0.3",
- "type": "color"
+ "type": "color",
+ "description": "22.958053039032254 - 0.3"
},
"325": {
"value": "#5d009c",
- "description": "26.03130382315192 - 0.325",
- "type": "color"
+ "type": "color",
+ "description": "26.03130382315192 - 0.325"
},
"350": {
"value": "#6800ad",
- "description": "29.22535625976699 - 0.35",
- "type": "color"
+ "type": "color",
+ "description": "29.22535625976699 - 0.35"
},
"375": {
"value": "#7200be",
- "description": "32.524371286309126 - 0.375",
- "type": "color"
+ "type": "color",
+ "description": "32.524371286309126 - 0.375"
},
"400": {
"value": "#7e00d0",
- "description": "35.91186271093947 - 0.4",
- "type": "color"
+ "type": "color",
+ "description": "35.91186271093947 - 0.4"
},
"425": {
"value": "#8a00e2",
- "description": "39.37079885540354 - 0.425",
- "type": "color"
+ "type": "color",
+ "description": "39.37079885540354 - 0.425"
},
"450": {
"value": "#9600f6",
- "description": "42.88370756099135 - 0.45",
- "type": "color"
+ "type": "color",
+ "description": "42.88370756099135 - 0.45"
},
"475": {
"value": "#9e22ff",
- "description": "46.43278391020581 - 0.475",
- "type": "color"
+ "type": "color",
+ "description": "46.43278391020581 - 0.475"
},
"500": {
"value": "#a23eff",
- "description": "49.99999999999999 - 0.5",
- "type": "color"
+ "type": "color",
+ "description": "49.99999999999999 - 0.5"
},
"525": {
"value": "#a752ff",
- "description": "53.56721608979418 - 0.525",
- "type": "color"
+ "type": "color",
+ "description": "53.56721608979418 - 0.525"
},
"550": {
"value": "#ac63ff",
- "description": "57.11629243900867 - 0.55",
- "type": "color"
+ "type": "color",
+ "description": "57.11629243900867 - 0.55"
},
"575": {
"value": "#b273ff",
- "description": "60.62920114459644 - 0.575",
- "type": "color"
+ "type": "color",
+ "description": "60.62920114459644 - 0.575"
},
"600": {
"value": "#b780ff",
- "description": "64.08813728906053 - 0.6",
- "type": "color"
+ "type": "color",
+ "description": "64.08813728906053 - 0.6"
},
"625": {
"value": "#bd8eff",
- "description": "67.47562871369087 - 0.625",
- "type": "color"
+ "type": "color",
+ "description": "67.47562871369087 - 0.625"
},
"650": {
"value": "#c39aff",
- "description": "70.774643740233 - 0.65",
- "type": "color"
+ "type": "color",
+ "description": "70.774643740233 - 0.65"
},
"675": {
"value": "#c9a5ff",
- "description": "73.96869617684807 - 0.675",
- "type": "color"
+ "type": "color",
+ "description": "73.96869617684807 - 0.675"
},
"700": {
"value": "#cfb0ff",
- "description": "77.04194696096773 - 0.7",
- "type": "color"
+ "type": "color",
+ "description": "77.04194696096773 - 0.7"
},
"725": {
"value": "#d4bbff",
- "description": "79.97930181238189 - 0.725",
- "type": "color"
+ "type": "color",
+ "description": "79.97930181238189 - 0.725"
},
"750": {
"value": "#dac4ff",
- "description": "82.76650429449552 - 0.75",
- "type": "color"
+ "type": "color",
+ "description": "82.76650429449552 - 0.75"
},
"775": {
"value": "#dfcdff",
- "description": "85.39022371000115 - 0.775",
- "type": "color"
+ "type": "color",
+ "description": "85.39022371000115 - 0.775"
},
"800": {
"value": "#e4d6ff",
- "description": "87.83813728906054 - 0.8",
- "type": "color"
+ "type": "color",
+ "description": "87.83813728906054 - 0.8"
},
"825": {
"value": "#e9ddff",
- "description": "90.09900616327847 - 0.825",
- "type": "color"
+ "type": "color",
+ "description": "90.09900616327847 - 0.825"
},
"850": {
"value": "#eee4ff",
- "description": "92.16274465706378 - 0.85",
- "type": "color"
+ "type": "color",
+ "description": "92.16274465706378 - 0.85"
},
"875": {
"value": "#f2ebff",
- "description": "94.02048246917325 - 0.875",
- "type": "color"
+ "type": "color",
+ "description": "94.02048246917325 - 0.875"
},
"900": {
"value": "#f5f0ff",
- "description": "95.66461936106825 - 0.9",
- "type": "color"
+ "type": "color",
+ "description": "95.66461936106825 - 0.9"
},
"925": {
"value": "#f8f5ff",
- "description": "97.08887201491288 - 0.925",
- "type": "color"
+ "type": "color",
+ "description": "97.08887201491288 - 0.925"
},
"950": {
"value": "#fbf9ff",
- "description": "98.28831277231767 - 0.95",
- "type": "color"
+ "type": "color",
+ "description": "98.28831277231767 - 0.95"
},
"975": {
"value": "#fdfcff",
- "description": "99.25940001499231 - 0.975",
- "type": "color"
+ "type": "color",
+ "description": "99.25940001499231 - 0.975"
},
"1000": {
"value": "#ffffff",
- "description": "100 - 1",
- "type": "color"
+ "type": "color",
+ "description": "100 - 1"
}
},
"OpaqueGrey": {
"Default": {
"value": "#7c7c7c20",
- "description": "An opaque grey that picks up some, but not all, of the colors behind it",
+ "type": "color",
+ "description": "An opaque grey that picks up some, but not all, of the colors behind it"
+ }
+ },
+ "Gray": {
+ "25": {
+ "value": "#fcfcfd",
+ "type": "color"
+ },
+ "50": {
+ "value": "#f9fafb",
+ "type": "color"
+ },
+ "100": {
+ "value": "#f2f4f7",
+ "type": "color"
+ },
+ "200": {
+ "value": "#eaecf0",
+ "type": "color"
+ },
+ "300": {
+ "value": "#d0d5dd",
+ "type": "color"
+ },
+ "400": {
+ "value": "#98a2b3",
+ "type": "color"
+ },
+ "500": {
+ "value": "#667085",
+ "type": "color"
+ },
+ "600": {
+ "value": "#475467",
+ "type": "color"
+ },
+ "700": {
+ "value": "#344054",
+ "type": "color"
+ },
+ "800": {
+ "value": "#1d2939",
+ "type": "color"
+ },
+ "900": {
+ "value": "#101828",
+ "type": "color"
+ }
+ },
+ "White": {
+ "value": "#ffffff",
+ "type": "color"
+ },
+ "Black": {
+ "value": "#000000",
+ "type": "color"
+ },
+ "Primary": {
+ "25": {
+ "value": "#f6fcfe",
+ "type": "color"
+ },
+ "50": {
+ "value": "#dceffc",
+ "type": "color"
+ },
+ "100": {
+ "value": "#c1dcf9",
+ "type": "color"
+ },
+ "200": {
+ "value": "#a7c3f6",
+ "type": "color"
+ },
+ "300": {
+ "value": "#8da4f4",
+ "type": "color"
+ },
+ "400": {
+ "value": "#6178f4",
+ "type": "color"
+ },
+ "500": {
+ "value": "#4c4ff1",
+ "type": "color"
+ },
+ "600": {
+ "value": "#4e38ed",
+ "type": "color"
+ },
+ "700": {
+ "value": "#5724e8",
+ "type": "color"
+ },
+ "800": {
+ "value": "#441bb6",
+ "type": "color"
+ },
+ "900": {
+ "value": "#301383",
+ "type": "color"
+ },
+ "Default": {
+ "value": "#4e38ed",
+ "type": "color"
+ },
+ "Hover": {
+ "value": "#c1dcf9",
+ "type": "color"
+ }
+ },
+ "Warning": {
+ "25": {
+ "value": "#fffcf5",
+ "type": "color"
+ },
+ "50": {
+ "value": "#fffaeb",
+ "type": "color"
+ },
+ "100": {
+ "value": "#fef0c7",
+ "type": "color"
+ },
+ "200": {
+ "value": "#fedf89",
+ "type": "color"
+ },
+ "300": {
+ "value": "#fec84b",
+ "type": "color"
+ },
+ "400": {
+ "value": "#fdb022",
+ "type": "color"
+ },
+ "500": {
+ "value": "#f79009",
+ "type": "color"
+ },
+ "600": {
+ "value": "#dc6803",
+ "type": "color"
+ },
+ "700": {
+ "value": "#b54708",
+ "type": "color"
+ }
+ },
+ "Error": {
+ "25": {
+ "value": "#fffbfa",
+ "type": "color"
+ },
+ "50": {
+ "value": "#fef3f2",
+ "type": "color"
+ },
+ "100": {
+ "value": "#fee4ef",
+ "type": "color"
+ },
+ "200": {
+ "value": "#fecdca",
+ "type": "color"
+ },
+ "300": {
+ "value": "#fda29b",
+ "type": "color"
+ },
+ "400": {
+ "value": "#f97066",
+ "type": "color"
+ },
+ "500": {
+ "value": "#f04438",
+ "type": "color"
+ },
+ "600": {
+ "value": "#d92d20",
+ "type": "color"
+ },
+ "700": {
+ "value": "#b42318",
+ "type": "color"
+ }
+ },
+ "Success": {
+ "25": {
+ "value": "#f6fef9",
+ "type": "color"
+ },
+ "50": {
+ "value": "#ecfdf3",
+ "type": "color"
+ },
+ "100": {
+ "value": "#d1fadf",
+ "type": "color"
+ },
+ "200": {
+ "value": "#a6f4c5",
+ "type": "color"
+ },
+ "300": {
+ "value": "#6ce9a6",
+ "type": "color"
+ },
+ "400": {
+ "value": "#32d583",
+ "type": "color"
+ },
+ "500": {
+ "value": "#12b76a",
+ "type": "color"
+ },
+ "600": {
+ "value": "#039855",
+ "type": "color"
+ },
+ "700": {
+ "value": "#027a48",
+ "type": "color"
+ }
+ },
+ "Pink": {
+ "700": {
+ "value": "#c11574",
+ "type": "color"
+ }
+ },
+ "Text": {
+ "Primary": {
+ "value": "#101828",
+ "type": "color"
+ },
+ "Secondary": {
+ "value": "#667085",
"type": "color"
}
}
@@ -1175,8 +1418,8 @@
"lineHeight": "12px",
"letterSpacing": "-0.12px"
},
- "description": "",
- "type": "typography"
+ "type": "typography",
+ "description": ""
},
"200": {
"value": {
@@ -1186,8 +1429,8 @@
"lineHeight": "16px",
"letterSpacing": "-0.15px"
},
- "description": "",
- "type": "typography"
+ "type": "typography",
+ "description": ""
}
},
"Shadow": {
@@ -1199,8 +1442,8 @@
"spread": "0px",
"color": "rgba(0, 0, 0, .2)"
},
- "description": "",
- "type": "boxShadow"
+ "type": "boxShadow",
+ "description": ""
},
"200": {
"value": {
@@ -1210,8 +1453,8 @@
"spread": "0px",
"color": "rgba(0, 0, 0, .2)"
},
- "description": "",
- "type": "boxShadow"
+ "type": "boxShadow",
+ "description": ""
},
"300": {
"value": {
@@ -1221,8 +1464,8 @@
"spread": "0px",
"color": "rgba(0, 0, 0, .2)"
},
- "description": "",
- "type": "boxShadow"
+ "type": "boxShadow",
+ "description": ""
},
"400": {
"value": {
@@ -1232,8 +1475,8 @@
"spread": "0px",
"color": "rgba(0, 0, 0, .2)"
},
- "description": "",
- "type": "boxShadow"
+ "type": "boxShadow",
+ "description": ""
},
"500": {
"value": {
@@ -1243,8 +1486,8 @@
"spread": "0px",
"color": "rgba(0, 0, 0, .2)"
},
- "description": "",
- "type": "boxShadow"
+ "type": "boxShadow",
+ "description": ""
},
"600": {
"value": {
@@ -1254,8 +1497,8 @@
"spread": "0px",
"color": "rgba(0, 0, 0, .2)"
},
- "description": "",
- "type": "boxShadow"
+ "type": "boxShadow",
+ "description": ""
},
"700": {
"value": {
@@ -1265,8 +1508,8 @@
"spread": "0px",
"color": "rgba(0, 0, 0, .2)"
},
- "description": "",
- "type": "boxShadow"
+ "type": "boxShadow",
+ "description": ""
},
"800": {
"value": {
@@ -1276,8 +1519,8 @@
"spread": "0px",
"color": "rgba(0, 0, 0, .2)"
},
- "description": "",
- "type": "boxShadow"
+ "type": "boxShadow",
+ "description": ""
},
"900": {
"value": {
@@ -1287,8 +1530,8 @@
"spread": "0px",
"color": "rgba(0, 0, 0, .2)"
},
- "description": "",
- "type": "boxShadow"
+ "type": "boxShadow",
+ "description": ""
},
"1000": {
"value": {
@@ -1298,98 +1541,102 @@
"spread": "0px",
"color": "rgba(0, 0, 0, .2)"
},
- "description": "",
- "type": "boxShadow"
+ "type": "boxShadow",
+ "description": ""
}
},
"Radius": {
"0": {
"value": "0",
- "description": "",
- "type": "dimension"
+ "type": "dimension",
+ "description": ""
},
"100": {
"value": "2",
- "description": "",
- "type": "dimension"
+ "type": "dimension",
+ "description": ""
},
"200": {
"value": "6",
- "description": "",
- "type": "dimension"
+ "type": "dimension",
+ "description": ""
},
"300": {
"value": "14",
- "description": "",
- "type": "dimension"
+ "type": "dimension",
+ "description": ""
},
"400": {
"value": "30",
- "description": "",
- "type": "dimension"
+ "type": "dimension",
+ "description": ""
},
"500": {
"value": "62",
- "description": "",
- "type": "dimension"
+ "type": "dimension",
+ "description": ""
}
},
"Spacing": {
"0": {
"value": "0",
- "description": "",
- "type": "dimension"
+ "type": "dimension",
+ "description": ""
},
"100": {
"value": "2",
- "description": "",
- "type": "dimension"
+ "type": "dimension",
+ "description": ""
},
"200": {
"value": "4",
- "description": "",
- "type": "dimension"
+ "type": "dimension",
+ "description": ""
},
"300": {
"value": "8",
- "description": "",
- "type": "dimension"
+ "type": "dimension",
+ "description": ""
},
"400": {
"value": "12",
- "description": "",
- "type": "dimension"
+ "type": "dimension",
+ "description": ""
},
"500": {
"value": "16",
- "description": "",
- "type": "dimension"
+ "type": "dimension",
+ "description": ""
},
"600": {
"value": "32",
- "description": "",
- "type": "dimension"
+ "type": "dimension",
+ "description": ""
},
"700": {
"value": "48",
- "description": "",
- "type": "dimension"
+ "type": "dimension",
+ "description": ""
},
"800": {
"value": "64",
- "description": "",
- "type": "dimension"
+ "type": "dimension",
+ "description": ""
},
"900": {
"value": "96",
- "description": "",
- "type": "dimension"
+ "type": "dimension",
+ "description": ""
},
"1000": {
"value": "128",
- "description": "",
- "type": "dimension"
+ "type": "dimension",
+ "description": ""
}
}
+ },
+ "$themes": [],
+ "$metadata": {
+ "tokenSetOrder": ["Alias", "Global"]
}
}
diff --git a/crates/re_ui/data/icons/rerun_menu.png b/crates/re_ui/data/icons/rerun_menu.png
index e0326623c56e5cf96b1b4b963e162f224638b46e..b74059bf3dfafeffb0b13f66ccc3bfbbf2f8a74a 100644
GIT binary patch
literal 11051
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
&LlWKe6wS2bXPP~
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
literal 12227
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
diff --git a/crates/re_ui/data/logo_light_mode.png b/crates/re_ui/data/logo_light_mode.png
index 4675fec247da1f3ab73d8b0886da2ecc18b333fb..1b951089cf2a6bb35d753d2bba96ef226cf01134 100644
GIT binary patch
literal 4402
zcmV-25zX$2P)pF8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H15Wh)8
zK~#90?VWpcT-9}lzkOz8*|PC7){KP#TN=rL3oEGuEDT8vX#$j&aT$$`F$)q*C?N#e
z6xxQh>ZF8{0*l3?1QHTjjIl<;!-a%bmK_I76CgA|u))?yKmchZWBit_$DG|iWD_CF
z8d-DCy;p|sFYC^o-`;a)`_8%N?7ffhDI__wZ4A4+XBd%6kSc*n3snXgr|5WKBuE)O
z|Ly>G0Na3VBDzD7Z9pTcZ;6%lNPa_I9?
z9-G+#yau|`!m1tY_}x?4>JE=>c+No^0P`!Gzo^FiE$BRungCqbh4O+L{gvjmF4I);
zrvQ8?$UzkVsmhHtnC{C!&IgVN+Mixnh1IA&pd%xXWY(7N2-=~&4Eq2`qLE0V^-P6t
z0beEjpJ^xPBPMTdUH*3L^`M;z`^DNX$(d_Mn2w2;qVkUj(}MPA2q^G4R)3gon(}f`
zP7J#MSb~~$iM9&_{XS3`v_IaUPzt8a|G;J4*r6#%t~*3$&N1^A1geQ|&aER(!^
zclq0~R=YdA}&<1?@|K>_+73bVKZ3R|Y~E0IBNcqfqk*a8%H~
zgaXw^t(Ja0(=>6b*V4vo!D5+T-EuK%Ug5JZ|IdibGt%|qg6XZtdMzEI08pu|Zn;@i
z?gvH%?M>(qona&TLTyd!UwbO+rPxqOq7jp5y%+dK(7p@fds(1MB5!G
z^MkN`5Mn?cNG4kTYAA2^eGHJQZv7^z_xNr1Q@~b>&dy|~tUHi5`5FMpnwH~@mFIv`
zKkXg>-M|OH7GNhzI{=1pD5F)GAi|U&9W21Q_I7*R6U`OvgMCBPr8m7vCR!#ND-RQ%
zFTYbnUqV@F)x4_F?l&ilsc8DiE7CR4n-(TEjqSFbGsKu96?-CTPDONvUrra`=+R~7
zP7Yu`#iu)fN^PR`8R<#c3Xo?}!mQaI5I&Ek*?
z)7jXvL7nN^6$r)eegh)6+I&f!iv^Y5q$)SoXrz0ws9X+=acOG+c3>m3(oK^$6gts)
z04z+rKee0aT41beTmA5c3O8y)tlp30ir$=eUol7B~8jL(B^MHba(V-F5=j#GzHRk`^H%U#;&
ziy{w?C^1((_~zsmKkXKxwz~PtqViLpi&S#fjyQ6lpFL+2LCKkGM<5h6Pkn%NAY5Ia
zjU~hOQ2we<_KKpm
zy7h8Vy#pxm!CW`W7t)RKH~M?g$sORF85<8#_-7Z|{jkoO=$D4emk&_i5W7b#X8_xM
zFc(F*et$1I34l>Hf1NtVU(Oib|cV6r6gYdewBhGy2Pe*KaZp#swZ0xsKJ)NG?a+gHJRDyBUS02Pocz18fCYz8^a&+;kP
z)Hh9e5^;UqD9IahP2Yo_20(41?Q6JB=N2waXJd^{Z3IBNA$G68fRi@GBEp5qnQKS%
zKIUlv2zIfTdi@xyG0y@ZIkRmHh|3hO?5M6?
z*E-Y>oX6Ks-YzN^)6+Y^2^Lw@`)|(zKsxQ&I4tN8(X0RKo$0$>>4$~7#@PR&^53rX
z1wCu-w9OwcPI(sqR?qiJt1l`%R@X4)m#*}~h825l&tTUHBTJ(lAAeV#1VD0T+ZaU7
z@ItE}tYE+ANIR5dvQsvqdaFAN`tdlxlK_bB=42e*{uOyN-B9tS3+*stb;MotUUt*zd8EO<2ru=-_BbowCh+e~A{
zD=xH$18Smo15OfJB5F?o4+7wfL_;Ye#})6=z9_QPh3;@+&mz}zF0>U+0f-h;Rs^8J
zbd-_axb+D-JEL9o4s;8WocZ2FvnyJqM&clyqWZx$+1?OD?_UvpKvhohT36u&07)fs
z&L$m-