Commit Graph

1748 Commits

Author SHA1 Message Date
Patrick Walton 2e5b70805f
Merge pull request #89 from nical/lyon-0-11
Update lyon and euclid dependencies
2018-07-17 08:24:17 -07:00
Nicolas Silva 46d1878ef5 Update lyon and euclid dependencies. 2018-07-11 00:27:42 +02:00
Patrick Walton 2ec2adf1c7
Merge pull request #88 from Eijebong/bump-core-stuff
Update core-graphics, core-text and bump version
2018-07-09 15:58:48 -07:00
Bastien Orivel 42d1c439aa Update core-graphics, core-text and bump version 2018-07-09 12:50:43 +02:00
Patrick Walton 63c17a7f15
Merge pull request #82 from fschutt/pathfinder_glyph_dimensions_directwrite
Fixed calculation of glyph dimensions on Windows
2018-05-03 18:10:57 -07:00
fschutt 9223717234 Fixed calculation of glyph dimensions on Windows
The dimensions in the `DWRITE_GLYPH_METRICS` are a bit special:
the `rightSideBearing` is measured from the right edge of the
character boundary, not the left edge.

So, doing (right - left) would usually return a negative or very
small number, which, when casted to a u32 in an unsafe block, would
silently overflow to a very large number and make webrender crash.

Therefore, in order to calculate the metrics correctly, we have
to first calculate the full width of the character, then subtract
the right and left edges, same width the height.
2018-05-03 07:55:40 +02:00
Patrick Walton 2701757e29
Merge pull request #81 from fschutt/fix_compile_windows
Fix the API of glyph_dimensions to make webrender compile on Windows
2018-04-27 08:41:10 -07:00
fschutt 80a872ca46 Add add_native_font function to get feature parity on Windows + publicly export necessary types 2018-04-13 13:24:53 +02:00
fschutt ddcde6d1ae Fix the API of glyph_dimensions to make webrender compile on Windows 2018-04-13 11:50:52 +02:00
Patrick Walton 235c51e160 Fix the Cargo version conflict in the front end 2018-04-10 11:20:17 -07:00
Patrick Walton f755002983 Switch to the crates.io version of Servo's `freetype` library 2018-04-09 13:28:31 -07:00
Patrick Walton 6e1fe50202 Switch to Servo's version of the FreeType library bindings.
This enables compatibility with WebRender on Linux.
2018-04-09 12:41:41 -07:00
Patrick Walton fcfd157c70 Remove `F32ArrayToMat4` in favor of `glmatrix.mat4.clone()` 2018-04-04 17:56:01 -07:00
Patrick Walton 2fde232982 Factor the text paragraph rendering code out into a separate class so it
can be reused
2018-04-03 13:57:46 -07:00
Patrick Walton 6ba87277c2 Remove the explicit WebVR API dependency; it seems to be upstream now 2018-04-03 12:42:33 -07:00
Patrick Walton 881be4967d Fix TypeScript build errors 2018-04-03 12:40:02 -07:00
Patrick Walton 6f839cd1b2
Merge pull request #76 from Manishearth/vr-better
Cleaned up VR implementation
2018-04-02 19:11:13 -07:00
Manish Goregaokar 8ed4e96ff9 Various review cleanups 2018-04-02 19:10:19 -07:00
Manish Goregaokar 3d223c1a4a Match screen size as much as possible 2018-04-02 19:10:11 -07:00
Manish Goregaokar 0751da81a4 Move VR stuff to ThreeDView 2018-04-02 19:10:11 -07:00
Manish Goregaokar 2b0b699fa0 Turn off lighting for VR 2018-04-02 19:10:11 -07:00
Manish Goregaokar 3af3635eea Use correct viewport and clear correctly 2018-04-02 19:10:11 -07:00
Manish Goregaokar 148e77d995 Use correct projection and view matrices 2018-04-02 19:10:11 -07:00
Manish Goregaokar 975685c23b Make it possible to enter VR mode 2018-04-02 19:10:11 -07:00
Manish Goregaokar 7e115826a1 Remove dependence on frag_depth 2018-04-02 19:10:04 -07:00
Patrick Walton d66a5b6c54 Update to `env-logger` 0.5 2018-03-30 14:25:52 -07:00
Patrick Walton dcc3a0fc94 Update to bincode 1.0 2018-03-22 15:03:25 -07:00
Patrick Walton dbd3a36f3d Generate a reasonable normal for the superfluous control point generated
for lines.
2018-03-21 14:56:24 -07:00
Patrick Walton 5e5148df54 Fix on Chrome, which doesn't support WebGL queries 2018-03-20 19:40:28 -07:00
Patrick Walton 96d2f909ea wip 2018-03-19 18:34:27 -07:00
Patrick Walton 6e13fb171c Use a lookup table to do area calculations instead of Loop-Blinn-style
distance-to-edge for stencil analytic antialiasing.

This improves the rendering quality of stencil AAA significantly.

Additionally, this adds an approximation of Core Graphics' (macOS')
defringing filter.

Closes #73.
2018-03-19 14:35:36 -07:00
Patrick Walton e851afd5d9
Merge pull request #74 from pythonesque/patch-1
The Send impl for `FontContext` is too forgiving.
2018-03-10 10:29:19 -08:00
Joshua Yanovski c7064b31ce
The Send impl for `FontContext` is too forgiving.
I'm pretty confident that it is only thread safe if FK is (or another way of putting it is, I'm pretty sure if you include an `Rc<_>` in FK it should not be safe to share between threads).
2018-03-09 01:20:49 +01:00
Patrick Walton 64c818e530 Construct meshes independently of mesh libraries (renamed to "mesh
packs").

This fits in better with the way WebRender does things. It simplifies
the code too.
2018-03-08 15:10:29 -08:00
Patrick Walton cffff886c3 Be more robust in the presence of duplicated points when computing
normals
2018-03-07 11:53:44 -08:00
Patrick Walton db6986ca1f Take the orientation of a path into account when computing normals 2018-03-07 11:21:08 -08:00
Patrick Walton aa3ecf28a5 Quantize to subpixel boundaries.
This doesn't break meshes the way the previous "discard if too thin"
code did. It fixes several issues observed on Wikipedia when using
Pathfinder in Firefox.

Closes #72.
2018-03-06 19:20:19 -08:00
Patrick Walton 6c2c34aa3c Make the mesh library serializable and deserializable.
This is needed for the new WebRender infrastructure.
2018-03-06 15:12:47 -08:00
Patrick Walton 18121208d4 Update euclid to 0.17 and Lyon to 0.10 2018-03-06 15:06:06 -08:00
Patrick Walton b60275e5ea Convert cubic curves to quadratic ones in fonts 2018-03-06 13:10:29 -08:00
Patrick Walton 07d978909c Get the DirectWrite backend compiling again.
Partially addresses #69.
2018-03-06 12:24:30 -08:00
Patrick Walton f718aa9ce3 Make the FreeType API match the Core Graphics one 2018-03-05 17:15:17 -08:00
Patrick Walton fad7f2f343 Fix FreeType build 2018-03-05 15:04:52 -08:00
Patrick Walton 5d3c1f6d59 Abstract away `FontKey` so WebRender can more easily use this; switch
from angle measurement to scale-dependent hull height
2018-03-05 11:27:18 -08:00
Patrick Walton 45a812d30f Move webpack to the `devDependencies` section.
See issue #69.
2018-02-22 10:02:15 -08:00
Patrick Walton 48aceb6291 Fix zoomed-in rotation for text by taking extended path transforms into
account in the MCAA shader.
2018-02-21 17:00:37 -08:00
Patrick Walton dfcbd9dddd Remove the unused `usesSTTransform` 2018-02-21 16:38:09 -08:00
Patrick Walton 4e1a9a9bad Add a new varying to the stencil AAA fragment shader for simplicity.
The new `vXDist` values *can* be deduced simply from the `vUV` values
and first-order derivatives thereof, and therefore they're technically
redundant. However, calculating them in this way increases the
complexity and ALU load in the fragment shader. It's simpler to just
compute the additional values in the vertex shader and use
interpolation.
2018-02-21 16:27:49 -08:00
Patrick Walton 82be5d12d1 Update dependencies and fix TypeScript build failures.
Closes #68.
2018-02-19 11:52:00 -08:00
Patrick Walton a84b7c7cbd Replace ECAA with "Stencil AAA", a distance-based antialiasing
technique similar to the new MCAA.

This new technique simplifies the code significantly by unifying lines,
curves, and transformed curves. Blog posts forthcoming.
2018-02-17 10:45:25 -08:00
Patrick Walton 87eb3038eb Make the cubic Bézier approximation tolerance proportional to the SVG
view box size instead of hardcoding it.

Reduces the vertex shading load by approximately half on many of the
"Massively Parallel Vector Graphics" test cases.

Partially addresses #67.
2018-02-08 20:00:14 -08:00
Patrick Walton 5879d9778d Replace the MCAA shader with an extended Loop-Blinn approach and an
approximation of area based on approximate first-order line distance.

This enables support for full affine transforms in MCAA. It also greatly
simplifies the shader and reduces the amount of work that the GPU needs
to do for fragment shading.

Experimental testing has shown the area approximation to be accurate to
about 4%.
2018-02-02 18:28:41 -08:00
Patrick Walton 5bd68dec65 Port Pathfinder to use Lyon for Bézier curve math.
This removes a whole lot of code from `pathfinder_path_utils`. Hopefully
the remaining code can go upstream.

These changes regress quality of stroke widths for cubic curves, because
they move fill-to-stroke conversion before cubic-to-quadratic
conversion. To fix that, we will need to recursively subdivide when
doing fill-to-stroke conversion.
2018-01-29 12:47:47 -08:00
Patrick Walton 2ec5dbfa42 Fix minor comment typo 2018-01-21 13:06:47 -08:00
Patrick Walton d8c590867d Stop computing B-vertex normals, which are no longer used.
6x improvement in partitioning time (because atan2 is dog slow).
2018-01-21 11:41:26 -08:00
Patrick Walton 7a2ad35d7e Don't allow the user to move the camera in the benchmarks and reference tests.
Doing this messes up the tests.
2018-01-18 17:26:56 -08:00
Patrick Walton 0720b04591 Scale stroke widths correctly in the Ghostscript tiger test 2018-01-18 17:01:47 -08:00
Patrick Walton 3be3ff7351 Disable gamma correction, stem darkening, and emboldening in the UI when SSAA mode is selected 2018-01-16 15:50:17 -08:00
Patrick Walton ef29eb19f3 Tiny comment fix 2018-01-16 13:06:51 -08:00
Patrick Walton 3b3fef3982 Hide `generate_gamma_lut` and `pathfinder_server` in the API docs list.
This is a messy way to do this, but I couldn't find a better way in Cargo or `rustdoc`…
2018-01-16 12:57:26 -08:00
Patrick Walton 6a640eca74 Simplify the B-quad vertex position VBO to have a uniform format, and
enable early Z for SVG.

Additionally, this switches the B-quad patches for XCAA to be convex
hulls instead of bounding boxes, reducing fragment shader load.

This is a large speedup for the Ghostscript tiger demo: 5x or more.

Closes #33.
2018-01-11 19:25:02 -08:00
Patrick Walton 67dd6cd8ed Add some simple overview documentation to the partitioner crate 2018-01-05 18:40:36 -08:00
Patrick Walton 952186c638 Document `pathfinder_font_renderer`. 2018-01-05 16:59:49 -08:00
Patrick Walton c68f16f6ba Write more API documentation 2018-01-05 15:52:15 -08:00
Patrick Walton 32c20ec649 Document most of `pathfinder_path_utils`. 2018-01-05 14:20:50 -08:00
Patrick Walton 4b887174f8 Document some more of `pathfinder_path_utils` 2018-01-05 12:35:01 -08:00
Patrick Walton 452ade0012 Document `pathfinder_path_utils::cubic` 2018-01-05 12:19:23 -08:00
Patrick Walton 2a3ab09279 Fix rustdoc CSS a bit 2018-01-05 12:19:13 -08:00
Patrick Walton d821991c01 Clean up `common.inc.glsl` a bit 2018-01-05 12:18:50 -08:00
Patrick Walton f3841ef402 Document more shader parameters 2018-01-04 18:07:14 -08:00
Patrick Walton 67d29803b5 Document most uniforms in shaders 2018-01-04 17:32:20 -08:00
Patrick Walton aa7e0df514 Make the libraries only used for reftesting opt-in.
Closes #56.
2018-01-04 15:10:23 -08:00
Patrick Walton 4a71f79a78 Make the logo in the navbar monochrome 2018-01-04 14:43:37 -08:00
Patrick Walton 275a937439 Fix colors and view box for the reference in the SVG reftest 2018-01-04 14:14:47 -08:00
Patrick Walton c5187deedd Use the monochrome MCAA mode for the Material Design icons SVG demo.
This avoids ugly pixel snapping.
2018-01-03 20:53:25 -08:00
Patrick Walton 2c2afe2fc0 Only emit a `ClosePath` command in a `PathBufferStream` if the subpath
is closed.

Closes #60.
2018-01-03 15:31:34 -08:00
Patrick Walton 11913a20f1 Merge MCAA monochrome and multicolor shaders.
Not only is this a lot simpler, it's faster too!
2018-01-03 15:22:28 -08:00
Patrick Walton 017a2e2f8c Provide brief documentation of each shader 2017-12-30 20:32:51 -05:00
Patrick Walton a81c69c34e Document the blit shaders 2017-12-28 11:46:44 -05:00
Patrick Walton 9515451e7a Remove render tasks entirely. 2017-12-28 11:44:46 -05:00
Patrick Walton 473cb38fb3 Add a few paragraphs of overview documentation 2017-12-23 18:17:33 -05:00
Patrick Walton 0ec5b74851 Start a Cargo workspace and generate documentation for it 2017-12-23 18:01:55 -05:00
Patrick Walton 429e4a3063 Remove clipping support from the SVG demo.
It's overengineering and was broken anyway. WebRender has much better
clipping support; let's centralize the logic in there.
2017-12-22 16:30:24 -08:00
Patrick Walton 934086ace8 Build Rust documentation as part of the demo client build process 2017-12-21 18:01:00 -08:00
Patrick Walton b6236ac835 Use librsvg/Cairo/Pixman to render SVG reference images.
The scale and colors aren't correct yet, but this is a start.
2017-12-21 17:20:01 -08:00
Patrick Walton c2d89aba91 Add support for the even-odd fill rule in the demo.
Closes #59.
2017-12-21 13:53:38 -08:00
Patrick Walton 2deb4fae2a Use binary search to find line intersections to reduce floating point error.
This is probably improvable, but let's do the safe thing for now.

Closes #57.
Closes #58.
2017-12-21 13:22:32 -08:00
Patrick Walton f132117d4c Don't add overlapping points to close paths in the stroking algorithm.
These extra points are unnecessary and can confuse the partitioner,
because they sometimes prevent it from detecting winding numbers
properly. This is a bug in the partitioner and should be fixed, but we
shouldn't be generating these points to begin with.

Partially addresses #57.
2017-12-21 13:22:23 -08:00
Patrick Walton 98250b9232 Close stroke paths as necessary.
Partially addresses #57.
2017-12-21 11:56:12 -08:00
Patrick Walton 84ed1a76b0 Hook the reftest framework up to the SVG renderer 2017-12-20 19:13:07 -08:00
Patrick Walton fc95edda81 Add UI for SVG reference tests, not functional yet 2017-12-20 18:49:44 -08:00
Patrick Walton ec467ba92c Fix `getMeshIndexRange()` logic for the first interior mesh.
This caused the first path to disappear in the SVG demo.

Closes #57.
2017-12-20 14:10:51 -08:00
Patrick Walton 4c2d0cb5ab Use homogeneous coordinates to reduce floating point error when computing the intersection of self-intersecting line segments.
Partially addresses #57.
2017-12-20 13:42:20 -08:00
Patrick Walton f58d3a8512 Add stroke drawing functionality to the mesh debugger.
It's disabled by default, but it can be enabled by editing the code.
2017-12-20 13:41:31 -08:00
Patrick Walton f04f39afd6 Close subpaths explicitly.
Partially addresses #57.
2017-12-20 13:41:01 -08:00
Patrick Walton 6a81ec4893 Make SVG stroke width more accurate, and switch to XCAA by default.
Partially addresses #57.
2017-12-20 10:40:21 -08:00
Patrick Walton 797b935f35 Add Material Design icons to the SVG demo 2017-12-19 19:11:12 -08:00
Patrick Walton 6f41039ba8 Use the Bootstrap style for the rotate slider 2017-12-19 14:56:26 -08:00
Patrick Walton 23482b2af8 Add the logo to the demo.
Logo design courtesy Jay Vining.
2017-12-19 14:51:51 -08:00
Patrick Walton 097e909d07 In multicolor XCAA, cap the slope to a reasonable amount to prevent line segments from shooting way up or down 2017-12-19 13:47:57 -08:00