regl-shape
Version:
2D shape shader for regl
79 lines (78 loc) • 2.57 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.createShaders = void 0;
const __1 = require("..");
const rect_shader_1 = require("./rect-shader");
const miter_shader_1 = require("./miter-shader");
const fill_shader_1 = require("./fill-shader");
function createBaseOptions(regl) {
return {
primitive: "triangle strip",
instances: (_, p) => p.count,
count: 4,
offset: 0,
uniforms: {
miterMode: (_, prop) => (prop.join === __1.JoinStyle.Round ? 2 : 1),
miterLimit: (_, p) => p.miterLimit,
scale: (_, p) => p.scale,
scaleFract: (_, p) => p.scaleFract,
translateFract: (_, p) => p.translateFract,
translate: (_, p) => p.translate,
thickness: (_, p) => p.thickness,
dashPattern: (_, p) => p.dashTexture,
opacity: (_, p) => p.opacity,
pixelRatio: (ctx) => ctx.pixelRatio,
dashSize: (_, p) => p.dashLength,
viewport: ({ viewportWidth, viewportHeight }, { viewport: { x, y } }) => [
x || 0,
y || 0,
viewportWidth,
viewportHeight,
],
depth: (_, p) => p.depth,
},
blend: {
enable: true,
color: [0, 0, 0, 0],
equation: {
rgb: "add",
alpha: "add",
},
func: {
srcRGB: "src alpha",
dstRGB: "one minus src alpha",
srcAlpha: "one minus dst alpha",
dstAlpha: "one",
},
},
depth: (_, p) => ({
enable: !p.overlay,
}),
stencil: { enable: false },
scissor: {
enable: true,
box: (_, p) => p.viewport,
},
viewport: (_, p) => p.viewport,
};
}
function createShaders(regl) {
const offsetBuffer = regl.buffer({
usage: "static",
type: "float",
data: [0, 1, 0, 0, 1, 1, 1, 0],
});
const baseOptions = createBaseOptions(regl);
const rect = rect_shader_1.createRectShader(regl, offsetBuffer, baseOptions);
let miter = null;
try {
miter = miter_shader_1.createMiterShader(regl, offsetBuffer, baseOptions);
}
catch (_a) {
miter = rect;
console.log("No support for miter lines.");
}
const fill = fill_shader_1.createFillShader(regl, baseOptions);
return { rect, miter, fill };
}
exports.createShaders = createShaders;