Commit graph

55 commits

Author SHA1 Message Date
Daniel McNab 6d57093cc2
Add GPU profiling (#304)
* Add GPU profiling

* Fix conditional compilation for `headless`

* Add full profiling

* Productionise

* Fix MacOS trace file

* Try to make it easier to tell what's important

* Resolve CI issues
2023-06-01 16:10:27 +01:00
Raph Levien 4fcc348940 Change to caniuse for webgpu 2023-06-01 06:59:53 -07:00
Raph Levien f60cb0c31b Merge branch 'main' into failure 2023-05-31 17:37:43 -07:00
Raph Levien 3774928b24 Enforce clippy lints
This turns on clippy checking and also fixes all lints in the code.

Many lints are obvious improvements. Only a small number are slightly annoying, so I think overall worth having a vanilla default config.
2023-05-18 16:13:32 -07:00
Raph Levien 8eb02ce330 Suppress one more warning in wasm case 2023-05-18 15:45:44 -07:00
Raph Levien f3587b1240 Merge branch 'main' into failure 2023-05-18 11:14:22 -07:00
Daniel McNab abfe9fbb56
Add a stats display for scene complexity (#322) 2023-05-18 18:50:57 +01:00
Raph Levien 1b3938e54f Clean up casting
Get rid of unneeded clone and make syntax nicer.
2023-04-29 08:22:49 -07:00
Raph Levien e7c7f10524 Cargo fmt 2023-04-29 08:19:28 -07:00
Raph Levien 9c7e084239 Focus canvas on setup 2023-04-29 08:19:01 -07:00
Raph Levien 6fc1ed8e13 Cargo fmt 2023-04-29 08:16:28 -07:00
Raph Levien f4a2fc616b Mmark example
This commit ports the mmark example from the mmark branch, and also makes the complexity adjustable through up/down arrow keys.
2023-04-29 07:55:31 -07:00
Raph Levien 8a083d9473 Nicer HTML
It's easier with innerHTML rather than constructing DOM by hand.
2023-04-28 14:33:24 -07:00
Raph Levien e399f4792d Display error message when WebGPU not enabled
Detect the case where creating the WebGPU surface fails, and insert a message explaning the failure into the DOM, rather than panicking.
2023-04-28 13:55:24 -07:00
Arman Uguray 4642fa024f [with_winit] Set the canvas size to thw winit Window's inner size
This prevents the scaling caused by the hardcoded canvas dimensions on
high dpi platforms.
2023-04-23 12:02:39 -07:00
Arman Uguray 5543ad01fe [examples] Use instant crate's time::Instant
crates.io/crates/instant provides a std::time::Instant implementation
that works on both WASM and non-wasm builds.
2023-04-23 12:02:39 -07:00
Arman Uguray 703d22f4b7 [frame_stats] Use match statement for color coding graph 2023-03-21 15:29:16 -07:00
Arman Uguray 6f3051837f [frame_stats] Adapt the graph scale based on the current mean frame time
This allows the graph to display at a reasonable scale in the face of
fluctuations and a max recorded sample that is much larger than the
current average.
2023-03-21 15:16:45 -07:00
Arman Uguray e6f4f6de57 [frame_stats] Draw thresholds for 16.66ms, 33.33ms, and 8.33 timings
Also added color coding for the bar graph based on these thresholds.
2023-03-21 11:38:38 -07:00
Arman Uguray 5ba2826460 [frame_stats] Scale the frame time graph linearly
The sqrt scale doesn't add much value any more since the max frame time
can be reset with a keypress.
2023-03-21 11:34:33 -07:00
Arman Uguray 8bd1bdfaa8 [frame_stats] Use wgpu::PresentMode::AutoVsync/AutoNoVsync for VSync mode
The Auto* modes should have wider compatibility as they implement
fallback behavior based on what the platform supports. This also means
that on web "vsync off" will likely be incorrect.
2023-03-21 11:34:26 -07:00
Arman Uguray 02a222f435 [frame_stats] Reduce stats time delta between elapsed() and next frame start time
This does not account for the time spent in processing
`Stats::add_sample` but it should be very close.
2023-03-21 11:34:20 -07:00
Arman Uguray a1c0df1058 [frame_stats] Track frame time more tightly
We now track the frame time from snapshot to snapshot corresponding to
the exact presentation time.
2023-03-21 11:34:14 -07:00
Arman Uguray 1250cdcf86 [frame_stats] Add a VSync toggle key; show the current VSync state in stats UI 2023-03-21 11:34:08 -07:00
Arman Uguray 306aeab6df [frame_stats] Key binding to clear min/max frame time; address review comments 2023-03-21 11:34:01 -07:00
Arman Uguray 1ac4a4f1a8 [frame_stats] Draw a live plot of frame time samples
Also abandoned the FrameScope idea and revised the `Stats::add_sample`
to accept a struct to accept a variety of future measurements.
2023-03-21 11:33:50 -07:00
Arman Uguray bacaeebcb6 [frame_stats] Show viewport resolution on the stats layer
Also set the stats layer toggle to be on by default until we add some UI
to toggle it on mobile.
2023-03-21 11:33:43 -07:00
Arman Uguray d7bacbcc3f [frame_stats] Build stats layer layout based on viewport dimensions 2023-03-21 11:33:35 -07:00
Arman Uguray 89fb1b89da [frame_stats] Add frame statistics UI to with_winit example
Added a module for frame time statistics and UI layer that displays
the average, minimum, and maximum frame time alongside FPS. The UI
can be toggled by pressing the `S` key.
2023-03-21 11:33:22 -07:00
Daniel McNab fd6bfe91d6
Fix handling of interactivity (#295)
* Fix handling of interactivity

* Sort out silly mixup
2023-03-16 13:38:43 +00:00
Florian Köhler c503973739
Add space key for transform reset (#294)
Co-authored-by: Florian Köhler <power-unsealed>
2023-03-15 15:18:16 +00:00
Chad Brokaw 165b3a083b Let's add images 2023-03-09 17:18:03 -05:00
Chad Brokaw 69dd838d09 post rebase fixups 2023-03-06 11:41:12 -05:00
Daniel McNab 5156447346
Make the with_winit example run on android (#273) 2023-03-05 11:33:30 +00:00
Arman Uguray 12d5dcd34f Use clap to parse base-color option; remove unused width/height parameters 2023-03-03 14:28:07 -08:00
Arman Uguray d72ad14059 Add a test scene that animates the base color
The test scenes can now supply their own optional base (background)
color. In the with_winit example, we also allow the user to provide a
base color as a CLI option. The precedence is as follows:

   1. Use the color from the CLI options, if any.
   2. Otherwise use the scene provided base color, if any.
   3. Otherwise default to black.
2023-03-03 11:30:12 -08:00
Arman Uguray 3bbf108df5 Renamed clear_color to base_color; addressed review comments 2023-03-02 14:29:44 -08:00
Arman Uguray 05fa8c7c39 RenderParams struct for render-time options
The texture and surface render API now takes render-time parameters
(such as clear color, target width/height) as a RenderParams struct.

The examples have been updated to demonstrate this. The with_winit
example now accepts a clear color as a command line option.
2023-03-02 11:25:19 -08:00
Daniel McNab db243aed4e Add a keyboard key to rotate the scene 2023-02-22 12:35:28 +00:00
Daniel McNab 020a7f5c01
Split the examples into frontends with a shared scene repository (#262) 2023-02-03 10:22:39 +00:00
Daniel McNab 9721d4a6ac
Some WASM changes - including a run_wasm alias (#251) 2023-01-31 16:12:46 +00:00
Raph Levien db018da537 Make wasm port work again
This cheats somewhat, using the non-robust version of the pipeline for
wasm, and blocking on native.
2023-01-26 17:41:30 -08:00
Raph Levien 264fd3ec12 Merge branch 'main' into async 2023-01-26 17:27:53 -08:00
Raph Levien d6cbae2a3f Fixes to get example running in wasm
A number of things were wrong:

* The args were missing to `run`
* The robust memory changes introduced uniformity errors
* `clear_buffer` is a todo for wgpu on wasm
* Some more time calls crept in
* Initializing both env_logger and console_logger fails

In addition, we conditionally opt the shaders into
`workgroupUniformLoad`, as that's available on wasm but not yet native.

Some of the things (args, uniformity errors) are important fixes. Other
things (clear_buffer, wUL being optional) are workarounds for wgpu
limitations and have TODO items to be removed when wgpu catches up.
2023-01-26 12:19:12 -08:00
Raph Levien 418256ffd1 Start async wiring
Make async versions of the main library entry points, and invoke those from the with_winit example.

Right now this just prints the contents of the bump buffer before just running the fine dispatch, but it could apply conditional logic.
2023-01-24 21:09:00 -08:00
Joe Neeman 338bd30870 Allow selecting GPU from env 2023-01-21 14:30:40 -06:00
Chad Brokaw 516fd6c981 Update for peniko changes
This applies updates for the gradient API in peniko and pins the git dependency so prevent further breakage. Also removes Cargo.lock.
2023-01-17 12:31:57 -05:00
Daniel McNab 44058a8578
Improve the svg parser (#247)
* Improve the svg parser

* Handle `opacity`

* Double the segments buffer

* Rotate the multiplication

This matches firefox's output, although it is contrary to my use
of 3d transformation matrices

* Double ptcl size

Seems to be required to show entire scene at 4k
2023-01-16 18:22:35 +00:00
Daniel McNab ed60031185
Add hot reloading of shaders to the winit example (#252) 2023-01-16 17:24:48 +00:00
Daniel McNab eec111c633
Support click and drag for svgs, as well as scene fragment caching (#244)
* Support caching the image, and click and drag motion

* Remove debug print

* Clean up examples to have command line parsing

* Address review comments
2023-01-13 19:30:08 +00:00