Makepad Shaders Skill
Version: makepad-widgets (dev branch) | Last Updated: 2026-01-19
Check for updates: https://crates.io/crates/makepad-widgets
You are an expert at Makepad shaders. Help users by:
- Writing code: Generate shader code following the patterns below
- Answering questions: Explain shader language, Sdf2d, built-in functions
When to Use
- You need to write or debug Makepad shader code, custom drawing, or SDF-based visuals.
- The task involves
draw_bg, Sdf2d, gradients, effects, or GPU-rendered widget appearance.
- You want Makepad shader patterns and APIs rather than generic GLSL advice.
Documentation
Refer to the local files for detailed documentation:
./references/shader-basics.md - Shader language fundamentals
./references/sdf2d-reference.md - Complete Sdf2d API reference
Advanced Patterns
For production-ready shader patterns, see the _base/ directory:
| Pattern |
Description |
| 01-shader-structure |
Shader fundamentals |
| 02-shader-math |
Mathematical functions |
| 03-sdf-shapes |
SDF shape primitives |
| 04-sdf-drawing |
Advanced SDF drawing |
| 05-progress-track |
Progress indicators |
| 09-loading-spinner |
Loading animations |
| 10-hover-effect |
Hover visual effects |
| 11-gradient-effects |
Color gradients |
| 12-shadow-glow |
Shadow and glow |
| 13-disabled-state |
Disabled visuals |
| 14-toggle-checkbox |
Toggle animations |
Community contributions: ./community/
IMPORTANT: Documentation Completeness Check
Before answering questions, Claude MUST:
- Read the relevant reference file(s) listed above
- If file read fails or file is empty:
- Inform user: "本地文档不完整,建议运行
/sync-crate-skills makepad --force 更新文档"
- Still answer based on SKILL.md patterns + built-in knowledge
- If reference file exists, incorporate its content into the answer
Key Patterns
1. Basic Custom Shader
<View> {
show_bg: true
draw_bg: {
// Shader uniforms
color: #FF0000
// Custom pixel shader
fn pixel(self) -> vec4 {
return self.color;
}
}
}
2. Rounded Rectangle with Border
<View> {
show_bg: true
draw_bg: {
color: #333333
border_color: #666666
border_radius: 8.0
border_size: 1.0
fn pixel(self) -> vec4 {
let sdf = Sdf2d::viewport(self.pos * self.rect_size);
sdf.box(1.0, 1.0,
self.rect_size.x - 2.0,
self.rect_size.y - 2.0,
self.border_radius);
sdf.fill_keep(self.color);
sdf.stroke(self.border_color, self.border_size);
return sdf.result;
}
}
}
3. Gradient Background
<View> {
show_bg: true
draw_bg: {
color: #FF0000
color_2: #0000FF
fn pixel(self) -> vec4 {
let t = self.pos.x; // Horizontal gradient
return mix(self.color, self.color_2, t);
}
}
}
4. Circle Shape
<View> {
show_bg: true
draw_bg: {
color: #0066CC
fn pixel(self) -> vec4 {
let sdf = Sdf2d::viewport(self.pos * self.rect_size);
let center = self.rect_size * 0.5;
let radius = min(center.x, center.y) - 1.0;
sdf.circle(center.x, center.y, radius);
sdf.fill(self.color);
return sdf.result;
}
}
}
Shader Structure
| Component |
Description |
draw_* |
Shader container (draw_bg, draw_text, draw_icon) |
| Uniforms |
Typed properties accessible in shader |
fn pixel(self) |
Fragment shader function |
fn vertex(self) |
Vertex shader function (optional) |
Sdf2d |
2D signed distance field helper |
Built-in Variables
| Variable |
Type |
Description |
self.pos |
vec2 |
Normalized position (0-1) |
self.rect_size |
vec2 |
Widget size in pixels |
self.rect_pos |
vec2 |
Widget position |
Sdf2d Quick Reference
| Category |
Functions |
| Shapes |
circle, rect, box, hexagon |
| Paths |
move_to, line_to, close_path |
| Fill/Stroke |
fill, fill_keep, stroke, stroke_keep |
| Boolean |
union, intersect, subtract |
| Transform |
translate, rotate, scale |
| Effects |
glow, glow_keep, gloop |
Built-in Functions (GLSL)
| Category |
Functions |
| Math |
abs, sign, floor, ceil, fract, min, max, clamp |
| Trig |
sin, cos, tan, asin, acos, atan |
| Interp |
mix, step, smoothstep |
| Vector |
length, distance, dot, cross, normalize |
| Exp |
pow, exp, log, sqrt |
When Writing Code
- Always use
show_bg: true to enable background shader
- Use
Sdf2d::viewport() to create SDF context
- Return
vec4 (RGBA) from fn pixel()
- Uniforms must be declared before shader functions
- Use
self. prefix to access uniforms and built-ins
When Answering Questions
- Makepad shaders use Rust-like syntax, compiled to GPU code
- Every widget can have custom shaders (draw_bg, draw_text, etc.)
- Shaders are live-reloaded - edit and see changes instantly
- Sdf2d is the primary tool for 2D shape rendering
- GLSL ES 1.0 built-in functions are available
Limitations
- Use this skill only when the task clearly matches the scope described above.
- Do not treat the output as a substitute for environment-specific validation, testing, or expert review.
- Stop and ask for clarification if required inputs, permissions, safety boundaries, or success criteria are missing.
Source: sickn33/agentic-awesome-skills → skills/makepad-shaders/SKILL.md
Also appears in: sickn33/agentic-awesome-skills/plugins/agentic-awesome-skills/skills/makepad-shaders/SKILL.md, sickn33/agentic-awesome-skills/plugins/agentic-awesome-skills-claude/skills/makepad-shaders/SKILL.md, sickn33/agentic-awesome-skills/plugins/agentic-bundle-makepad-builder/skills/makepad-shaders/SKILL.md
1---2name: makepad-shaders3description: | CRITICAL: Use for Makepad shader system. Triggers on: makepad shader, makepad draw_bg, Sdf2d, makepad pixel, makepad glsl, makepad sdf, draw_quad, makepad gpu, makepad 着色器, makepad shader 语法, makepad 绘制4---567# Makepad Shaders Skill89> **Version:** makepad-widgets (dev branch) | **Last Updated:** 2026-01-1910>11> Check for updates: https://crates.io/crates/makepad-widgets1213You are an expert at Makepad shaders. Help users by:14- **Writing code**: Generate shader code following the patterns below15- **Answering questions**: Explain shader language, Sdf2d, built-in functions1617## When to Use18- You need to write or debug Makepad shader code, custom drawing, or SDF-based visuals.19- The task involves `draw_bg`, `Sdf2d`, gradients, effects, or GPU-rendered widget appearance.20- You want Makepad shader patterns and APIs rather than generic GLSL advice.2122## Documentation2324Refer to the local files for detailed documentation:25- `./references/shader-basics.md` - Shader language fundamentals26- `./references/sdf2d-reference.md` - Complete Sdf2d API reference2728## Advanced Patterns2930For production-ready shader patterns, see the `_base/` directory:3132| Pattern | Description |33|---------|-------------|34| 01-shader-structure | Shader fundamentals |35| 02-shader-math | Mathematical functions |36| 03-sdf-shapes | SDF shape primitives |37| 04-sdf-drawing | Advanced SDF drawing |38| 05-progress-track | Progress indicators |39| 09-loading-spinner | Loading animations |40| 10-hover-effect | Hover visual effects |41| 11-gradient-effects | Color gradients |42| 12-shadow-glow | Shadow and glow |43| 13-disabled-state | Disabled visuals |44| 14-toggle-checkbox | Toggle animations |4546Community contributions: `./community/`4748## IMPORTANT: Documentation Completeness Check4950**Before answering questions, Claude MUST:**51521. Read the relevant reference file(s) listed above532. If file read fails or file is empty:54 - Inform user: "本地文档不完整,建议运行 `/sync-crate-skills makepad --force` 更新文档"55 - Still answer based on SKILL.md patterns + built-in knowledge563. If reference file exists, incorporate its content into the answer5758## Key Patterns5960### 1. Basic Custom Shader6162```rust63<View> {64 show_bg: true65 draw_bg: {66 // Shader uniforms67 color: #FF00006869 // Custom pixel shader70 fn pixel(self) -> vec4 {71 return self.color;72 }73 }74}75```7677### 2. Rounded Rectangle with Border7879```rust80<View> {81 show_bg: true82 draw_bg: {83 color: #33333384 border_color: #66666685 border_radius: 8.086 border_size: 1.08788 fn pixel(self) -> vec4 {89 let sdf = Sdf2d::viewport(self.pos * self.rect_size);90 sdf.box(1.0, 1.0,91 self.rect_size.x - 2.0,92 self.rect_size.y - 2.0,93 self.border_radius);94 sdf.fill_keep(self.color);95 sdf.stroke(self.border_color, self.border_size);96 return sdf.result;97 }98 }99}100```101102### 3. Gradient Background103104```rust105<View> {106 show_bg: true107 draw_bg: {108 color: #FF0000109 color_2: #0000FF110111 fn pixel(self) -> vec4 {112 let t = self.pos.x; // Horizontal gradient113 return mix(self.color, self.color_2, t);114 }115 }116}117```118119### 4. Circle Shape120121```rust122<View> {123 show_bg: true124 draw_bg: {125 color: #0066CC126127 fn pixel(self) -> vec4 {128 let sdf = Sdf2d::viewport(self.pos * self.rect_size);129 let center = self.rect_size * 0.5;130 let radius = min(center.x, center.y) - 1.0;131 sdf.circle(center.x, center.y, radius);132 sdf.fill(self.color);133 return sdf.result;134 }135 }136}137```138139## Shader Structure140141| Component | Description |142|-----------|-------------|143| `draw_*` | Shader container (draw_bg, draw_text, draw_icon) |144| Uniforms | Typed properties accessible in shader |145| `fn pixel(self)` | Fragment shader function |146| `fn vertex(self)` | Vertex shader function (optional) |147| `Sdf2d` | 2D signed distance field helper |148149## Built-in Variables150151| Variable | Type | Description |152|----------|------|-------------|153| `self.pos` | vec2 | Normalized position (0-1) |154| `self.rect_size` | vec2 | Widget size in pixels |155| `self.rect_pos` | vec2 | Widget position |156157## Sdf2d Quick Reference158159| Category | Functions |160|----------|-----------|161| Shapes | `circle`, `rect`, `box`, `hexagon` |162| Paths | `move_to`, `line_to`, `close_path` |163| Fill/Stroke | `fill`, `fill_keep`, `stroke`, `stroke_keep` |164| Boolean | `union`, `intersect`, `subtract` |165| Transform | `translate`, `rotate`, `scale` |166| Effects | `glow`, `glow_keep`, `gloop` |167168## Built-in Functions (GLSL)169170| Category | Functions |171|----------|-----------|172| Math | `abs`, `sign`, `floor`, `ceil`, `fract`, `min`, `max`, `clamp` |173| Trig | `sin`, `cos`, `tan`, `asin`, `acos`, `atan` |174| Interp | `mix`, `step`, `smoothstep` |175| Vector | `length`, `distance`, `dot`, `cross`, `normalize` |176| Exp | `pow`, `exp`, `log`, `sqrt` |177178## When Writing Code1791801. Always use `show_bg: true` to enable background shader1812. Use `Sdf2d::viewport()` to create SDF context1823. Return `vec4` (RGBA) from `fn pixel()`1834. Uniforms must be declared before shader functions1845. Use `self.` prefix to access uniforms and built-ins185186## When Answering Questions1871881. Makepad shaders use Rust-like syntax, compiled to GPU code1892. Every widget can have custom shaders (draw_bg, draw_text, etc.)1903. Shaders are live-reloaded - edit and see changes instantly1914. Sdf2d is the primary tool for 2D shape rendering1925. GLSL ES 1.0 built-in functions are available193194## Limitations195- Use this skill only when the task clearly matches the scope described above.196- Do not treat the output as a substitute for environment-specific validation, testing, or expert review.197- Stop and ask for clarification if required inputs, permissions, safety boundaries, or success criteria are missing.198199---200201**Source:** [`sickn33/agentic-awesome-skills`](https://github.com/sickn33/agentic-awesome-skills) → `skills/makepad-shaders/SKILL.md`202203**Also appears in:** `sickn33/agentic-awesome-skills/plugins/agentic-awesome-skills/skills/makepad-shaders/SKILL.md`, `sickn33/agentic-awesome-skills/plugins/agentic-awesome-skills-claude/skills/makepad-shaders/SKILL.md`, `sickn33/agentic-awesome-skills/plugins/agentic-bundle-makepad-builder/skills/makepad-shaders/SKILL.md`