Sebastian
cb4eb597c3
update pdf stuff ( #552 )
2024-02-14 16:32:57 +00:00
bors-servo
c8ae2aa61e
Auto merge of #494 - doggo-ninja:extremely-minor-fixes, r=jdm
...
Extremely minor fixes
Only doing this to remedy a very minor annoyance of mine. These are not major (or even very helpful) changes by any measure.
- Removes an unneeded `use` statement
- Fixes a [deprecated](https://doc.rust-lang.org/nightly/edition-guide/rust-2021/panic-macro-consistency.html ) use of `panic!`
2022-03-27 23:16:50 -04:00
Felix Mattick
cea5218dc7
Extremely minor fixes
...
Only doing this to remedy a very minor annoyance of mine. These are not major (or even very helpful) changes by any measure.
- Removes an unneeded `use` statement
- Fixes a [deprecated](https://doc.rust-lang.org/nightly/edition-guide/rust-2021/panic-macro-consistency.html ) use of `panic!`
2022-02-05 17:33:00 -06:00
Sebastian K
3ade212b3f
update pdf_render
2022-01-24 20:10:14 +03:00
Patrick Walton
94174b81c9
Fix warnings
2020-07-15 13:12:55 -07:00
Sebastian K
dec6fa05f0
Merge branch 'master' of https://github.com/servo/pathfinder into PR-pdf
2020-07-07 22:13:57 +03:00
Sebastian K
fa47d5a181
initial PDF support
2020-07-06 22:34:42 +03:00
Patrick Walton
a49714e0ba
Flesh out the `web_canvas` crate a bit more
2020-07-06 11:01:38 -07:00
Sebastian K
8d866bc9c8
initial PDF support
2020-07-04 17:01:21 +03: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
3e64e29fb2
Rename `BuiltSVG` to `SVGScene`
2020-06-24 17:35:43 -07:00
Patrick Walton
423a91ea1a
Update the demo for the D3D11 backend
2020-06-23 13:15:59 -07:00
Veedrac
faea46b9f6
Fix non-integer HiDPI support in demo
2020-05-11 13:14:54 +01:00
Patrick Walton
41c0c5f071
Upgrade to the latest master surfman
2020-05-08 12:47:58 -07:00
Patrick Walton
e4edb23360
Merge pull request #322 from pcwalton/surfman-x11
...
Switch to using surfman in X11 mode.
2020-05-08 12:45:32 -07:00
Patrick Walton
90fb36f199
Switch to using surfman in X11 mode.
...
Partially addresses #310 .
2020-05-08 12:22:46 -07: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
520817e909
Add OpenGL 4.3 support to the GL backend, enabling compute shader on
...
non-Metal platforms
2020-05-07 16:33:03 -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
da2f65ddf4
Fix `surfman` reference in `Cargo.toml`
2020-04-30 15:04:49 -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
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
eb2b622615
Remove `draw_render_target()` in favor of the standard tile-based rendering
...
path
2020-04-03 13:05:53 -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
93f5fbc6d2
Add convenience constructors: `vec2f`, `vec2i`, `Vector2F::zero()`,
...
`Vector2I::zero()`
2020-03-31 11:29:21 -07:00
Patrick Walton
9723fa441b
Update `image`, `glutin`, and `jni` crates.
...
From #277 .
2020-03-27 15:49:26 -07: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
Adam Nemecek
3d39c5e9b7
trimmed whitespace
2020-02-27 08:13:14 -08:00
Patrick Walton
67d12adb6c
Replace layers with render targets, which can be used as patterns.
...
This allows us to efficiently handle a lot of workloads that require multiple
HTML canvases, without CPU readback. For example, you can render paths to a
render target, then turn that render target into a repeating pattern that you
fill other paths with. Or you can render paths to a render target and then
composite that render target as a whole with a blend mode.
This introduces a new `DrawRenderTarget` render command that blits a render
target without any paths involved. This is basically just a hack that works
around the fact that our tiled renderer doesn't yet support effects that widen
the ink region (i.e. blurs). It can be removed once we have that support.
2020-02-21 22:14:18 -08:00
Patrick Walton
16a2de88df
Rename "postprocessing" to "effects" and start initial work on composite ops
2020-02-20 14:22:07 -08:00
Patrick Walton
d9e994e46d
Transition the existing postprocessing system to a layers system.
...
This is preparatory work for composite ops and blurs.
Closes #261 .
2020-02-20 11:21:45 -08:00
Patrick Walton
31becb1570
Flatten objects' tiles ourselves instead of having Rayon do it.
...
A prerequisite for clips.
2020-02-14 21:20:19 -08:00
Patrick Walton
5a21557a6d
Implement basic linear gradients.
...
This is not a very efficient implementation yet, but it seems to work.
2020-02-10 16:01:05 -08:00
Patrick Walton
740597d886
Merge pull request #254 from arturoc/remove-log-restriction
...
Remove log restriction
2020-02-06 08:38:08 -08:00
Emmanuel Gil Peyrot
6ce416e77c
Bump all outdated dependencies
...
I’m pleasantly surprised that none of these required any (visible) code
change, but tests pass so let’s go with that. :)
2020-02-06 09:39:50 +01:00
Patrick Walton
b269723254
Switch to per-pixel texture lookup for paints.
...
This is a prerequisite for supporting gradients and images.
2020-02-04 21:50:13 -08:00
Patrick Walton
2db43797c3
Split colors out into their own crate.
...
A lot of downstream consumers of `pathfinder_gpu` want to use colors without
the path stuff.
2020-01-31 09:17:04 +01:00
Arturo Castro
3be6d70577
remove log restrictions from renderer, demo/common and gl crates
2020-01-28 15:24:21 +01:00
Patrick Walton
ce3b40cd5c
Make timer queries and framebuffer readback async
2020-01-07 13:03:15 -08:00
Sebastian K
e38e2d800f
update usvg to 0.8
2019-12-28 11:46:31 +03:00
Patrick Walton
0662f6433f
Allow any texture format to be uploaded; fix Metal compilation on newer rustcs
2019-12-20 11:48:51 -08:00
Patrick Walton
521ab3b5ba
Add a 3D vector type
2019-12-07 11:52:35 -08:00
Patrick Walton
437eda96da
Overload `*` between transforms and points
2019-07-12 11:55:01 -07:00
Patrick Walton
2c984de1ea
Add convenience translation, rotation, and scaling methods to `Transform2D`
2019-07-12 11:34:48 -07:00
Patrick Walton
1eb28a5539
Fix incorrect definition of 2D transform multiplication
2019-07-12 11:26:09 -07:00
Patrick Walton
96758dfc17
Add `rotate` and `scale` methods to `Transform4F`
2019-07-11 15:57:45 -07:00
Patrick Walton
3f91206d57
Add a `translate` method to 3D transforms
2019-07-11 15:44:01 -07:00
Patrick Walton
bcac119324
Rename `Transform2DF` to `Transform2F` and `Transform3DF` to `Transform4F`
2019-07-11 14:59:10 -07:00
Patrick Walton
55825cbc6a
Switch scale and translation constructors for `Transform3DF` over to use vectors
2019-07-11 14:58:45 -07:00
Patrick Walton
eb0a61679d
Use operator overloading for 3D matrix multiplication
2019-07-11 13:59:39 -07:00
Patrick Walton
4cdded74b4
Fix SVG export in the demo; update `Cargo.lock`
2019-06-25 11:32:26 -07:00
Patrick Walton
431dcf3d2e
Rename `pathfinder_geometry::basic` to simply `pathfinder_geometry`, and move
...
the remaining code in that crate to a new crate, `pathfinder_content`
The old hierarchy was confusing.
2019-06-21 10:06:19 -07:00
Patrick Walton
010bc66073
Upgrade `resvg` to 0.7
2019-06-20 17:13:15 -07:00
Patrick Walton
71623eaab3
Make Metal dependencies in the demo Mac-only
2019-06-20 12:34:55 -07:00
Patrick Walton
487577a11b
Add Metal support.
...
This commit substantially reworks the `pathfinder_gpu` API to better support
modern APIs like Metal. It should open the door to `gfx-rs`, `wgpu`, Vulkan,
and D3D12 backends relatively straightforwardly.
A new example, `canvas_metal_minimal`, has been added.
Note that the new Metal shaders require a patched version of `spirv-cross` to
build properly. An upstream patch is forthcoming.
2019-06-20 11:47:22 -07:00
Patrick Walton
5c5fe00b27
Fix build problem
2019-06-17 13:16:03 -07:00
Alan Jeffrey
a507e1955e
Set the scene transform by linear iterpolation of the eye transforms
2019-06-07 12:02:30 -05:00
Alan Jeffrey
005e7d3835
Set the scene transform to be one of the eye transforms
2019-06-07 10:15:34 -05:00
Alan Jeffrey
3c91c1cc97
Better error handling of magicleap demo args
2019-06-07 10:15:34 -05:00
Alan Jeffrey
d877ca1d3a
Fix the magicleap app to work in LuminOS 0.96
2019-06-06 12:36:32 -05:00
Alan Jeffrey
9c641f6ce3
Renamed Point2D to Vector2
2019-06-03 17:58:34 -05:00
Alan Jeffrey
c71a20805f
Removed some unused imports
2019-06-03 17:52:18 -05:00
Alan Jeffrey
848234ef61
Updated magicleap demo for new pathfinder API
2019-06-03 17:52:18 -05:00
Alan Jeffrey
a2c8d71a3f
Rayon's thread builder API requires ownership
2019-06-03 17:52:18 -05:00
Alan Jeffrey
f5b5843c31
Make demo camera Mode public
2019-06-03 17:52:18 -05:00
Alan Jeffrey
635d3bc1f3
Call make_current(eye) when rendering for each eye.
2019-06-03 17:52:18 -05:00
Patrick Walton
a1b0df0a42
Rename `Point2DF` to `Vector2F`, `Point3DF` to `Vector4F`, and `LineSegmentF`
...
to `LineSegment2F`.
Straw poll on Twitter suggested that these names were preferred.
2019-06-03 12:39:29 -07:00
Patrick Walton
e1bcc11ace
Change the `F32` and `I32` suffixes to `F` and `I` to match the C API.
...
They're shorter and less noisy.
2019-05-29 19:17:16 -07:00
Patrick Walton
acf666b701
Stop using triangle fans for DX12/Vulkan compatibility.
...
Closes #165 .
2019-05-29 16:04:33 -07:00
Patrick Walton
7a02b78b3d
Explicitly specify color texture coordinates for alpha and solid tiles.
...
This is groundwork for gradients and images.
This commit also refactors the interface for vertex attributes to use named
parameters (via structs), for clarity.
2019-05-14 15:11:04 -07:00
Patrick Walton
89ca998fa8
Add a convenience method for creating a scene proxy with an empty scene.
...
This makes animation rendering loops a bit easier for users.
2019-05-13 18:29:57 -07:00
Patrick Walton
c09ef3ae7c
Fix SVG and demo compilation errors
2019-05-13 18:19:10 -07:00
Patrick Walton
b557cdf20f
Add an "actual size" button in the demo
2019-05-08 11:05:31 -07:00
Patrick Walton
7b8c44575e
Turn the zoom buttons into a segmented control
2019-05-08 10:50:55 -07:00
Patrick Walton
940605fbb5
Generalize `draw_image_switch` to multiple segments
2019-05-08 10:38:12 -07:00
Patrick Walton
0d25fd0eab
Generalize "switch" to "segmented control" in the UI
2019-05-08 10:27:32 -07:00
Patrick Walton
54672f2089
Add "save as SVG" support to the demo.
...
This is intended to help diagnose rendering problems, by allowing export to a
format that can be minimized and in which issues can be reproduced.
2019-05-07 14:37:46 -07:00
Patrick Walton
b198c06968
Properly account for concurrency in the performance measurement
2019-05-07 13:43:37 -07:00
Patrick Walton
15f63df844
Rename `DebugUI` to `DebugUIPresenter` and `UI` to `UIPresenter`
2019-05-06 15:36:39 -07:00
Patrick Walton
78908c5e3c
Factor the demo UI into model and presenter
2019-05-06 15:25:58 -07:00
Patrick Walton
9de7d95d33
Start a simple HTML canvas-like API, and add a minimal example to show how to
...
use it.
2019-05-03 14:15:38 -07:00
Patrick Walton
4a4011d303
Refactor the demo some more.
...
Move rendering code into its own module and split up `finish_drawing_frame()`.
2019-05-02 18:24:38 -07:00
Patrick Walton
29b137c81d
Move the demo camera code into its own module
2019-05-02 17:47:09 -07:00
Patrick Walton
5e64876579
Simplify gridlines in the demo shader
2019-05-02 14:12:13 -07:00
Patrick Walton
66b5142334
Stop trying to use jemalloc on Windows.
...
Closes #138 .
2019-05-02 11:12:33 -07:00
Patrick Walton
5c5e4e9313
Factor the scene thread out of the demo and into the renderer proper.
...
This simplifies Pathfinder's API considerably. Now users get off-main-thread
scene building "for free".
2019-05-01 17:12:25 -07:00
Patrick Walton
a96ee73da6
Introduce an Executor abstraction to enable alternatives to Rayon
2019-04-30 15:17:07 -07:00
Patrick Walton
60b951409c
Run `rustfmt` on the demos
2019-04-29 16:52:37 -07:00
Patrick Walton
8606cd013e
Replace commented out printlns with proper debug statements
2019-04-29 16:43:24 -07:00
Patrick Walton
d06746f28d
Remove barrel distortion.
...
It was a toy implementation and isn't the approach I want to go with.
2019-04-29 16:05:42 -07:00
Patrick Walton
b85dc2f001
Add basic pinch zoom support on Android
2019-04-26 22:29:38 -07:00
Patrick Walton
6c31e1bc01
In VR mode, render one eye and then reproject to both eyes instead of rendering
...
twice.
This reduces both CPU and GPU time a lot in exchange for a small loss in
quality.
2019-04-26 17:22:54 -07:00
Alan Jeffrey
3d81bf170f
Updated to latest pf3 API
2019-04-22 11:57:24 -05:00
Alan Jeffrey
c549bdec7a
Explicitly set the linker flavor for the magicleap demo
2019-04-22 11:54:42 -05:00
Patrick Walton
58d55c5eaa
Allow rendering to non-default framebuffers
2019-04-18 19:05:01 -07:00
Patrick Walton
62a3fefca4
Reenable the tile and fill counts in the debug display
2019-04-18 15:09:37 -07:00
Patrick Walton
c688d04412
Remove the scene assembly thread, and pipeline only fills instead of alpha
...
tiles.
Removing a thread should make it easier to manually assign threads to CPUs, as
is necessary on devices with poor schedulers like Magic Leap 1.
2019-04-18 13:50:26 -07:00
Josh Matthews
214ad9de72
Replace readme directions with makefile targets.
2019-04-15 14:16:40 -04:00
Josh Matthews
8b3bf7d064
Use linker directly to to avoid linker errors.
2019-04-15 14:16:40 -04:00