SuperAPI AI 工具集

makepad-shaders

设计与创作

查看项目

更新于 10-16 04:41

技能介绍

Makepad Shaders 是一个面向 Makepad 着色器系统的技能,版本基于 makepad-widgets(dev 分支),最后更新时间为 2026-01-19,可通过 https://crates.io/crates/makepad-widgets 检查更新。

用途: 该技能用于帮助用户编写 Makepad 着色器代码,并解答关于着色器语言、Sdf2d 以及内置函数的问题。触发场景包括 makepad shader、makepad draw_bg、Sdf2d、makepad pixel、makepad glsl、makepad sdf、draw_quad 等。

文档与参考资源: 本地文件提供了详细文档,包括 ./references/shader-basics.md(着色器语言基础)和 ./references/sdf2d-reference.md(完整的 Sdf2d API 参考)。

高级模式(位于 _base/ 目录):

  • 01-shader-structure:着色器基础
  • 02-shader-math:数学函数
  • 03-sdf-shapes:SDF 形状基元
  • 04-sdf-drawing:高级 SDF 绘制
  • 05-progress-track:进度指示器
  • 09-loading-spinner:加载动画
  • 10-hover-effect:悬停视觉效果
  • 11-gradient-effects:颜色渐变
  • 12-shadow-glow:阴影与发光
  • 13-disabled-state:禁用状态视觉
  • 14-toggle-checkbox:开关动画 此外还包括 ./community/ 社区贡献。

文档完整性检查: 在回答问题前,应先阅读上述相关参考文件。如果文件读取失败或文件为空,应告知用户“本地文档不完整,建议运行 /sync-crate-skills makepad --force 更新文档”,同时仍基于 SKILL.md 模式与内置知识回答。如果参考文件存在,则将其内容纳入回答。

关键模式示例:

  1. 基础自定义着色器:在 View 中设置 show_bg: true,在 draw_bg 中声明 uniform(如 color),并实现 fn pixel(self) -> vec4。
  2. 带边框的圆角矩形:使用 Sdf2d::viewport(self.pos * self.rect_size),调用 sdf.box(...),再 fill_keep 与 stroke。
  3. 渐变背景:通过 mix(self.color, self.color_2, t) 实现水平渐变。
  4. 圆形:使用 Sdf2d 的 circle 与 fill。

着色器结构:

  • draw_*:着色器容器(draw_bg、draw_text、draw_icon)
  • Uniforms:在着色器中可访问的类型化属性
  • fn pixel(self):片段着色器函数
  • fn vertex(self):顶点着色器函数(可选)
  • Sdf2d:2D 有符号距离场辅助工具

内置变量:

  • self.pos(vec2):归一化位置(0-1)
  • self.rect_size(vec2):控件像素尺寸
  • self.rect_pos(vec2):控件位置

Sdf2d 快速参考:

  • 形状:circle、rect、box、hexagon
  • 路径:move_to、line_to、close_path
  • 填充/描边:fill、fill_keep、stroke、stroke_keep
  • 布尔:union、intersect、subtract
  • 变换:translate、rotate、scale
  • 效果:glow、glow_keep、gloop

内置函数(GLSL):

  • 数学:abs、sign、floor、ceil、fract、min、max、clamp
  • 三角:sin、cos、tan、asin、acos、atan
  • 插值:mix、step、smoothstep
  • 向量:length、distance、dot、cross、normalize
  • 指数:pow、exp、log、sqrt

编写代码时:

  • 始终使用 show_bg: true 启用背景着色器
  • 使用 Sdf2d::viewport() 创建 SDF 上下文
  • 从 fn pixel() 返回 vec4(RGBA)
  • Uniform 必须在着色器函数之前声明
  • 使用 self. 前缀访问 uniform 与内置变量

回答问题时:

  • Makepad 着色器使用类 Rust 语法,编译为 GPU 代码
  • 每个控件都可以有自定义着色器(draw_bg、draw_text 等)
  • 着色器支持实时重载,编辑后可立即看到变化
  • Sdf2d 是 2D 形状渲染的主要工具
  • 可使用 GLSL ES 1.0 内置函数