/** * 合批 shader 的效果插槽:每个效果是一个独立模块,声明自己的 GLSL 片段与 * uniform,编译时组装进共享 uber-shader —— 特性代码不再散落在核心模板里, * 新增同类效果(虚线 / 渐变描边 / 选中脉冲…)只需注册一个新效果对象。 * * 核心向片段提供的通用通道: * - `vec4 color`(可读写,预乘 alpha) * - `vec2 vUv`(纯色描边下 u = 路径像素弧长、v = 横向 0..1,见 CanvasContext) * - `float vFlags`(aTextureParams.y 字节:bit0 = clipOutsideUv 为核心保留, * bit1+ 归效果使用,由 {@link Batchable2D.effectFlags} 写入) * - `float vParam`(aTextureParams.w 字节:效果自定义标量, * 由 {@link Batchable2D.effectParam} 写入,0 = 关闭) * - `float uTime`(秒,核心时钟)+ 效果自声明的 uniform * (宿主经 `batch2D.effectUniforms` 覆盖默认值) * * 运行成本:标志/参数是 per-primitive 常量,warp 内分支不发散,未启用的 * 元素只付几条标量比较。 */ export interface Batch2DEffect { /** 唯一名;重复注册按名替换。 */ name: string; /** ES300 片段,注入 main() 内(clip 之后、输出之前)。 */ fragment?: string; /** ES100(WebGL1,无导数函数)降级片段;缺省则该效果在 GL1 下关闭。 */ fragmentGl1?: string; /** 片段所需的 uniform 声明,如 `uniform vec3 uFlowColor;`。 */ uniformDecls?: string; /** uniform 默认值;宿主可经 `batch2D.effectUniforms` 逐帧覆盖。 */ uniformDefaults?: Record; /** * flow 描边的 vUv.x 归一化到「每条线 0..1」(除以整条线总弧长)而非默认的 * 路径像素弧长。归一化在批打包阶段按当前激活效果动态处理,顶点布局不变。 * - true(箭头 / 生长线):效果在「每条线」空间里工作 —— 严格一个 / 走满整条。 * - false/缺省(流光 / 虚线):像素弧长 —— 段长固定物理尺寸,与线长无关。 */ uvNormalized?: boolean; } /** aTextureParams.y bit0:UV 越界裁剪(核心语义,效果位从 bit1 起)。 */ export declare const FLAG_CLIP_OUTSIDE_UV = 1; /** aTextureParams.y bit1:描边羽化 + hairline(需要横向 v UV)。 */ export declare const FLAG_STROKE_AA = 2; /** 流动速度(周期/秒,符号=方向)→ 参数字节:128=0 速,1 单位=1/32 周期/s,0=关。 */ export declare function encodeFlowSpeed(speed: number): number; /** * 描边羽化 + 亚像素 hairline 补偿。1/fwidth(v) 即描边屏幕像素宽度:边缘做 * ~1px alpha 渐变;宽度不足 1px 时按覆盖率降 alpha(能量守恒),细线不再 * 碎成点刻。流动描边自带 core AA,编码侧不会同时置此位。 */ export declare const strokeFeatherEffect: Batch2DEffect; /** * 描边流动亮段(vParam = encodeFlowSpeed 编码的速度):u 为路径像素弧长, * 亮段间距 uFlowPeriod 路径像素(固定物理长度,长短线亮段一致),每段 * 前缘快收 + 短拖尾(~22% 周期)。宿主把几何加宽(widthBoost)后,可见 * 线体只画在中间 50%,外圈是亮段经过时点亮的辉光带——零额外 pass 的 bloom。 */ export declare const flowStreakEffect: Batch2DEffect;