Andrea Frigido
d0f8005169
Update license field following SPDX 2.1 license expression standard ( #540 )
2024-02-06 16:59:01 +00:00
floppyhammer
6f66a7f0e9
Don't use hardcoded bin workgroup size
2022-03-29 11:14:31 +08:00
5225225
1df5537940
Fix links in docs, fix/ignore some doctests
2022-02-08 20:49:40 +00:00
Sebastian
9909e44f23
fix #428
...
This avoids an edgecase where presumably some floating point rounding error results in predicting a `to_tile_coords` that isn't actually stepped on, causing the loop to loop forever.
2021-10-24 22:58:11 +03:00
Patrick Walton
441051a8ac
Remove the cap on the number of iterations when tiling.
...
This could trigger spuriously for very long lines outside the view box. It
still indicates potential performance problem, but we shouldn't crash at least.
Closes #416 .
2020-07-28 12:56:40 -07:00
Patrick Walton
41ad372253
Clip line segments before tiling them.
...
This reduces pathological behavior from very large off-screen segments.
Part of #416 .
2020-07-28 12:56:05 -07:00
Patrick Walton
31abe4bb52
Initialize resized mask textures to rgba(0, 0, 0, 0), not rgba(0, 0, 0, 1).
...
Partially addresses #405 .
2020-07-27 17:07:13 -07:00
Patrick Walton
444cae2b72
Add 1px of texture border around non-repeating image patterns.
...
Closes #401 .
2020-07-27 13:44:59 -07:00
Sebastian K
dd0ac124d8
Add ColorMatrix filter
2020-07-23 12:46:59 -07:00
Patrick Walton
c24fdf318d
Document `pathfinder_content` more
2020-07-15 17:58:44 -07:00
Patrick Walton
94174b81c9
Fix warnings
2020-07-15 13:12:55 -07:00
Patrick Walton
bb89f52d39
Cache images from frame to frame.
...
Images are cached for one frame; if they are not used the next frame, they're
freed.
2020-07-15 12:36:52 -07:00
Patrick Walton
e2e3ec7e21
Document the `pathfinder_content::outline` module
2020-07-14 12:08:00 -07:00
Patrick Walton
26bf6cce4e
Document the remainder of the `pathfinder_renderer` API
2020-07-13 19:24:32 -07:00
Patrick Walton
3d9b5509ba
Add API docs for the renderer and associated types
2020-07-13 16:18:23 -07:00
Patrick Walton
2b69ff778f
Implement gradient wrap/spread modes in SVG.
...
Closes #386 .
2020-07-13 12:36:45 -07:00
Patrick Walton
a49714e0ba
Flesh out the `web_canvas` crate a bit more
2020-07-06 11:01:38 -07:00
Patrick Walton
e54e0e4760
Start a new `web_canvas` crate, for usage in the browser as a `<canvas>` replacement
2020-07-04 09:33:49 -07:00
Patrick Walton
5f8fcbeac2
Fix WebGL, and add a simple example of WebGL usage
2020-07-02 19:49:09 -07:00
Patrick Walton
13ae83d6c5
Combine the Z-buffer and fill indirect draw params buffers to reduce the number
...
of SSBO bindings.
Apparently Mesa RadeonSI drivers have a limit of 8 SSBOs.
Closes #373 .
2020-07-02 11:57:45 -07:00
Patrick Walton
37c3c62762
Implement nested SVG clip paths in the D3D11 backend.
...
Partially addresses #372 .
2020-07-01 18:26:24 -07:00
Patrick Walton
42289eec6e
Fix Metal memory management and the `canvas_metal_minimal`, `canvas_nanovg`,
...
and `macos_app` examples.
`winit` does not create an autorelease pool, so the Metal backend had not taken
the presence of one into account. Now the Metal backend creates and flushes
autorelease pools as necessary.
Closes #334 .
Closes #376 .
2020-06-29 12:48:49 -07:00
Patrick Walton
e16f0a045e
Turn off timer queries if the debug UI is off.
...
Closes #360 .
2020-06-25 11:06:17 -07:00
Patrick Walton
13b2c91dde
Update the scene proxy
2020-06-23 13:15:59 -07:00
Patrick Walton
f92c631f97
Rework the tile builder for D3D11
2020-06-23 13:15:59 -07:00
Patrick Walton
17356311d6
Rework renderer options
2020-06-23 13:15:59 -07:00
Patrick Walton
7a996d330c
Update `pathfinder_renderer::{paint, scene}`
2020-06-23 13:15:59 -07:00
Patrick Walton
df15c855c4
Significantly rework the GPU renderer for the D3D11 backend
2020-06-23 13:15:59 -07:00
Patrick Walton
58a76f0f16
Update `gpu_data`
2020-06-23 13:15:59 -07:00
Patrick Walton
385272851a
Remove the separate `z_buffer` module
2020-06-23 13:15:59 -07:00
Patrick Walton
23c171fb6f
Refactor GPU a bit more
2020-06-23 13:15:59 -07:00
Patrick Walton
661da5e12b
Refactor GPU performance measurement
2020-06-23 13:15:59 -07:00
Patrick Walton
61833168e5
Update the debug UI
2020-06-23 13:15:59 -07:00
Patrick Walton
ff7c13c8fb
Add a new compute-based D3D11 backend
2020-06-23 13:10:06 -07:00
Patrick Walton
754a44ae22
Rename the existing renderer to `d3d9` in preparation for the D3D11 branch
2020-06-23 13:10:05 -07:00
bors-servo
0f35009215
Auto merge of #342 - pcwalton:listener-lifetime, r=pcwalton
...
Don't restrict render command listeners to the static lifetime
2020-05-16 14:05:57 -04:00
Sebastian K
18d2b006ac
Don't restrict render command listeners to the static lifetime
2020-05-16 10:47:06 -07:00
Patrick Walton
13f9fdc96c
Use SIMD a bit more in the new tiling code.
2020-05-16 10:38:34 -07:00
Patrick Walton
6ed3237b10
Remove path rect clipping, since it's no longer required
2020-05-15 19:13:18 -07:00
Patrick Walton
37c993eee6
Remove monotonic conversion, since it's no longer required
2020-05-15 19:12:46 -07:00
Patrick Walton
a67b4dd5b7
Replace the tiling algorithm with the one from "Random Access Vector Graphics".
...
This is a significant improvement in CPU time, as well as an overall
simplification.
2020-05-15 19:10:12 -07:00
Patrick Walton
8808bfda63
Merge pull request #337 from pcwalton/macos-radeon
...
Associate texture parameters in shaders with specific texture units, to work around a macOS Radeon driver bug.
2020-05-12 22:08:12 -07:00
Patrick Walton
ef0c0e0679
Associate texture parameters in shaders with specific texture units, to work
...
around a macOS Radeon driver bug.
Also, ensure there is always a dummy texture bound to every parameter in the
OpenGL backend.
These together stop the macOS Radeon drivers from recompiling the shader on
every drawcall.
Possibly addresses #300 .
2020-05-12 21:40:38 -07:00
Veedrac
6d8a89b8c5
Cleanup: remode redundant ops in tiles.rs
2020-05-11 21:47:39 +01:00
Veedrac
1c48e8900e
Faster sorting strategy, remove SortedVector
...
point_queue is only sorted by y coordinate to coordinate
work to one strip at a time. This is more efficiently handled
by punting later work into a next_point_queue,
and never explicitly sorting the data.
active_edges is only sorted by x coordinate for the tile-by-tile
work in process_old_active_edges. It is much more efficient
to sort once inside that function.
2020-05-11 21:47:35 +01:00
Patrick Walton
2421de6616
Enable compute shader by default if the OpenGL version is high enough.
2020-05-08 12:16:31 -07:00
Patrick Walton
6299d2c36b
Clear the canvas to the background color if no drawing command did so.
...
Closes #318 .
2020-05-07 21:36:13 -07:00
Patrick Walton
478008dcf0
Use all four channels in the mask texture.
...
Each bundle of four pixels on a scanline is packed into the RGBA channels of
the mask texture. The area LUT is also expanded to be RGBA so that four pixels'
worth of areas can be looked up at once.
Nice improvement on `paris-30k` from MPVG.
Closes #262 .
2020-05-05 13:11:37 -07:00
Patrick Walton
f8405d81c0
Bump the number of fills per batch up
2020-05-04 20:01:08 -07:00
Patrick Walton
6407bf5871
Reduce the size of buffers
2020-05-04 20:01:08 -07:00
Patrick Walton
d0842f2f4d
Generalize the buffer allocator to support multiple size classes, and use it
...
for tile compositing too.
2020-05-04 15:48:47 -07:00
Patrick Walton
ac83f79d94
Add a compute shader path, optimize GPU memory management, and switch from SDL
...
to `surfman`.
This is a large commit; explanations of each change follow.
This adds an optional compute shader path, off by default, for rendering fills
to alpha masks. It usually does not improve performance at present, but it
provides a good baseline for further optimizations. Later improvements will
likely aim to avoid writes to the mask texture entirely. Supporting
infrastructure for compute shader has been added to `pathfinder_gpu` for the
OpenGL and Metal backends.
The Metal backend has been optimized to avoid unneccessary buffer allocations
and reflection. As part of this, argument buffers have been removed, as the
current SPIRV-Cross compiler no longer requires them.
The GPU renderer has been improved to avoid stalls. Now, separate buffers are
allocated for each fill batch and for each frame. This can be extended in the
future to allow for separate buffers for tile draw operations as well.
SDL usage has been removed in favor of the native Rust `surfman` and `winit`.
Because `surfman` allows for selection of the integrated GPU on multi-GPU
system, it is chosen by default. The demo supports a new
`--high-performance-gpu` option to opt into the discrete GPU.
2020-04-30 13:33:29 -07:00
Patrick Walton
84bf4341c2
Micro-optimize line fill primitive generation to avoid calls to `floorf()` and
...
`ceilf()`
2020-04-23 18:35:17 -07:00
Patrick Walton
24deb36e9a
Supply solid tiles with the appropriate filter.
...
Fixes `embrace.svg` in MPVG.
2020-04-22 12:53:35 -07:00
Patrick Walton
104869a6e9
Move the mask enable flag to the tile to reduce drawcall count
2020-04-22 11:04:16 -07:00
Patrick Walton
cd09177ead
Implement the infrastructure needed to support multiple clip paths.
...
This also lays the groundwork needed to reduce batch breaks between solid and
alpha tiles.
2020-04-21 18:25:20 -07:00
Patrick Walton
564533ff29
Switch from Rust MPSC channels to `crossbeam-channel`.
...
7x performance improvement in contour.svg from MPVG!
2020-04-21 09:57:47 -07:00
Patrick Walton
6c996981a3
Fix some transform issues and implement transformed radial gradients in SVG.
...
In particular, this fixes the usvg-to-Pathfinder transform conversion and the
definition of `Transform2F::row_major()`.
Makes `drops.svg` from the MPVG samples work.
2020-04-20 16:40:02 -07:00
Patrick Walton
1cd5966d3d
Publish `pathfinder_content` and `pathfinder_renderer` to crates.io
2020-04-17 13:23:45 -07:00
Patrick Walton
5819b8dc60
Stop reallocating texture pages every frame
2020-04-17 11:50:46 -07:00
Patrick Walton
07ce2a2536
Add a scene field to render target IDs to reduce the chance of misuse
2020-04-16 16:54:52 -07:00
Patrick Walton
afe1a64f68
Allow multiple tile pages.
...
Closes #151 .
2020-04-15 20:13:37 -07:00
Patrick Walton
cdbe2fbb6b
Introduce the concept of a base color in order to handle canvas shadow alpha
...
correctly
2020-04-13 18:31:25 -07:00
Patrick Walton
47919db8f3
Fix frame time measurement in the GL backend, and add it to the NanoVG demo
2020-04-09 17:49:28 -07:00
Patrick Walton
895f73096e
Switch back to instanced drawing for tiles.
...
Improves tile build time by something around 2x in the NanoVG demo.
2020-04-08 17:16:54 -07:00
Patrick Walton
eb2b622615
Remove `draw_render_target()` in favor of the standard tile-based rendering
...
path
2020-04-03 13:05:53 -07:00
Patrick Walton
cd37791d72
Implement the `drawImage()` method on canvas.
...
Closes #223 .
2020-04-02 16:30:49 -07:00
Patrick Walton
ba7fe4be39
Add the ability to merge scenes together, and expose it to the canvas API.
...
Closes #268 .
2020-04-02 14:04:58 -07:00
Sebastian K
29c6a2e428
Transform paints by the render transform
2020-04-02 11:17:03 -07:00
Patrick Walton
794dd55038
Add some implicit conversions between scalars and vectors where appropriate
2020-04-01 17:20:32 -07:00
Patrick Walton
3d71703950
Stop copying images every frame on CPU.
...
We can avoid reuploading them to the GPU every frame as well, but this is a
bigger, and easier, win for now.
2020-04-01 13:01:08 -07:00
Patrick Walton
bf2fd6569b
Fix tests
2020-03-31 17:17:25 -07:00
Patrick Walton
32a56eab85
Stop leaking textures and framebuffers in the OpenGL backend.
...
Closes #264 .
Possibly addresses #286 .
2020-03-31 17:14:28 -07:00
Patrick Walton
2f6071c059
Make solid tiles not use mask 1.
...
Fixes random garbage appearing in the thumbnails in the NanoVG demo.
2020-03-31 14:16:04 -07:00
Patrick Walton
93f5fbc6d2
Add convenience constructors: `vec2f`, `vec2i`, `Vector2F::zero()`,
...
`Vector2I::zero()`
2020-03-31 11:29:21 -07:00
Patrick Walton
a1f0ae097a
Add thumbnail images to the NanoVG demo
2020-03-30 16:18:41 -07:00
Patrick Walton
7b53cc6731
Close all subpaths right before filling them.
...
Closes #269 .
2020-03-27 14:50:02 -07:00
Patrick Walton
55df287fec
Move radial gradients from the CPU to the GPU
2020-03-26 21:24:20 -07:00
Patrick Walton
0c93045f50
Replace the individual tile shaders with an ubershader
2020-03-25 21:59:51 -07:00
Patrick Walton
0f5de612f9
Merge pull request #281 from zimond/master
...
Use instant crate to build for wasm32 target
2020-03-09 17:17:09 -07:00
Patrick Walton
0b0c45a49a
Collapse linear gradients down to a single 256x1 sliver instead of a 256x256
...
square
2020-03-05 16:58:26 -08:00
Patrick Walton
2548ab853a
Unify solid tiles and render target tiles.
...
This commit also removes old shaders from the manifest.
2020-03-05 12:22:01 -08:00
Patrick Walton
9935c9fdff
Don't distinguish between render targets and other images in the texture atlas
...
allocator
2020-03-04 19:41:24 -08:00
Patrick Walton
a8f7438cd9
Remove transforms from paths.
...
Paints aren't scale-invariant when rendered into the texture atlas, so they
actually do need individual transforms.
2020-03-04 16:28:21 -08:00
Patrick Walton
27357a23d3
Separate the `AddPaintData` render command into different subcommands
2020-03-04 15:50:53 -08:00
Patrick Walton
e50039f4c2
Create framebuffers for every texture page
2020-03-04 12:35:07 -08:00
Patrick Walton
a3736859ba
Rename "paint texture" to just "texture page"
2020-03-04 12:09:08 -08:00
乌戈
22f9c3bf6e
Use instant crate to build for wasm32 target
2020-03-05 01:54:36 +08:00
Patrick Walton
d0f4579864
Move `RenderTargetId` out of the `pattern` module
2020-03-03 15:50:48 -08:00
Patrick Walton
2beb2bb126
Apply path transforms to paints
2020-03-03 14:26:38 -08:00
Patrick Walton
12574101e5
Add a transform field to `DrawPath`.
...
This is currently applied to the outline and should eventually be applied to
paints as well.
2020-03-03 11:18:01 -08:00
Patrick Walton
468848086a
Use the paint texture uniform belonging to the appropriate program
2020-03-03 10:56:32 -08:00
Patrick Walton
f607b607b0
Composite render targets using tiles, taking the Z-buffer into account.
...
We can do more tile-based optimization, but this should be enough to ensure a
correct rendering.
This temporarily breaks subpixel AA, but it should be fixable by modifying
`blur.fs.glsl`.
Closes #271 .
2020-03-02 20:10:10 -08:00
Patrick Walton
0f35d9c817
Add an embedded resource loader that places resources directly in the binary.
...
This is useful for WebGL and for downstream crates.io use.
2020-02-28 17:10:53 -08:00
Patrick Walton
40bb1b412c
Implement radial gradients along a line, following Pixman.
2020-02-27 16:24:10 -08:00
Adam Nemecek
3d39c5e9b7
trimmed whitespace
2020-02-27 08:13:14 -08:00
Patrick Walton
e913f83eee
Remove obsolete TODOs
2020-02-27 04:03:08 -08:00
Patrick Walton
3a014d78eb
Implement a blur filter for canvas shadows
2020-02-26 18:43:41 -08:00
Patrick Walton
d1c7da8bd2
Implement pattern repeating and image smoothing control
2020-02-26 14:56:05 -08:00
Patrick Walton
77b3555828
Separate opacity out from paint.
...
This allows `globalAlpha` to work on render targets.
2020-02-26 12:43:07 -08:00