Commit Graph

1063 Commits

Author SHA1 Message Date
Patrick Walton dc45dc459e Remove unused `LineSegment2F::cross` and vector cross product functions 2019-06-03 15:50:39 -07:00
Patrick Walton 1a42bbf4d3 Implement dashing for line segments (no curves yet) 2019-06-03 14:16:58 -07: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 678b6f12c7 Add support for counterclockwise winding to arcs 2019-06-01 12:56:31 -07:00
Patrick Walton 99c1cca05c Clean up `Outline::push_segment` and `Outline::push_full_segment` 2019-06-01 12:03:03 -07:00
Patrick Walton 44167beff5 Implement `Path2D::arc_to`. 2019-05-31 16:01:53 -07:00
Patrick Walton f20d41800c Use a correct algorithm for approximating arcs with Bézier curves 2019-05-31 16:01:28 -07:00
Patrick Walton 0b9a41c533 Treat the miter limit as part of the canvas state, allowing it to be saved and
restored even if miter joins are not in use.

In my opinion, this behavior is less logical, but it matches the behavior of
the HTML canvas API, which we aim to remain close to.
2019-05-30 21:39:08 -07:00
Patrick Walton eeaf51ce72 Expose line cap features to C 2019-05-30 21:28:52 -07:00
Patrick Walton 712c69faf1 Precompute the curve for a quarter-circle arc 2019-05-30 21:20:32 -07:00
Patrick Walton 48f825077c Add new join and cap features to SVG, fixing the demo 2019-05-30 20:55:58 -07:00
Patrick Walton 95f3337c6f Add the `ellipse` method to canvas paths 2019-05-30 17:24:12 -07:00
Patrick Walton 9756aa89f9 Base the core arc primitive on a unit chord and transform.
This lets us handle ellipses better.
2019-05-30 17:19:21 -07:00
Patrick Walton 607a518544 Implement canvas text align 2019-05-30 15:08:15 -07:00
Patrick Walton 5974aeba7b Implement miter limit 2019-05-30 13:08:30 -07:00
Patrick Walton 8d078ff345 Add an initial implementation of canvas `measureText` 2019-05-30 12:38:32 -07:00
Patrick Walton ce127caf76 Fix drawing of full circles 2019-05-30 10:56:19 -07:00
Patrick Walton d5ba6ab6da Change the core arc primitive to chord and radius, not chord and center.
This makes it harder to call the function with illegal arguments and simplifies
the join/cap code.
2019-05-30 10:17:17 -07:00
Patrick Walton 9138e1e0bb Pass in the font context to the canvas rendering context constructor so that it
can be reused.

Creating a system font source can do I/O on some platforms, so obviously we
don't want to do it every frame.
2019-05-29 21:15:42 -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 a75b635722 Implement round joins 2019-05-29 19:09:15 -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 339397bf23 Revert accidental change 2019-05-29 15:21:02 -07:00
Patrick Walton 51877426ea Take paths by reference, not by value, in outline stroke-to-fill. 2019-05-29 15:15:40 -07:00
Patrick Walton 5dd9e8b67d
Merge pull request #173 from luisbg/scalar
Start adding tests for scalar::F32x4
2019-05-29 14:21:33 -07:00
Luis de Bethencourt 9f4bcd8c42 Start adding tests for scalar::F32x4 2019-05-29 17:04:28 -04:00
Patrick Walton 5133bbfe1a Use unit vectors instead of angles for arcs.
This makes things faster and will also simplify the implementation of round
joins.
2019-05-29 12:14:47 -07:00
Patrick Walton 1df5e7a129
Merge pull request #172 from luisbg/i32x4
Complete I32x4 swizzles
2019-05-28 14:19:31 -07:00
luisbg 16813b9ebe Test I32x4 swizzles 2019-05-28 16:50:22 -04:00
luisbg b887690b73 Complete I32x4 swizzles 2019-05-28 16:50:17 -04:00
Patrick Walton e86389ac1c
Merge pull request #171 from luisbg/tests
Add test_i32x4_swizzles
2019-05-28 10:31:46 -07:00
Luis de Bethencourt 7240dafb05 Add test_i32x4_swizzles 2019-05-28 13:24:41 -04:00
Patrick Walton 4813084eed
Merge pull request #169 from luisbg/tests
Complete test_f32x4_swizzles
2019-05-27 20:18:49 -07:00
Luis de Bethencourt 3ccd1fce20 Complete test_f32x4_swizzles 2019-05-27 21:43:25 -04:00
Patrick Walton 848eb00443
Merge pull request #168 from luisbg/unused
Fix unused variable warning
2019-05-27 12:30:37 -07:00
Luis de Bethencourt 0231542141 Fix unused variable warning
Fixing the following warning
warning: unused variable: `resources`
2019-05-27 15:22:27 -04:00
Patrick Walton 4327d75058
Merge pull request #167 from toolness/pathfinder-unity-fun
Add GLDevice::set_default_framebuffer()
2019-05-27 11:28:33 -07:00
Atul Varma ea3cdbb2a9 Merge remote-tracking branch 'origin/master' into pathfinder-unity-fun 2019-05-27 13:41:19 -04:00
Atul Varma a51501791d Add GLDevice::set_default_framebuffer(). 2019-05-27 07:56:36 -04:00
Patrick Walton bc713a5181 Remove the rustache dependency.
1/3 reduction in binary size for `canvas_minimal`.

Closes #158.
2019-05-26 13:02:52 -07:00
Patrick Walton e04cc273ee Add enough C bindings to recreate `canvas_minimal` in C.
Closes #12.
2019-05-25 20:21:38 -07:00
Patrick Walton 009f78ba26
Merge pull request #161 from Eijebong/quickcheck
Update quickcheck to 0.8
2019-05-24 11:05:13 -07:00
Patrick Walton e8a5c2a04b
Merge pull request #160 from luisbg/master
Remove cross method from F32x4
2019-05-24 11:04:58 -07:00
Bastien Orivel 349c1a9cd0 Update quickcheck to 0.8
This dedupes some dependencies
2019-05-24 19:22:23 +02:00
Luis de Bethencourt 8c0415c9b9 Remove cross method from F32x4
Silencing the following rustc warning:
warning: unused variable: `other`

Followup to Pull Request #152.
Instead of marking `other` unused (`_other`) we can remove the method
entirely.
2019-05-24 12:19:13 -04:00
Patrick Walton 8c4f05ce39 Initial rudimentary Lottie parsing code 2019-05-23 18:03:09 -07:00
Patrick Walton cd23d62f3d Fix off-by-epsilon error in `push_arc` that was breaking the Moiré demo 2019-05-21 20:24:04 -07:00
Patrick Walton 2131724a2a Implement round line caps 2019-05-21 20:21:46 -07:00
Patrick Walton 197f01d56a Write in the line segment intersection code in matrix form 2019-05-21 14:51:50 -07:00
Patrick Walton c6fc853579 Don't miter join on stroke endpoints.
Fixes the Moiré demo.
2019-05-21 14:49:01 -07:00
Patrick Walton cba5444f03 Add miter joins at endpoints 2019-05-16 12:47:18 -07:00
Patrick Walton e282eb57d5 Implement interior miter line joins (not yet endpoints) 2019-05-16 11:10:15 -07:00
Patrick Walton 272b63a017 Implement square line caps 2019-05-16 10:43:43 -07:00
Patrick Walton 1b9cfa98a9 Stroke closed paths properly 2019-05-16 08:35:14 -07:00
Patrick Walton 6eab3fa2d8 Implement `globalAlpha` for canvas 2019-05-14 18:26:10 -07:00
Patrick Walton 0deb12b3a2 Implement `fill-opacity` and `stroke-opacity` in SVG 2019-05-14 18:09:01 -07:00
Patrick Walton 25a6c33a1a Remove the object index attribute from the shaders, since it's now unused 2019-05-14 15:22:50 -07:00
Patrick Walton 86f5bdb44a Store paints in the paint texture indexed by paint ID, not object index 2019-05-14 15:21:15 -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 a54378f931 Make the paint texture dynamically-sized on the GPU side 2019-05-14 11:38:48 -07:00
Patrick Walton 376a1c7165 Rename "fill colors" to "paint" in preparation for gradients and images 2019-05-14 11:33:52 -07:00
Patrick Walton 7518fa65c0 Update dependencies 2019-05-13 18:47:19 -07:00
Patrick Walton c7382a8b2c Add affine transform support to the canvas implementation 2019-05-13 18:40:25 -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 d5a12e0e9f Revert "batch alpha and solid tiles"
This reverts commit 753a254726.
2019-05-13 18:20:21 -07:00
Patrick Walton c09ef3ae7c Fix SVG and demo compilation errors 2019-05-13 18:19:10 -07:00
Patrick Walton f24d93819b Add arc building methods and switch the Moiré demo to use them.
Also, stop taking points by reference in many methods, for consistency.
2019-05-13 12:42:13 -07:00
Patrick Walton 55be787ffd
Merge pull request #150 from nical/glitch-fix
Fix vertex attribute configuration of alpha tiles
2019-05-13 10:58:06 -07:00
Nicolas Silva 820a0286aa Fix vertex attribute configuration of alpha tiles.
Fixes #134.

glVertexAttribPointer takes a size as parameter which refers to the number of components and not the size in bytes of the value.
The tile index was registered as a 2-components value which caused the second component to overlap with the first member of the next primitive, which was mostly fine except for the last element which would overlfow the buffer. Intel and nvidia GPUs/drivers on linux at least refuse to read the first component of this two-component value if the other component is outside of the valid range which caused the shader to get zero instead and always select the first mask tile.
2019-05-13 18:00:54 +02:00
Patrick Walton b4bdbec4aa
Merge pull request #148 from bzm3r/master
Constrain sizes of solid tile and alpha tile batches being sent to the GPU
2019-05-13 07:59:44 -07:00
Patrick Walton 639a8f39e8 Add Moiré demo 2019-05-11 11:53:50 -07:00
bhmerchant@gmail.com 753a254726 batch alpha and solid tiles 2019-05-10 22:57:34 -07:00
Patrick Walton a5d373cb91 Rename "object" to "path" in preparation for image objects 2019-05-10 12:03:38 -07:00
Patrick Walton a078766dc6 Implement basic text rendering in canvas with `skribo` and `font-kit`.
Skribo currently writes some debugging info to standard output. A patch is
forthcoming to fix that.
2019-05-09 15:21:18 -07:00
Patrick Walton ebdb12404a Add missing "actual size" texture 2019-05-08 17:51:59 -07:00
Patrick Walton 3310b15826 Fall back to Newton's method instead of dividing by zero when finding critical
points during curve monotonic conversion.

Closes #146.
2019-05-08 17:51:12 -07:00
Patrick Walton 5568e6f64f Remove unused `monotonic` module 2019-05-08 13:37:17 -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 5a2c716688 Generalize `draw_image_switch` to `draw_image_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 3857a28e6a Move logic out of the `gpu_data` module 2019-05-03 18:51:36 -07:00
Patrick Walton 3ba4ce117c Add graphics state saving and restoration to the canvas API 2019-05-03 17:45:01 -07:00
Patrick Walton a86a87a670 Allow fill and stroke colors to be changed 2019-05-03 17:37:27 -07:00
Patrick Walton bd9850dc3b Note the canvas API in the README 2019-05-03 14:24:10 -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 cf3dcfdd0e A couple of clarifications in the readme 2019-05-02 11:22:04 -07:00
Patrick Walton cf3aadc4f2 Add note about SDL2 installation instructions 2019-05-02 11:19:07 -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 c49ec850a1 Run `rustfmt` on the SVG crate 2019-04-29 16:58:09 -07:00