Patrick Walton
895f73096e
Switch back to instanced drawing for tiles.
...
Improves tile build time by something around 2x in the NanoVG demo.
2020-04-08 17:16:54 -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
55df287fec
Move radial gradients from the CPU to the GPU
2020-03-26 21:24:20 -07:00
Patrick Walton
0c93045f50
Replace the individual tile shaders with an ubershader
2020-03-25 21:59:51 -07: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
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
Patrick Walton
ee6c7e0797
Explicitly cast `aTessCoord` to `vec2` for WebGL compatibility
2020-02-28 12:49:21 -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
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
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
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
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
16a2de88df
Rename "postprocessing" to "effects" and start initial work on composite ops
2020-02-20 14:22:07 -08:00
Patrick Walton
3ad1c25796
Implement the even-odd fill rule
2020-02-17 14:44:48 -08:00
Patrick Walton
677c607a8c
Get clips working for canvas
2020-02-16 13:45:15 -08:00
Patrick Walton
a8019a1a1a
Fix mask positioning on OpenGL
2020-02-15 18:00:25 -08:00
Patrick Walton
631e16ce9b
Fix flipped Y axis in mask texture positioning
2020-02-15 14:08:22 -08:00
Patrick Walton
6e28552a44
Add missing shaders
2020-02-14 22:10:04 -08:00
Patrick Walton
0883f54e2d
Add a separate mask blit step, in preparation for supporting clips.
...
We can elide this in the future if there are no clips, but it isn't a huge
performance regression right now, so let's just unconditionally do it.
2020-02-14 21:56:43 -08:00
Patrick Walton
5a21557a6d
Implement basic linear gradients.
...
This is not a very efficient implementation yet, but it seems to work.
2020-02-10 16:01:05 -08:00
Patrick Walton
a66ed4c073
Specify tile texture coordinates as an affine transform.
...
Part of the groundwork for gradients.
2020-02-05 13:59:32 -08:00
Patrick Walton
b269723254
Switch to per-pixel texture lookup for paints.
...
This is a prerequisite for supporting gradients and images.
2020-02-04 21:50:13 -08:00
Patrick Walton
222fa89b23
Use a 3D transform in the tile vertex shaders.
...
This opens the door to caching tiles at different zoom levels (issue #191 ).
2019-06-25 11:32:39 -07:00
Patrick Walton
d86ff9011a
Update the postprocessing shader and vertex array for the Metal changes.
...
Closes #201 .
2019-06-21 18:04:18 -07:00
Patrick Walton
de0662e08e
Update `spirv-cross` to upstream master.
...
A fix has been merged for the issue that was breaking Pathfinder, so we can now
use the master branch.
2019-06-21 07:24:24 -07:00
Patrick Walton
487577a11b
Add Metal support.
...
This commit substantially reworks the `pathfinder_gpu` API to better support
modern APIs like Metal. It should open the door to `gfx-rs`, `wgpu`, Vulkan,
and D3D12 backends relatively straightforwardly.
A new example, `canvas_metal_minimal`, has been added.
Note that the new Metal shaders require a patched version of `spirv-cross` to
build properly. An upstream patch is forthcoming.
2019-06-20 11:47:22 -07:00
Patrick Walton
9f9233c153
Add Metal shaders, cross-compiled from the GLSL via SPIR-V.
...
The Metal shaders are checked into the repository for convenience, but they
should not be directly edited. Instead, edit the corresponding GLSL shader in
the top-level `shaders/` directory, and rerun `make` in there.
2019-06-05 18:29:25 -07:00