123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- #version 310 es
- // SPDX-License-Identifier: Unlicense OR MIT
- #extension GL_GOOGLE_include_directive : enable
- precision highp float;
- #include "common.h"
- layout(push_constant) uniform Block {
- vec4 transform;
- vec2 pathOffset;
- } _block;
- layout(location=0) in float corner;
- layout(location=1) in float maxy;
- layout(location=2) in vec2 from;
- layout(location=3) in vec2 ctrl;
- layout(location=4) in vec2 to;
- layout(location=0) out vec2 vFrom;
- layout(location=1) out vec2 vCtrl;
- layout(location=2) out vec2 vTo;
- void main() {
- // Add a one pixel overlap so curve quads cover their
- // entire curves. Could use conservative rasterization
- // if available.
- vec2 from = from + _block.pathOffset;
- vec2 ctrl = ctrl + _block.pathOffset;
- vec2 to = to + _block.pathOffset;
- float maxy = maxy + _block.pathOffset.y;
- vec2 pos;
- float c = corner;
- if (c >= 0.375) {
- // North.
- c -= 0.5;
- pos.y = maxy + 1.0;
- } else {
- // South.
- pos.y = min(min(from.y, ctrl.y), to.y) - 1.0;
- }
- if (c >= 0.125) {
- // East.
- pos.x = max(max(from.x, ctrl.x), to.x)+1.0;
- } else {
- // West.
- pos.x = min(min(from.x, ctrl.x), to.x)-1.0;
- }
- vFrom = from-pos;
- vCtrl = ctrl-pos;
- vTo = to-pos;
- pos = pos*_block.transform.xy + _block.transform.zw;
- gl_Position = vec4(transform3x2(fboTransform, vec3(pos, 0)), 1);
- }
|