Commit Graph

1099 Commits

Author SHA1 Message Date
Patrick Walton fc2ac12fc0 Optimize the XCAA fragment shaders a bit 2017-11-10 19:25:47 -08:00
Patrick Walton c9948a844d Render reference images on the server, untested as of yet 2017-11-10 17:04:59 -08:00
Patrick Walton 75474b19e6 Add the normal angle to the shaders used in the 3D demo 2017-11-10 15:03:43 -08:00
Patrick Walton 932fc64524 Stub an integration test page 2017-11-10 13:58:07 -08:00
Patrick Walton 2f7205bd22 Improve the stem darkening vertical extents preservation hack 2017-11-10 08:40:31 -08:00
Patrick Walton a73fb9ab8d Try to align glyphs on their baselines after stem darkening 2017-11-10 08:16:27 -08:00
Patrick Walton f2d5ced933 Describe how to adjust the JSON size limit when running the server.
Closes #41.
2017-11-09 18:55:41 -08:00
Patrick Walton 3bcd05a5ed Update the XCAA multi direct shaders to support normals.
Fixes XCAA in the SVG demo.
2017-11-09 16:42:53 -08:00
Patrick Walton 8e7eb6ca60 Support stem darkening in SSAA mode.
The normals are incorrect right now in some cases, but it looks OK-ish.
2017-11-09 16:20:15 -08:00
Patrick Walton 35e59b1a05 Fix MCAA in the text demo.
The B-quad ranges were not being expanded properly.
2017-11-08 20:58:22 -08:00
Patrick Walton 9a5728aab6 Implement clipping in XCAA mode 2017-11-08 16:45:30 -08:00
Patrick Walton 941223c7d4 Update the README a bit 2017-11-07 17:42:42 -08:00
Patrick Walton 997e9b852a Round x-heights naturally instead of rounding up.
I think this matches what macOS does.
2017-11-07 17:39:29 -08:00
Patrick Walton e5b76726d9 Use the LUT to gamma correct text, and fix stem darkening math 2017-11-07 17:24:19 -08:00
Patrick Walton 82fd214a76 Load the gamma LUT in the demo 2017-11-07 14:13:13 -08:00
Patrick Walton 0a5f4c65df Add a prebuilt gamma LUT 2017-11-07 11:56:04 -08:00
Patrick Walton 556bb2ce84 Add `gamma_lut` from WebRender 2017-11-06 20:41:13 -08:00
Patrick Walton 8897145f54 Add a simple command-line frontend for use as part of a build process 2017-11-06 13:28:32 -08:00
Patrick Walton 8a1e3bc8b2 Add some basic Phong shading to the monument 2017-11-03 18:49:25 -07:00
Patrick Walton 1e446f816f Add basic clip path support when rendering with SSAA 2017-11-03 14:29:31 -07:00
Patrick Walton 4cbc2a8800 Add partial support for clip paths in the SVG demo.
At the moment, this only works when antialiasing is off.
2017-11-03 14:14:29 -07:00
Patrick Walton 511e5956d8 Don't clear away the scenery after drawing it!
Fixes the 3D view.
2017-11-02 16:17:35 -07:00
Patrick Walton 572b7cdd4a Encode path IDs using a sparse representation, not a dense one.
This reduces the size of serialized mesh libraries. It also makes it
much easier to expand meshes and select individual paths for rendering.
2017-11-02 16:08:31 -07:00
Patrick Walton c767141169 Build render tasks for clips.
This doesn't actually clip anything yet, but it's a step in that direction.
2017-10-31 17:04:06 -07:00
Patrick Walton b9f6f13cec Stop going to the DOM every time we need the color of an SVG path 2017-10-31 14:50:15 -07:00
Patrick Walton 579528ebdc Remove one direct rendering pass from the multicolor XCAA path 2017-10-31 12:41:38 -07:00
Patrick Walton d65bfb7fb2 Show compositing time in the SVG demo 2017-10-31 12:35:24 -07:00
Patrick Walton dc6bdda7ff Implement basic native FreeType glyph rendering, untested as of yet 2017-10-31 11:26:14 -07:00
Patrick Walton ce91d0490a
Merge pull request #46 from mbebenita/watch
Automatically rebuild in the background.
2017-10-30 18:07:56 -07:00
Michael Bebenita 2e3451d9da Automatically rebuild in the background. 2017-10-30 16:24:12 -07:00
Patrick Walton a6582aefb3
Merge pull request #45 from mbebenita/toggle
Mesh Debugger Improvements
2017-10-30 15:31:36 -07:00
Patrick Walton 2717ac12cc
Merge pull request #44 from mbebenita/zoom
Cursor fixes.
2017-10-30 15:31:27 -07:00
Patrick Walton 2604151521 Replace the multicolor (SVG) XCAA with a multipass compositing algorithm 2017-10-30 15:28:35 -07:00
Michael Bebenita 55f964001b Toggle layers in mesh debugger.
Also, stroke and fill vertices after drawing lines.
2017-10-29 16:25:50 -07:00
Michael Bebenita 45755816c8 Draw segment hull. 2017-10-29 15:13:55 -07:00
Michael Bebenita a7056460d0 Fix cursor icon in Chrome. 2017-10-29 14:46:33 -07:00
Michael Bebenita 6fbfa60f68 Fix grabbing cursor on mesh debugger. 2017-10-29 14:46:21 -07:00
Patrick Walton b87d4126b0
Merge pull request #42 from Bobo1239/master
Make tests compile again (but not pass)
2017-10-27 23:26:27 -07:00
Boris-Chengbiao Zhou 90144e6755 Make tests compile again (but not pass) 2017-10-28 04:16:54 +02:00
Patrick Walton bf3779bf89 Calculate normals for B-vertices.
I'm planning to use this for fixing hairlines in XCAA.
2017-10-27 15:12:33 -07:00
Patrick Walton e4b531f3a0 Do some work on shader documentation 2017-10-26 20:30:47 -07:00
Patrick Walton 0506365cc7 Fix blending in the text demo.
As a nice added cleanup, this commit standardizes on the red channel for
all monochrome textures.
2017-10-26 20:15:51 -07:00
Patrick Walton 77fa297380 Change the animated zoom icon to a play icon 2017-10-26 18:15:28 -07:00
Patrick Walton 591e6b780c Merge pull request #40 from mbebenita/pulse
Zoom Pulse Mode
2017-10-26 17:57:33 -07:00
Patrick Walton 775ee2b526 Add basic native rasterization for Core Graphics and match the WebRender
`FontContext` API more
2017-10-26 17:55:17 -07:00
Michael Bebenita 70390915ab Add Pulse Zoom button. 2017-10-26 11:32:30 -07:00
Patrick Walton f8c950d39a Stop calling `getParameter` and `getBufferParameter`.
They're incredibly slow in Chrome.
2017-10-25 19:38:41 -07:00
Patrick Walton 77f135a4ba Fix memory safety problem resulting in missing glyphs on macOS 2017-10-25 17:02:57 -07:00
Patrick Walton 0b179f3a40 Add preliminary DirectWrite support on Windows.
This will eventually need to call into GDI to do hinting, but it's good
enough for now.
2017-10-25 13:01:36 -07:00
Patrick Walton 1c693d5029 Approximate cubic curves with quadratics in the Core Graphics backend 2017-10-23 20:28:45 -07:00
Patrick Walton 0a4fcb4841 Add a cubic curve command stream.
This is a prerequisite for handling CFF fonts.
2017-10-23 20:05:36 -07:00
Patrick Walton 2b5dea3263 Merge pull request #37 from Bobo1239/master
Fix compilation on non-macos
2017-10-21 09:13:02 -07:00
Boris-Chengbiao Zhou ebfe5d0dbd Fix compilation on non-macos 2017-10-21 15:07:51 +02:00
Patrick Walton 9d93cebca6 Stop using multiple render targets.
We don't need them anymore, so let's lower our hardware requirements!
2017-10-20 22:04:53 -07:00
Patrick Walton 048c261f6c Add a working experimental implementation of XCAA for SVG.
This has known performance problems and artefacts due to working at
sample level only, but it's a decent first cut.
2017-10-20 19:41:18 -07:00
Patrick Walton 9c470e77c1 Make macOS font rendering not depend on FreeType 2017-10-20 12:10:57 -07:00
Patrick Walton a523d71e3c Stop leaking buffer textures 2017-10-18 19:47:44 -07:00
Patrick Walton 03b4ec2cc6 Stop leaking VAOs 2017-10-18 19:16:56 -07:00
Patrick Walton 70201bb29c Draw distant glyphs as prerendered images in the 3D demo.
This has known performance problems, but it's a good first cut.
2017-10-18 16:19:19 -07:00
Patrick Walton 024b00e479 Decouple text renderers from the text demo's layout 2017-10-17 13:37:36 -07:00
Patrick Walton d66bff9768 Remove useless null check 2017-10-17 12:11:49 -07:00
Patrick Walton 32de1d3441 Decouple text renderers from HTML canvas elements.
This allows for offscreen rendering of text.
2017-10-17 12:10:20 -07:00
Patrick Walton 562851fd6e Lint against long lines 2017-10-17 11:58:03 -07:00
Patrick Walton 9278a4e0e3 Move the text rendering and atlas code out of the text demo so that it
can be reused elsewhere
2017-10-17 11:54:13 -07:00
Patrick Walton 03ee672787 Separate the GPU rendering component of views from the view objects
themselves in the demo.

This (mostly) enables rendering outside a view.
2017-10-16 22:26:25 -07:00
Patrick Walton 976b924842 Decouple mesh-specific data from GL-context-wide data in the demo 2017-10-16 16:48:02 -07:00
Patrick Walton 81787f4750 Remove `MonochromeDemoView` 2017-10-16 16:11:00 -07:00
Patrick Walton 7a0ade99e2 Support subpixel AA in the benchmark 2017-10-16 16:08:05 -07:00
Patrick Walton 30356400fd Merge pull request #35 from Bobo1239/master
Fix demo client compilation on Windows
2017-10-16 15:04:00 -07:00
Patrick Walton cc16158a91 Decouple antialiasing strategies from views in the demo 2017-10-16 13:36:22 -07:00
Patrick Walton d8713f214c Use the Rust benchmarking algorithm for less noisy results 2017-10-15 14:37:44 -07:00
Boris-Chengbiao Zhou dec99769f1 Fix demo client compilation on Windows 2017-10-15 23:23:09 +02:00
Patrick Walton 314185684c Implement stem darkening and split ECAA into ECAA and MCAA.
We now implement stem darkening (also known as font dilation) like
macOS and FreeType under certain configurations. This pushes out font
outlines along their normals slightly in order to make small text easier
to read. This is especially important when performing gamma correction,
as otherwise text can end up too light.

Because the stem darkening is implemented in the vertex shader, it can
easily break the mesh. Therefore, I needed to implement a new rendering
mode that does not use the mesh. It's a variant of ECAA, and for
clarity's sake I've renamed the related antialiasing methods:

* MCAA stands for "mesh coverage antialiasing" and is the new name for
what was called "ECAA" prior to this patch.

* ECAA now stands for "edge coverage antialiasing". It does not use the
mesh but rather computes winding numbers from scratch for every pixel.
Surprisingly, despite being worse asymptotically, this usually ends up
being faster than MCAA at small font sizes, presumably because there are
fewer vertices to transform.

* XCAA, "exact coverage antialiasing" is a generic term that refers to
both ECAA and MCAA. References to ECAA have been changed to XCAA as
needed.
2017-10-15 13:28:49 -07:00
Patrick Walton 3352f869f0 Remove Pathfinder 1 now that Pathfinder 2 supports all its features and
more
2017-10-06 20:03:59 -07:00
Patrick Walton c8284e18b2 Mention advanced font rendering features 2017-10-06 20:03:18 -07:00
Patrick Walton c2368bb71e Rewrite the README.
Closes #26.
2017-10-06 19:55:28 -07:00
Patrick Walton 1846ebd861 Use sRGB color textures where available 2017-10-06 19:18:34 -07:00
Patrick Walton 2a236319d4 Use regular VBOs instead of textures to store vertex positions for ECAA.
This improves performance at small font sizes a bit by reducing vertex
shading load.
2017-10-06 16:42:51 -07:00
Patrick Walton 6a7c013e61 Make the hints a uniform instead of a buffer texture.
Saves a good bit of memory traffic during vertex shading.
2017-10-05 19:14:52 -07:00
Patrick Walton 28837f72a6 Fetch and transform fewer vertices in the ECAA cover shader 2017-10-05 13:30:32 -07:00
Patrick Walton d4c7fa74bd Add a feature to save benchmark data as CSV 2017-10-05 11:46:53 -07:00
Patrick Walton b6a60ef987 Make FreeType no longer a dependency of `path-utils` 2017-10-04 19:03:38 -07:00
Patrick Walton 8de1970682 Implement stroking ourselves, and rename `PathSegment` to `PathCommand`.
This makes Pathfinder no longer use the FreeType stroker.
2017-10-04 18:57:30 -07:00
Patrick Walton 22d0eb7b24 Fix file headers in shaders/ 2017-10-03 15:32:03 -07:00
Patrick Walton 157292175b Use instanced rendering in the 3D demo.
This massively decreases the load time and memory usage in exchange for more draw calls.
2017-10-03 15:24:56 -07:00
Patrick Walton b631fec80f Cache font mesh libraries on the server 2017-10-02 19:58:38 -07:00
Patrick Walton 7bbd02ed85 Send mesh libraries to the client in raw binary instead of Base64 and JSON 2017-10-02 16:31:54 -07:00
Patrick Walton 0bbcf8f1a0 Stop sending path index ranges to the demo client.
They're unused.
2017-10-02 15:50:34 -07:00
Patrick Walton fed528025d Stop sending glyph metadata to the demo client.
It's unused.
2017-10-02 15:45:56 -07:00
Patrick Walton 092b46e056 Reenable early Z optimizations 2017-10-02 15:36:39 -07:00
Patrick Walton f3f893302a Introduce a simple file format for serializing meshes, and use it in the demo 2017-10-02 15:17:21 -07:00
Patrick Walton 475f5dca71 Introduce a new mesh library abstraction for holding meshes.
Simplifies the server code and allows avoiding copying indices all the time.

Closes #29.
2017-10-02 14:03:56 -07:00
Patrick Walton 8c6110a388 Remove the duplicated de Casteljau subdivision code in
`partitioner::geometry`
2017-10-02 11:45:34 -07:00
Patrick Walton 705274997d Remove the now-obsolete path legalizer 2017-10-02 11:40:11 -07:00
Patrick Walton 60ff71be84 Add an experimental implementation of macOS-like font dilation
Following Apple's earlier terminology, this is exposed as "strong"
subpixel AA.
2017-09-29 22:12:24 -07:00
Patrick Walton 99f6f2a104 Snap stems up to the nearest pixel when hinting 2017-09-29 18:02:33 -07:00
Patrick Walton 190c9fb35f Tweak the maximum and minimum zoom parameters for the text demo 2017-09-29 17:00:34 -07:00
Patrick Walton e78d7ed575 Recursively approximate cubic Béziers with quadratics to an error bound.
Gets the tiger rendering properly, as far as I can tell.
2017-09-29 16:30:17 -07:00
Patrick Walton 613bc7c29d Don't start subdividing active edges until we're sure an entire B-quad
will be emitted.

Otherwise it messes up the parity.

Fixes the bottom curve of the lowercase "p" in Open Sans when rendered
with Loop-Blinn.
2017-09-29 13:25:19 -07:00
Patrick Walton 08b9afdca9 Implement subpixel glyph positioning in the text demo 2017-09-29 11:58:16 -07:00