用途:面向 Makepad 2.0(makepad-widgets dev 分支)的 GPU 着色器系统,帮助在控件属性树中内联编写像素与顶点着色器,实现渐变、圆角、阴影、粒子等自定义绘制效果。
主要能力:在 draw_bg、draw_text 或自定义 draw 对象内用 pixel: fn() { ... } 与 vertex: fn() { ... } 定义着色器;支持 instance(可动画)、uniform、texture_2d、varying 变量;内置 self.pos、self.rect_size、self.dpi_factor、self.draw_pass.time 等;提供 SDF2D 图元(circle、rect、box、hexagon、arc、路径)、绘制操作(fill、stroke、glow、clear)、组合器(union、intersect、subtract、gloop、blend)与变换;含颜色混合、Pal.premul、HSV 转换、Math.random_2d 等工具;支持自定义着色器函数与实例化批量渲染。
使用方式:用 +: 合并运算符扩展默认着色器,如 draw_bg +: { ... };像素着色器必须返回预乘 Alpha 颜色,可用 Pal.premul() 或直接返回 sdf.result;动画用 instance 变量配合 Animator;共享值用 uniform;自定义绘制类型需在 Rust 中定义结构体并加 #[repr(C)],再通过 script_mod! 注册;实例化粒子用 begin_many_instances / end_many_instances 合并为单次绘制调用;时间动画需在 handle_next_frame 中调用 redraw 保持 draw_pass.time 推进。
适用场景:控件背景与状态色、圆角按钮、卡片阴影、胶囊形状、脉冲圆点、全屏着色器控件、粒子场与可视化等。
限制:Splash 不能创建新的 DrawQuad/DrawText/DrawSvg 类型,也不能为已有着色器新增 instance 字段(GPU 布局在编译期确定);着色器 let 绑定不可重新赋值;自定义函数须用属性式语法 name: fn(...) -> type { };缺少 #[repr(C)] 会导致 GPU 布局不匹配;复杂着色器影响渲染性能。详细语法见本地 ./references/shader-reference.md 与 ./references/sdf2d-reference.md。