Commit Graph

1355 Commits

Author SHA1 Message Date
Patrick Walton ae97ccea5a Improve ergonomics of the canvas font interface, and use the right fonts in the
NanoVG demo.
2020-04-01 16:25:13 -07:00
Patrick Walton f823cb9474 Rename `SIL Open Font License.txt` to `LICENSE-SIL` for consistency 2020-04-01 13:24:07 -07:00
Patrick Walton 956b9020e8 Rename `overpass-regular.otf` to `Overpass-Regular.otf` 2020-04-01 13:22:29 -07:00
Patrick Walton cedc5595db Fix `canvas_moire` 2020-04-01 13:03:58 -07:00
Patrick Walton 3d71703950 Stop copying images every frame on CPU.
We can avoid reuploading them to the GPU every frame as well, but this is a
bigger, and easier, win for now.
2020-04-01 13:01:08 -07:00
Patrick Walton bf6890b341 Fix `canvas_minimal` 2020-03-31 20:21:27 -07:00
Patrick Walton 7c5c43b50f Use HiDPI and a larger window size in the NanoVG demo 2020-03-31 20:18:25 -07:00
Patrick Walton e6d8aab974 Don't draw backwards miters. 2020-03-31 19:38:43 -07:00
Patrick Walton 764953a643 Fix counterclockwise arc drawing logic 2020-03-31 17:59:41 -07:00
Patrick Walton bf2fd6569b Fix tests 2020-03-31 17:17:25 -07:00
Patrick Walton 32a56eab85 Stop leaking textures and framebuffers in the OpenGL backend.
Closes #264.

Possibly addresses #286.
2020-03-31 17:14:28 -07:00
Patrick Walton bbcd371efc Show the progress spinners behind thumbnail images in the NanoVG demo 2020-03-31 17:14:06 -07:00
Patrick Walton 2f6071c059 Make solid tiles not use mask 1.
Fixes random garbage appearing in the thumbnails in the NanoVG demo.
2020-03-31 14:16:04 -07:00
Patrick Walton 2db4cfcfed Uncomment round join code in the NanoVG demo now that it doesn't crash 2020-03-31 13:32:23 -07:00
Patrick Walton 40377d657a Prevent taking the square root of a negative number in the half-angle formula 2020-03-31 13:32:23 -07:00
Patrick Walton f142f045aa Detect coincident points and bail out of the line join code as necessary. 2020-03-31 13:31:22 -07:00
Patrick Walton c7ca630aad Search backward for a non-coincident point if the two ending points of a capped
stroke are coincident.

This prevents a divide by zero in normalization.
2020-03-31 13:29:47 -07:00
Patrick Walton 9212c742b7 Avoid taking the square root of a negative number in `arc_from_cos()`. 2020-03-31 13:28:55 -07:00
Patrick Walton df4021e3c5 Limit the number of trips through the round join loop.
This is a safety measure to prevent infinite loops.
2020-03-31 13:27:47 -07:00
Patrick Walton 93f5fbc6d2 Add convenience constructors: `vec2f`, `vec2i`, `Vector2F::zero()`,
`Vector2I::zero()`
2020-03-31 11:29:21 -07:00
Patrick Walton d83f54457c
Merge pull request #290 from s3bk/patch-1
add Contour::clear
2020-03-30 22:01:04 -07:00
Patrick Walton 4af74f225d Add support to canvas for the commonly-used `textBaseline` values 2020-03-30 22:00:13 -07:00
Patrick Walton 9a0fbe1d11 Flesh out the NanoVG demo yet more 2020-03-30 21:33:20 -07:00
Patrick Walton f1d7a0bfa3 Make the gradient construction methods more convenient 2020-03-30 21:32:55 -07:00
Patrick Walton 6d6b5191bb Clean up the `text` module inside `canvas` a bit 2020-03-30 21:32:30 -07:00
Patrick Walton e864536b31 Add a `From` implementation to `FillStyle` and use it in `canvas` for brevity 2020-03-30 21:31:18 -07:00
Patrick Walton f1d5906c9e Switch to my branch of `skribo` for much better `fill_text()` performance 2020-03-30 21:30:14 -07:00
Patrick Walton 7ac822bc2e Cache image hashes. 2020-03-30 16:48:01 -07:00
Patrick Walton cf78ac4569 Fix image pattern texture atlas logic. 2020-03-30 16:19:03 -07:00
Patrick Walton a1f0ae097a Add thumbnail images to the NanoVG demo 2020-03-30 16:18:41 -07:00
Patrick Walton 257067e368 Flesh out the NanoVG example even more 2020-03-28 12:45:23 -07:00
Sebastian cb91f40d7a
add Contour::clear 2020-03-28 19:22:39 +03:00
Patrick Walton ed2807eb84 Flesh out the NanoVG demo some more 2020-03-27 20:53:57 -07:00
Patrick Walton 9723fa441b Update `image`, `glutin`, and `jni` crates.
From #277.
2020-03-27 15:49:26 -07:00
Patrick Walton b6762cecb8 Don't include the closing segment when printing a path as a string.
Closes #279.
Closes #282.
2020-03-27 15:40:27 -07:00
Patrick Walton 6239356d89 Add a `Debug` impl for `Path2D` 2020-03-27 15:05:10 -07:00
Patrick Walton 6eb0232aad Add `precision highp sampler2D` everywhere so our winding numbers don't get clipped
Closes #280.
2020-03-27 14:53:00 -07:00
Patrick Walton 7b53cc6731 Close all subpaths right before filling them.
Closes #269.
2020-03-27 14:50:02 -07:00
Patrick Walton c258616bad Add `Path2D::add_path()` 2020-03-27 12:33:06 -07:00
Patrick Walton 15718d297c Add `Contour::with_capacity()` from #289 2020-03-27 10:06:56 -07:00
Patrick Walton b29ffdf3fa Add missing packed comparisons to the scalar implementation of `I32x2` 2020-03-27 10:04:42 -07:00
Patrick Walton 55df287fec Move radial gradients from the CPU to the GPU 2020-03-26 21:24:20 -07:00
Patrick Walton 0c24619dd0 Add a `clear` method to `Outline` as suggested in #289 2020-03-26 08:34:47 -07:00
Patrick Walton 0c93045f50 Replace the individual tile shaders with an ubershader 2020-03-25 21:59:51 -07:00
Patrick Walton 51277a2027
Merge pull request #288 from kyythane/master
Add derive(Clone) to no text font context
2020-03-25 16:58:04 -07:00
Lillian Primrose 22d54a82ca
CanvasFontContext now implements .clone() 2020-03-24 22:15:09 -04:00
Patrick Walton 0f5de612f9
Merge pull request #281 from zimond/master
Use instant crate to build for wasm32 target
2020-03-09 17:17:09 -07:00
Patrick Walton 0b0c45a49a Collapse linear gradients down to a single 256x1 sliver instead of a 256x256
square
2020-03-05 16:58:26 -08:00
Patrick Walton 2548ab853a Unify solid tiles and render target tiles.
This commit also removes old shaders from the manifest.
2020-03-05 12:22:01 -08:00
Patrick Walton 9935c9fdff Don't distinguish between render targets and other images in the texture atlas
allocator
2020-03-04 19:41:24 -08:00
Patrick Walton a8f7438cd9 Remove transforms from paths.
Paints aren't scale-invariant when rendered into the texture atlas, so they
actually do need individual transforms.
2020-03-04 16:28:21 -08:00
Patrick Walton 27357a23d3 Separate the `AddPaintData` render command into different subcommands 2020-03-04 15:50:53 -08:00
Patrick Walton e50039f4c2 Create framebuffers for every texture page 2020-03-04 12:35:07 -08:00
Patrick Walton a3736859ba Rename "paint texture" to just "texture page" 2020-03-04 12:09:08 -08:00
乌戈 22f9c3bf6e Use instant crate to build for wasm32 target 2020-03-05 01:54:36 +08:00
Patrick Walton d0f4579864 Move `RenderTargetId` out of the `pattern` module 2020-03-03 15:50:48 -08:00
Patrick Walton 2beb2bb126 Apply path transforms to paints 2020-03-03 14:26:38 -08:00
Patrick Walton 12574101e5 Add a transform field to `DrawPath`.
This is currently applied to the outline and should eventually be applied to
paints as well.
2020-03-03 11:18:01 -08:00
Patrick Walton afd1585d5d
Merge pull request #278 from inferiorhumanorgans/iho/pub-outline
Make Path2D#into_outline public
2020-03-03 11:00:00 -08:00
Patrick Walton 468848086a Use the paint texture uniform belonging to the appropriate program 2020-03-03 10:56:32 -08:00
Patrick Walton f607b607b0 Composite render targets using tiles, taking the Z-buffer into account.
We can do more tile-based optimization, but this should be enough to ensure a
correct rendering.

This temporarily breaks subpixel AA, but it should be fixable by modifying
`blur.fs.glsl`.

Closes #271.
2020-03-02 20:10:10 -08:00
Alex Zepeda c8496a1cb2 Make Path2D#into_outline public 2020-03-02 00:14:24 -08: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
Patrick Walton ee6c7e0797 Explicitly cast `aTessCoord` to `vec2` for WebGL compatibility 2020-02-28 12:49:21 -08:00
Sebastian K e2fbde820d Implement a WebGL backend
Signed-off-by: Patrick Walton <pcwalton@mimiga.net>
2020-02-28 10:41:35 -08:00
Patrick Walton c59b347c62 Mention CoC in the community section 2020-02-28 10:07:27 -08:00
Patrick Walton fa2cb9b6e0 Update README to mention chat room 2020-02-28 10:05:39 -08:00
Patrick Walton d2ae183ed6 Update README 2020-02-28 09:46:42 -08:00
Patrick Walton b4681dcf8f Add a PNG version of the logo 2020-02-28 09:44:09 -08:00
Patrick Walton 40bb1b412c Implement radial gradients along a line, following Pixman. 2020-02-27 16:24:10 -08:00
Patrick Walton 59783ad457
Merge pull request #272 from adamnemecek/master
trimmed whitespace
2020-02-27 09:04:21 -08:00
Adam Nemecek 3d39c5e9b7 trimmed whitespace 2020-02-27 08:13:14 -08:00
Patrick Walton 060241e4d0 Fix Metal backend 2020-02-27 04:07:09 -08:00
Patrick Walton e913f83eee Remove obsolete TODOs 2020-02-27 04:03:08 -08:00
Patrick Walton b998449885 Remove unused #define 2020-02-26 18:46:48 -08:00
Patrick Walton 3a014d78eb Implement a blur filter for canvas shadows 2020-02-26 18:43:41 -08:00
Patrick Walton d1c7da8bd2 Implement pattern repeating and image smoothing control 2020-02-26 14:56:05 -08:00
Patrick Walton 77b3555828 Separate opacity out from paint.
This allows `globalAlpha` to work on render targets.
2020-02-26 12:43:07 -08:00
Patrick Walton 1deb53fa9c Implement the remaining Porter-Duff compositing operators 2020-02-25 18:37:23 -08:00
Patrick Walton e7de50eb67 Fix sub-Z-buffer indexing error with render targets 2020-02-25 18:36:46 -08:00
Patrick Walton 0a3f64eb44 Implement the difference and exclusion blend modes 2020-02-25 14:55:58 -08:00
Patrick Walton a8e33d3d3d Add the soft light blend mode 2020-02-25 14:39:06 -08:00
Patrick Walton 9b4217300f Implement the source-in, destination-in, source-out, and destination-atop blend
modes to round out the assortment of Porter-Duff blend modes
2020-02-25 12:52:11 -08:00
Patrick Walton 02012431ca Implement color dodge and color burn blend modes 2020-02-25 11:37:42 -08:00
Patrick Walton 5b228ed825 Implement multiply, screen, hard light, and overlay blend modes. 2020-02-24 21:23:17 -08:00
Patrick Walton 149efeb672 Fix `is_fully_transparent()` for colors.
Oops!
2020-02-24 21:22:36 -08:00
Patrick Walton 99d980c0c7 Fix batch breaking logic for blend modes 2020-02-24 21:22:15 -08:00
Patrick Walton 00b7a2ee5a Factor out 3-element selection into a `select3()` function 2020-02-24 21:21:30 -08:00
Patrick Walton c96cb62f47 Factor out common functions used in tile alpha shaders 2020-02-24 19:42:32 -08:00
Patrick Walton 5421525eaa Implement the HSL filters (called "non-separable blend modes" in the spec).
These cannot be implemented with the standard OpenGL blending functions, so we
have to do them manually in a shader, which requires a good deal of machinery
to create intermediate framebuffers and so forth.
2020-02-24 15:37:44 -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 3245796445 Add support for multiple paint texture pages.
This avoids arbitrary limits on the number of images, gradients, etc. you can
have.
2020-02-21 14:46:10 -08:00
Patrick Walton 0b102ec97d Fix compile error in `convert` utility 2020-02-20 22:23:38 -08:00
Patrick Walton 36538d5748 Implement a few more blend modes and switch to premultiplied alpha for layer
compositing
2020-02-20 22:22:15 -08:00
Patrick Walton 4933efb513 Add Lighten and Darken composite ops 2020-02-20 20:38:43 -08:00
Patrick Walton ab55b9509b Fix handling of solid tiles with the Clear blend mode 2020-02-20 18:15:20 -08:00
Patrick Walton 6acd2d91f7 Implement `clear_rect()` in the canvas front-end by introducing the concept of
per-path blend modes.

These should be useful for some canvas composite operations as well.
2020-02-20 15:52:40 -08:00
Patrick Walton 0c3dad974f Expose individual blend factors in `pathfinder_gpu` 2020-02-20 15:28:37 -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