From 18e0a06df83137af4f129dd75771bf0a33084217 Mon Sep 17 00:00:00 2001 From: Patrick Walton Date: Tue, 26 Feb 2019 15:24:25 -0800 Subject: [PATCH] Update the README for Pathfinder 3 --- README.md | 78 +++++++++++++++++++++++++------------------------------ 1 file changed, 35 insertions(+), 43 deletions(-) diff --git a/README.md b/README.md index 37d5c6c0..44f9289b 100644 --- a/README.md +++ b/README.md @@ -1,69 +1,61 @@ -# Pathfinder 2 +# Pathfinder 3 -Pathfinder 2 is a fast, practical, work in progress GPU-based rasterizer for fonts and vector -graphics using OpenGL and OpenGL ES 2.0+. +Pathfinder 3 is a fast, practical, GPU-based rasterizer for fonts and vector graphics using OpenGL +and OpenGL ES 3.0+. Please note that Pathfinder is under heavy development and is incomplete in various areas. The project features: -* Low setup time. Typical glyph outlines can be prepared for GPU rendering in about 5 microseconds - each (typically O(n log n) in the number of vertices), making Pathfinder suitable for dynamic - environments. The setup process is lossless and fully resolution independent; paths need only be - prepared once and can thereafter be rendered at any zoom level without any loss in quality. - Pathfinder can also render outlines without any mesh at all, reducing the setup time to nearly - zero, at the cost of some runtime performance. For static paths such as game assets, the - resulting meshes can be saved to disk to avoid having to generate them at runtime. - * High quality antialiasing. Pathfinder can compute exact fractional trapezoidal area coverage on a - per-pixel basis for the highest-quality antialiasing, provided that either OpenGL 3.0+ or a few - common extensions are available. Supersampling is available as an alternative for 3D scenes - and/or lower-end hardware. + per-pixel basis for the highest-quality antialiasing possible (effectively 256xAA). -* Fast rendering, even at small pixel sizes. Even on lower-end GPUs, Pathfinder typically matches - or exceeds the performance of the best CPU rasterizers. The difference is particularly pronouced - at large sizes, where Pathfinder regularly achieves multi-factor speedups. All shaders have no - loops and minimal branching. +* Fast CPU setup, making full use of parallelism. Pathfinder 3 uses the Rayon library to quickly + perform a CPU tiling prepass to prepare vector scenes for the GPU. This prepass can be pipelined + with the GPU to hide its latency. + +* Fast GPU rendering, even at small pixel sizes. Even on lower-end GPUs, Pathfinder typically + matches or exceeds the performance of the best CPU rasterizers. The difference is particularly + pronouced at large sizes, where Pathfinder regularly achieves multi-factor speedups. All shaders + have no loops and minimal branching. * Advanced font rendering. Pathfinder can render fonts with slight hinting and can perform subpixel antialiasing on LCD screens. It can do stem darkening/font dilation like macOS and FreeType in order to make text easier to read at small sizes. The library also has support for gamma correction. -* Support for full vector scenes. Pathfinder 2 is designed to efficiently handle workloads that - consist of many overlapping vector paths, such as those commonly found in SVG and PDF files. It - makes heavy use of the hardware Z buffer to perform occlusion culling, which often results in - dramatic performance wins over typical software renderers that use the painter's algorithm. +* Support for SVG. Pathfinder 3 is designed to efficiently handle workloads that consist of many + overlapping vector paths, such as those commonly found in SVG and PDF files. It can perform + occlusion culling, which often results in dramatic performance wins over typical software + renderers that use the painter's algorithm. A simple loader that leverages the `resvg` library + to render a subset of SVG is included, so it's easy to get started. -* 3D capability. Pathfinder 2 can render fonts and vector paths in 3D environments. Vector meshes - are rendered just like any other mesh, with a simple shader applied. +* 3D capability. Pathfinder can render fonts and vector paths in 3D environments without any loss + in quality. This is intended to be useful for vector-graphics-based user interfaces in VR, for + example. + +* Lightweight. Unlike large vector graphics packages that mix and match many different algorithms, + Pathfinder 3 uses a single, simple technique. It consists of a set of modular crates, so + applications can pick and choose only the components that are necessary to minimize dependencies. * Portability to most GPUs manufactured in the last decade, including integrated and mobile GPUs. Geometry, tessellation, and compute shader functionality is not required. ## Building -Pathfinder 2 is a set of modular packages, allowing you to choose which parts of the library you -need. A WebGL demo is included, so you can try Pathfinder right in your browser. (Please note that, -like the rest of Pathfinder, it's under heavy development and has known bugs.) +Pathfinder 3 is a set of modular packages, allowing you to choose which parts of the library you +need. An SVG rendering demo, written in Rust, is included, so you can try Pathfinder out right +away. It also provides an example of how to use the library. (Note that, like the rest of +Pathfinder, the demo is under heavy development and has known bugs.) -To run the demo, make sure [Node.js](https://nodejs.org/en/), [nightly Rust](https://doc.rust-lang.org/1.5.0/book/nightly-rust.html) and [CMake](https://cmake.org/install/) are installed, then run the following commands: +Running the demo is as simple as: - $ cd demo/client - $ npm install - $ npm run build - $ cd ../server - $ cargo run --release + $ cd demo/native + $ RUSTFLAGS="-C target-cpu=native" cargo run --release -Then navigate to http://localhost:8000/. - -## Testing - -Pathfinder contains reference tests that compare its output to that of other rendering libraries, -such as Cairo. To run them, install Cairo and FreeType if necessary, then perform the above steps, -substituting the last line with: - - $ cargo run --release --features reftests +On macOS, it is recommended that you force the use of the integrated GPU, as issues with Apple's +OpenGL drivers may limit performance on discrete GPUs. You can use +[gfxCardStatus.app](https://gfx.io/) for this. ## Authors @@ -72,7 +64,7 @@ community. The logo was designed by Jay Vining. -Pathfinder abides by the same Code of Conduct as Rust itself. +Contributors to Pathfinder are expected to abide by the same Code of Conduct as Rust itself. ## License