形状与线条
Rounded、Chamfer、常用凸多边形、Poly、Line、Circle、Capsule 以及通用 shape style 能力。
适用边界
- 简单热路径优先用短签名,复杂视觉用
NameEx(..., style)。 - 高级效果放在
style里:fill、stroke、innerGlow、outerGlow、backdrop、pattern、transform。 RegularPoly、Diamond、Caret覆盖常见凸多边形,不需要调用方手写点表。Poly/PolyEx的 public contract 是 3..8 个点的凸多边形,复杂路径应先拆成凸片段。
本页 API
- RoundedBox - 高频路径圆角矩形 helper。
RoundedBoxBackdrop- backdrop-only 的 positional 热路径,不创建临时 style 表。- RoundedBoxEx - 表格式样式的高级圆角矩形。
- ChamferBox - 高频路径切角矩形 helper。
- ChamferBoxEx - 使用 style.cuts 的高级切角矩形。
- RegularPoly - 正 3..8 边形 helper,适合徽章、六边形和等边三角形。
- RegularPolyEx - 带 style 表的正多边形。
- Diamond - 盒子内菱形 helper。
- DiamondEx - 带 style 表的菱形。
- Caret - 明确方向的三角箭头 helper。
- CaretEx - 带 style 表和 direction 字段的三角箭头。
- Poly - 根据调用方传入的点绘制凸多边形。
- PolyEx - 带命名 style 字段的高级凸多边形。
- Line - 用简单 positional 签名绘制线段。
LineNoCaps- 不把端点向外延伸半个线宽的 positional 线段。- LineEx - 带命名 width 与绘制字段的高级线条绘制。
- Circle - 基于圆角盒覆盖的简单圆形 helper。
- CircleEx - 使用圆角矩形样式模型的高级圆形。
- Capsule - 简单胶囊矩形 helper。
- CapsuleEx - 使用圆角矩形样式模型的高级胶囊。
- style.stroke - 居中实线、点线、虚线和点划线描边。
- style.backdrop - 由形状或图像遮罩裁剪的 framebuffer 模糊/染色效果。
- style.transform - 用于形状、图像和组件 Ex 调用的绘制阶段视觉变换。
- Radial vignette fill - 暗角现在用普通透明径向渐变 fill 表达。
style.stroke
shape 描边统一以轮廓为中心:一半宽度在形状内部,另一半在外部。旧写法 stroke = Color(...) 配合 strokeWidth 保持兼容;需要点线、虚线或点划线时, 把 stroke 写成 record:
MGFX.RoundedBoxEx(x, y, w, h, {
radius = 12,
fill = Color(18, 24, 32),
stroke = {
color = Color(90, 190, 255),
width = 3,
kind = "dot-dash",
length = 12,
gap = 6,
offset = 0,
},
})| 字段 | 说明 |
|---|---|
color | 必填描边 Color;也接受别名 tint。 |
width | 像素宽度。兼容字段 style.strokeWidth 单独给出时优先。 |
kind | "solid"、"dot"、"dash" 或 "dot-dash";默认 "solid"。 |
length | dash 可见长度,单位像素。 |
gap | dot 或 dash 之间的间距,单位像素。 |
offset | 图案相位,单位像素;每帧改变可得到流动效果。 |
非 solid 描边走独立 stroke pass,不改变 fill、渐变、阴影、发光和 backdrop 的原有路径。支持 RoundedBox、ChamferBox、Circle、Capsule、3..8 点凸多边形、 ProgressBar、SegmentBar、Ring、Arc 和 Sector。未知 kind 会直接报错,不会静默 退化为实线。
编译与无分配热路径
每帧重复使用同一效果时,可在初始化阶段编译并复用:
local backdrop = MGFX.CompileBackdrop({blur = 8, tint = Color(8, 16, 24, 90)})
local style = MGFX.CompileStyle({
radius = 10,
fill = Color(18, 24, 32),
backdrop = backdrop,
}, MGFX.TARGET.ROUNDED_BOX)
MGFX.RoundedBoxEx(x, y, w, h, style)
MGFX.RoundedBoxBackdrop(x, y, w, h, 10, backdrop)
MGFX.LineNoCaps(x1, y1, x2, y2, 2, color)CompileStyle 只做一次浅拷贝,并预规范化 backdrop 与 pattern 字段;调用方应把 返回值视为只读并跨帧复用。RoundedBoxBackdrop 与 LineNoCaps 用于已有标量参数的 高频路径,避免为一次绘制构造 style 表。
常用形状配方
这些配方覆盖大多数 HUD/VGUI 需求。先从这里复制,再按完整函数参考微调。
带真实投影的卡片
MGFX.RoundedBoxEx(x, y, w, h, {
radius = 10,
fill = Color(20, 24, 32, 232),
stroke = Color(255, 255, 255, 26),
strokeWidth = "hairline",
shadow = {
{x = 0, y = 1, blur = 2, color = Color(0, 0, 0, 86)},
{x = 0, y = 6, blur = 14, spread = 1, color = Color(0, 0, 0, 118), softness = 0.66},
},
})import * as mgfx from "@lux/mgfx"
mgfx.api.roundedBoxEx(x, y, w, h, {
radius = 10,
fill = Color(20, 24, 32, 232),
stroke = Color(255, 255, 255, 26),
strokeWidth = "hairline",
shadow = {
{x = 0, y = 1, blur = 2, color = Color(0, 0, 0, 86)},
{x = 0, y = 6, blur = 14, spread = 1, color = Color(0, 0, 0, 118), softness = 0.66},
},
});小控件把 shadow.y 降到 1..3、blur 降到 4..8。大面板可以用 y = 8..12、blur = 18..28。
RoundedBoxEx.shadow 支持数组形式,适合 CSS box-shadow 那样的多层阴影。这样比叠多个 RoundedBoxEx 更便宜:内部只循环 shadow-only path,不会重复 fill、stroke、backdrop、pattern 或 innerGlow。
只做毛玻璃,不做投影
MGFX.RoundedBoxEx(x, y, w, h, {
radius = 12,
fill = Color(0, 0, 0, 0),
backdrop = {blur = 5, tint = Color(8, 14, 24, 112), opacity = 1},
stroke = Color(255, 255, 255, 22),
strokeWidth = 1,
})backdrop 只影响形状内部覆盖范围。需要下坠阴影时加 shadow,不要用 backdrop 模拟 shadow。
切角状态块
MGFX.ChamferBoxEx(x, y, w, h, {
cuts = {tl = 10, tr = 3, br = 10, bl = 3},
fill = MGFX.LinearGradient(0, 0, 1, 0, Color(32, 42, 48, 230), Color(18, 24, 30, 230)),
outerGlow = {width = 10, color = Color(80, 220, 255, 42), softness = 0.60},
})cuts = 6..14 适合 HUD 卡片;高度很小的条形控件不要让切角超过 h * 0.45。
正多边形徽章、菱形、方向箭头
MGFX.RegularPolyEx(cx, cy, 18, 6, {
rotation = 30,
fill = Color(80, 170, 255, 220),
shadow = {x = 0, y = 3, blur = 8, color = Color(0, 0, 0, 110), softness = 0.68},
})
MGFX.DiamondEx(x, y, 24, 24, {
fill = Color(255, 190, 66, 220),
stroke = Color(255, 255, 255, 48),
strokeWidth = 1,
})
MGFX.CaretEx(x, y, 18, 18, {
direction = "right",
fill = Color(255, 112, 92, 220),
})RegularPoly 是正 3..8 边形。等边三角形写 RegularPoly(..., 3, ...);方向箭头写 Caret,不要用含糊的 Triangle 名称。
任意凸多边形
local points = {
{x = x + 8, y = y},
{x = x + w, y = y + 10},
{x = x + w - 6, y = y + h},
{x = x, y = y + h - 8},
}
MGFX.PolyEx(points, {
fill = Color(28, 36, 44, 230),
stroke = Color(255, 255, 255, 36),
strokeWidth = 1,
shadow = {x = 0, y = 4, blur = 10, spread = 1, color = Color(0, 0, 0, 120), softness = 0.68},
})PolyEx 的 contract 是 3..8 点凸多边形。凹多边形、星形、复杂路径需要先拆成多个凸片段。
Rounded 和 Chamfer 的兼容 shadow + outerGlow 会走合成 shader pass。shadow 仍然是投影偏移,outerGlow 仍然是外部发光;合并只影响性能,不改变 API 语义。
效果参数速查
| 字段 | 推荐范围 | 怎么调 |
|---|---|---|
radius | 小按钮 4..8,面板 8..16,胶囊 h * 0.5 | 半径会被规范化,不会让相邻角相互穿透。 |
cuts | 小块 4..8,卡片 8..14 | 切角过大会吃掉内容区;先限制在 h * 0.45 内。 |
shadow.x/y | 小控件 y = 1..3,卡片 4..8,大面板 8..12 | 正 x 向右,正 y 向下;这是投影偏移。 |
shadow.blur | 小控件 4..8,卡片 10..18,大面板 18..28 | 软边宽度,不是位置偏移。 |
shadow.spread | 0..3 常用 | 先扩张形状再做软边;按钮通常 0..1,大面板 1..3。 |
outerGlow.width/size | 6..18 常用 | 发光范围;需要不对称 glow 时可加 x/y 偏移。 |
innerGlow.width/size | 4..14 常用 | 始终裁剪在形状内部,不支持偏移。 |
softness | 0..1,常用 0.55..0.75 | 越大越柔;锐利 HUD 光可用 0.35..0.55。 |
backdrop.blur | 3..10 常用 | 只模糊形状内部背景,和 shadow 是不同 pass。 |
函数参考
RoundedBox
MGFX.RoundedBox(x, y, w, h, radius, fill, stroke, strokeWidth)高频路径圆角矩形 helper。
参数
| 参数 | 说明 |
|---|---|
| x, y, w, h | 当前帧本地像素中的矩形。 |
| radius | 像素圆角半径。单角半径请使用 RoundedBoxEx。 |
| fill | Color 或 MGFX 渐变记录。 |
| stroke, strokeWidth | 可选描边颜色与宽度。 |
用法说明
- 适合简单面板、胶囊按钮和单元格。
- 需要阴影、发光、图案或单角圆角时使用 RoundedBoxEx。
示例
MGFX.RoundedBox(16, 16, 220, 48, 8, Color(28, 34, 46, 230), Color(255, 255, 255, 28), 1)RoundedBoxEx
MGFX.RoundedBoxEx(x, y, w, h, style, children)表格式样式的高级圆角矩形。
参数
| 参数 | 说明 |
|---|---|
| style.radius | 数字或 {tl, tr, br, bl} 角表。 |
| style.fill | Color 或渐变填充。 |
| style.stroke / strokeWidth | 可选描边。 |
| style.shadow, innerGlow, outerGlow | 受支持路径上的可选特效。 |
| style.pattern | StripePattern、SmokePattern 或 WornPattern 叠加。 |
| children | 可选 callback;使用当前 rounded boundary 裁剪其内容。 |
用法说明
- 精细面板建议默认用它,因为高级字段都有名字。
- radius 会被规范化,避免相对角超过矩形尺寸。
- 提供 children 时,绘制层级为背景/效果 → 裁剪内容 → 前景描边;完整约束见 Coverage Mask、Clip 与 Shape 自遮罩。
半径与单角写法
| 字段 / 可接受值 | 默认值 | 作用 |
|---|---|---|
number像素半径。 | 0 | 每个角使用相同半径。 |
{tl, tr, br, bl}命名单角表,也接受数组顺序 {tl, tr, br, bl}。 | 0 | 用于表格式形状 API 的单角半径。 |
style 字段
| 字段 / 可接受值 | 默认值 | 作用 |
|---|---|---|
radius数字或 {tl, tr, br, bl}。 | 0 | 圆角半径。 |
fillColor 或 MGFX 绘制记录。 | color_white | 主体填充。 |
stroke / strokeWidthColor 加数字、true、"hairline"、"thin" 或 "none" 宽度。 | nil / 0 | 可选描边。 |
shadowtrue、数字,或 {x/y、offsetX/offsetY、dx/dy、offset、blur/radius/size/width、spread/grow、color/tint、opacity/strength、softness/falloff}。 | nil | 外部软阴影;convex poly 使用多边形距离 shader。 |
innerGlowtrue、Color,或 {color/tint, width/size, opacity/strength, softness/falloff}。 | nil | 内边缘发光。 |
outerGlowtrue、Color,或 {x/y、offsetX/offsetY、color/tint、width/size/spread、opacity/strength、softness/falloff}。 | nil | 外发光;x/y 是方向偏置,不会像 shadow 那样移动发光源形状。 |
backdroptrue、数字、Color 或 {blur, tint, opacity}。 | nil | 按圆角形状裁剪的 framebuffer 模糊/染色层。 |
patternMGFX.StripePattern、MGFX.SmokePattern、MGFX.WornPattern、true,或图案 spec 表。 | nil | 在支持的形状路径上叠加图案。 |
支持目标与边界
| 字段 / 可接受值 | 默认值 | 作用 |
|---|---|---|
Shape Ex callsRoundedBoxEx、ChamferBoxEx、PolyEx、LineEx、CircleEx、CapsuleEx。 | supported | 调用内部的所有绘制/特效层共享同一个 transform。 |
Image Ex callsImageEx 和 IconEx。 | supported | shader 图像、遮罩、backdrop、发光、背景和描边路径共享 transform。 |
Widget Ex callsProgressBarEx、SegmentBarEx、RingEx、ArcEx、SectorEx。 | supported | 复合回退层会继承同一个 pushed transform。 |
TextTextEx 和 TextBoxEx。 | not promised | 文本使用独立的延迟 glyph/atlas 合成器。 |
Layout/input帧坐标和命中测试。 | unchanged | transform 只影响视觉。TransformPoint/UntransformPoint 只用于显式视觉辅助。 |
示例
MGFX.RoundedBoxEx(x, y, w, h, {
radius = {tl = 10, tr = 10, br = 4, bl = 4},
fill = MGFX.LinearGradient(0, 0, 0, 1, Color(28, 34, 46), Color(16, 20, 28)),
stroke = Color(255, 255, 255, 28),
strokeWidth = 1,
outerGlow = {color = Color(80, 170, 255, 46), width = 14},
})ChamferBox
MGFX.ChamferBox(x, y, w, h, cuts, fill, stroke, strokeWidth)高频路径切角矩形 helper。
参数
| 参数 | 说明 |
|---|---|
| cuts | 所有角共用的数字,或 {tl, tr, br, bl}。 |
| fill | Color 或渐变填充。 |
| stroke, strokeWidth | 可选描边颜色与宽度。 |
用法说明
- cuts 会限制到较短边的一半。
- 需要发光、图案和命名字段时使用 ChamferBoxEx。
切角写法
| 字段 / 可接受值 | 默认值 | 作用 |
|---|---|---|
number应用到每个角的像素切角。 | 0 | 统一切角。 |
{tl, tr, br, bl}命名表,也接受数组顺序 {tl, tr, br, bl}。 | 0 | 单角切角。数值会限制到较短边的一半。 |
示例
MGFX.ChamferBox(16, 80, 220, 44, {tl = 10, tr = 0, br = 10, bl = 0}, Color(28, 34, 46, 230))ChamferBoxEx
MGFX.ChamferBoxEx(x, y, w, h, style, children)使用 style.cuts 的高级切角矩形。
参数
| 参数 | 说明 |
|---|---|
| style.cuts | 数字或 {tl, tr, br, bl}。 |
| style.fill | Color 或渐变填充。 |
| style.pattern | 可选 StripePattern、SmokePattern 或 WornPattern。 |
| style.innerGlow / outerGlow | 可选的切角感知发光效果。 |
| children | 可选 callback;使用当前 chamfer boundary 裁剪其内容。 |
用法说明
- 适合棱角 HUD 面板、警告标记和科幻风 scoreboard 行。
- 省略 style.cuts 时,形状基本等同矩形。
- children 收到
x, y, w, h,描边会在 children 之后作为前景层绘制。
切角写法
| 字段 / 可接受值 | 默认值 | 作用 |
|---|---|---|
number应用到每个角的像素切角。 | 0 | 统一切角。 |
{tl, tr, br, bl}命名表,也接受数组顺序 {tl, tr, br, bl}。 | 0 | 单角切角。数值会限制到较短边的一半。 |
style 字段
| 字段 / 可接受值 | 默认值 | 作用 |
|---|---|---|
cuts数字或 {tl, tr, br, bl}。 | 0 | 切角尺寸。 |
fillColor 或 MGFX 绘制记录。 | color_white | 主体填充。 |
stroke / strokeWidthColor 加描边宽度。 | nil / 0 | 切角感知描边。 |
shadowtrue、数字,或 {x/y、offsetX/offsetY、dx/dy、offset、blur/radius/size/width、spread/grow、color/tint、opacity/strength、softness/falloff}。 | nil | 外部软阴影。 |
innerGlowtrue、Color,或 {color/tint, width/size, opacity/strength, softness/falloff}。 | nil | 内边缘发光。 |
outerGlowtrue、Color,或 {x/y、offsetX/offsetY、color/tint、width/size/spread、opacity/strength、softness/falloff}。 | nil | 外发光;x/y 是方向偏置,不会像 shadow 那样移动发光源形状。 |
backdroptrue、数字、Color 或 {blur, tint, opacity}。 | nil | 按切角形状裁剪的 framebuffer 模糊/染色层。 |
patternStripePattern、SmokePattern 或 WornPattern。 | nil | 裁剪到切角多边形内的图案。 |
支持目标与边界
| 字段 / 可接受值 | 默认值 | 作用 |
|---|---|---|
Shape Ex callsRoundedBoxEx、ChamferBoxEx、PolyEx、LineEx、CircleEx、CapsuleEx。 | supported | 调用内部的所有绘制/特效层共享同一个 transform。 |
Image Ex callsImageEx 和 IconEx。 | supported | shader 图像、遮罩、backdrop、发光、背景和描边路径共享 transform。 |
Widget Ex callsProgressBarEx、SegmentBarEx、RingEx、ArcEx、SectorEx。 | supported | 复合回退层会继承同一个 pushed transform。 |
TextTextEx 和 TextBoxEx。 | not promised | 文本使用独立的延迟 glyph/atlas 合成器。 |
Layout/input帧坐标和命中测试。 | unchanged | transform 只影响视觉。TransformPoint/UntransformPoint 只用于显式视觉辅助。 |
示例
MGFX.ChamferBoxEx(x, y, w, h, {
cuts = {tl = 12, tr = 3, br = 12, bl = 3},
fill = Color(20, 26, 34, 235),
pattern = MGFX.StripePattern({color = Color(255, 255, 255, 24), spacing = 9, width = 1}),
})RegularPoly
MGFX.RegularPoly(cx, cy, radius, sides, rotation, fill, stroke, strokeWidth)正 3..8 边形 helper。等边三角形请用 sides = 3;MGFX 不提供含糊的 Triangle 名称。
参数
| 参数 | 说明 |
|---|---|
| cx, cy | 中心点。 |
| radius | 外接圆半径。 |
| sides | 边数,限制为 3..8。 |
| rotation | 第一顶点角度,单位度;默认方向用 -90 时顶点朝上。 |
| fill, stroke, strokeWidth | 填充与可选描边。 |
示例
MGFX.RegularPoly(cx, cy, 14, 6, 30, Color(80, 170, 255, 220))RegularPolyEx
MGFX.RegularPolyEx(cx, cy, radius, sides, style)带 style 表的正多边形。内部走 PolyEx,所以 fill、stroke、shadow、outerGlow、backdrop、pattern 和 transform 语义一致。
style 字段
| 字段 / 可接受值 | 默认值 | 作用 |
|---|---|---|
rotation / angle角度,单位度。 | -90 | 第一顶点方向;屏幕坐标中 -90 朝上,0 朝右。 |
fillColor 或 MGFX 绘制记录。 | color_white | 主体填充。 |
stroke / strokeWidthColor 加宽度。 | nil / 0 | 边缘描边。 |
shadow / outerGlow / backdrop / pattern / transform | nil | 与 PolyEx 相同。 |
示例
MGFX.RegularPolyEx(cx, cy, 18, 5, {
rotation = -90,
fill = MGFX.LinearGradient(0, 0, 1, 1, Color(80, 170, 255), Color(90, 220, 180)),
shadow = {x = 0, y = 3, blur = 8, color = Color(0, 0, 0, 110), softness = 0.68},
})Diamond
MGFX.Diamond(x, y, w, h, fill, stroke, strokeWidth)在矩形盒子内绘制上、右、下、左四点菱形。
参数
| 参数 | 说明 |
|---|---|
| x, y, w, h | 菱形外接矩形。 |
| fill, stroke, strokeWidth | 填充与可选描边。 |
示例
MGFX.Diamond(x, y, 24, 24, Color(255, 190, 66, 220))DiamondEx
MGFX.DiamondEx(x, y, w, h, style)带 style 表的菱形。内部走 PolyEx,适合按钮焦点、选择标记和 HUD 装饰。
示例
MGFX.DiamondEx(x, y, 28, 28, {
fill = MGFX.LinearGradient(0, 0, 1, 1, Color(80, 220, 255), Color(255, 190, 66)),
outerGlow = {color = Color(80, 220, 255, 64), size = 10, softness = 0.62},
})Caret
MGFX.Caret(x, y, w, h, direction, fill, stroke, strokeWidth)明确方向的三角箭头。它是三角形的一种具体语义,不替代所有 triangle 形态。
参数
| 参数 | 说明 |
|---|---|
| x, y, w, h | 三角箭头外接矩形。 |
| direction | "right"、"left"、"up" 或 "down"。 |
| fill, stroke, strokeWidth | 填充与可选描边。 |
示例
MGFX.Caret(x, y, 18, 18, "right", Color(255, 112, 92, 220))CaretEx
MGFX.CaretEx(x, y, w, h, style)带 style 表的三角箭头。direction 可以写在 style.direction 或 style.dir,默认 "right"。
示例
MGFX.CaretEx(x, y, 18, 18, {
direction = "down",
fill = Color(255, 112, 92, 220),
stroke = Color(255, 255, 255, 42),
strokeWidth = 1,
})Poly
MGFX.Poly(points, fill, stroke, strokeWidth)根据调用方传入的点绘制凸多边形。
参数
| 参数 | 说明 |
|---|---|
| points | {x, y} 或 {number, number} 点数组。 |
| fill | Color 或渐变填充。 |
| stroke, strokeWidth | 可选描边。 |
用法说明
- 公共契约是凸多边形。凹多边形输入可能渲染错误。
- 调用时会复制 points,之后调用方修改不会影响命令。
点格式
| 字段 / 可接受值 | 默认值 | 作用 |
|---|---|---|
points[i]{x = number, y = number}。 | required | 命名点格式。 |
points[i]{number, number}。 | required | 数组点格式。 |
vertex count3 到 8 个凸多边形顶点。 | required | 凹多边形输入会被拒绝或渲染错误。 |
示例
MGFX.Poly({
{x = x + 18, y = y},
{x = x + w, y = y},
{x = x + w - 18, y = y + h},
{x = x, y = y + h},
}, Color(80, 170, 255, 160))PolyEx
MGFX.PolyEx(points, style)带命名 style 字段的高级凸多边形。
参数
| 参数 | 说明 |
|---|---|
| points | 凸多边形点数组。 |
| style.fill | Color 或渐变填充。 |
| style.stroke / strokeWidth | 可选描边。 |
| style.shadow / outerGlow | 基于凸多边形距离场的外部软阴影和外发光。 |
| style.pattern | 受支持 shader 路径上的可选图案。 |
用法说明
- 适合菱形、斜角标签、方向标记和自定义凸 UI 板。
- 一般复杂路径请先拆成凸形再传给 MGFX。
点格式
| 字段 / 可接受值 | 默认值 | 作用 |
|---|---|---|
points[i]{x = number, y = number}。 | required | 命名点格式。 |
points[i]{number, number}。 | required | 数组点格式。 |
vertex count3 到 8 个凸多边形顶点。 | required | 凹多边形输入会被拒绝或渲染错误。 |
style 字段
| 字段 / 可接受值 | 默认值 | 作用 |
|---|---|---|
fillColor 或 MGFX 绘制记录。 | color_white | 多边形填充。 |
stroke / strokeWidthColor 加宽度。 | nil / 0 | 边缘描边。四点以内使用 shader 描边;回退路径绘制边线。 |
shadowtrue、数字、Color,或 {x/y、offsetX/offsetY、dx/dy、offset、blur/radius/size/width、spread/grow、color/tint、opacity/strength、softness/falloff}。 | nil | 基于凸多边形距离场的外部软阴影;x/y 控制偏移,spread/grow 控制实体扩张,blur 控制软边宽度。 |
outerGlowtrue、Color,或 {x/y、offsetX/offsetY、color/tint、width/size/spread、opacity/strength、softness/falloff}。 | nil | 基于凸多边形距离场的外发光;x/y 会把 glow 偏向一侧,但不会平移多边形轮廓。 |
backdroptrue、数字、Color 或 {blur, tint, opacity}。 | nil | 按多边形裁剪的 framebuffer 模糊/染色层。 |
patternStripePattern、SmokePattern 或 WornPattern。 | nil | 裁剪到多边形内的图案。 |
支持目标与边界
| 字段 / 可接受值 | 默认值 | 作用 |
|---|---|---|
Shape Ex callsRoundedBoxEx、ChamferBoxEx、PolyEx、LineEx、CircleEx、CapsuleEx。 | supported | 调用内部的所有绘制/特效层共享同一个 transform。 |
Image Ex callsImageEx 和 IconEx。 | supported | shader 图像、遮罩、backdrop、发光、背景和描边路径共享 transform。 |
Widget Ex callsProgressBarEx、SegmentBarEx、RingEx、ArcEx、SectorEx。 | supported | 复合回退层会继承同一个 pushed transform。 |
TextTextEx 和 TextBoxEx。 | not promised | 文本使用独立的延迟 glyph/atlas 合成器。 |
Layout/input帧坐标和命中测试。 | unchanged | transform 只影响视觉。TransformPoint/UntransformPoint 只用于显式视觉辅助。 |
示例
MGFX.PolyEx(points, {
fill = MGFX.LinearGradient(0, 0, 1, 1, Color(80, 170, 255), Color(90, 220, 180)),
stroke = Color(255, 255, 255, 36),
strokeWidth = 1,
outerGlow = {color = Color(80, 170, 255, 58), width = 12},
})Line
MGFX.Line(x1, y1, x2, y2, width, fill)用简单 positional 签名绘制线段。
参数
| 参数 | 说明 |
|---|---|
| x1, y1, x2, y2 | 当前帧本地像素中的线段端点。 |
| width | 线宽,单位像素。 |
| fill | Color 或线性渐变。 |
用法说明
- 需要端点、radius 或发光时使用 LineEx。
- 水平和垂直线在可行时会使用优化矩形路径。
示例
MGFX.Line(24, 64, 220, 64, 2, Color(80, 170, 255, 220))LineEx
MGFX.LineEx(x1, y1, x2, y2, style)带命名 width 与绘制字段的高级线条绘制。
参数
| 参数 | 说明 |
|---|---|
| style.width | 线条厚度,单位像素。 |
| style.fill | Color 或渐变。 |
| style.noCaps | 设为 true 可避免斜线 quad 的延伸端点。 |
| style.radius / outerGlow | 可选圆角矩形路径或线段四边形发光路径。 |
用法说明
- 当线条样式需要在调用点保持可读时使用 LineEx。
- 渐变使用图元本地归一化绘制模型。
style 字段
| 字段 / 可接受值 | 默认值 | 作用 |
|---|---|---|
width数字。 | 1 | 线宽,单位像素。 |
fill / colorColor 或 MGFX 绘制记录。 | color_white | 线段绘制。渐变会沿线段采样。 |
noCaps布尔 true。 | false | 在四边形路径上移除圆头端帽。 |
caps布尔兼容字段。 | true | 设为 false 等同于 noCaps = true。 |
radius数字。 | nil | 轴对齐线段矩形可走圆角矩形渲染。 |
outerGlow发光 spec 表。 | nil | 轴对齐线段使用矩形路径,斜线使用线段四边形覆盖绘制发光。 |
backdroptrue、数字、Color 或表。 | nil | 按线段覆盖区域裁剪的 framebuffer 模糊/染色。 |
支持目标与边界
| 字段 / 可接受值 | 默认值 | 作用 |
|---|---|---|
Shape Ex callsRoundedBoxEx、ChamferBoxEx、PolyEx、LineEx、CircleEx、CapsuleEx。 | supported | 调用内部的所有绘制/特效层共享同一个 transform。 |
Image Ex callsImageEx 和 IconEx。 | supported | shader 图像、遮罩、backdrop、发光、背景和描边路径共享 transform。 |
Widget Ex callsProgressBarEx、SegmentBarEx、RingEx、ArcEx、SectorEx。 | supported | 复合回退层会继承同一个 pushed transform。 |
TextTextEx 和 TextBoxEx。 | not promised | 文本使用独立的延迟 glyph/atlas 合成器。 |
Layout/input帧坐标和命中测试。 | unchanged | transform 只影响视觉。TransformPoint/UntransformPoint 只用于显式视觉辅助。 |
示例
MGFX.LineEx(x, y, x + w, y, {
width = 3,
fill = MGFX.LinearGradient(0, 0, 1, 0, Color(80, 170, 255), Color(90, 220, 180)),
outerGlow = {color = Color(80, 170, 255, 60), width = 12},
})Circle
MGFX.Circle(cx, cy, radius, fill, stroke, strokeWidth)基于圆角盒覆盖的简单圆形 helper。
参数
| 参数 | 说明 |
|---|---|
| cx, cy | 圆心。 |
| radius | 圆半径,单位像素。 |
| fill, stroke, strokeWidth | 填充与可选描边。 |
用法说明
- 适合点、状态灯和圆形徽章。
- 需要特效字段时使用 CircleEx。
示例
MGFX.Circle(x + 12, y + 12, 6, Color(90, 220, 180), Color(255, 255, 255, 40), 1)CircleEx
MGFX.CircleEx(cx, cy, radius, style, children)使用圆角矩形样式模型的高级圆形。
参数
| 参数 | 说明 |
|---|---|
| style.fill | Color 或渐变填充。 |
| style.stroke / strokeWidth | 可选描边。 |
| style.shadow, innerGlow, outerGlow, pattern | 可选形状特效。 |
| children | 可选 callback;收到圆形外接方框 x, y, size, size。 |
用法说明
- MGFX 会根据圆心和半径计算盒子,再应用圆形半径。
- 圆形图片请使用
ImageEx(..., {mask = {kind = "circle"}});MGFX.Mask(painter)属于多次绘制共享 coverage 的 Clip API。 - children 形式直接以圆自身为抗锯齿 Clip,不需要再创建
MGFX.Masks.Circle。
示例
MGFX.CircleEx(cx, cy, 18, {
fill = Color(80, 170, 255, 220),
outerGlow = {color = Color(80, 170, 255, 75), width = 16},
})Capsule
MGFX.Capsule(x, y, w, h, fill, stroke, strokeWidth)简单胶囊矩形 helper。
参数
| 参数 | 说明 |
|---|---|
| x, y, w, h | 胶囊边界。 |
| fill, stroke, strokeWidth | 填充与可选描边。 |
用法说明
- 半径自动为较短边的一半。
- 适合标签、紧凑条和胶囊按钮。
示例
MGFX.Capsule(x, y, 96, 24, Color(80, 170, 255, 180), Color(255, 255, 255, 36), 1)CapsuleEx
MGFX.CapsuleEx(x, y, w, h, style, children)使用圆角矩形样式模型的高级胶囊。
参数
| 参数 | 说明 |
|---|---|
| style.fill | Color 或渐变填充。 |
| style.stroke / strokeWidth | 可选描边。 |
| style.shadow, innerGlow, outerGlow, pattern | 可选特效。 |
| children | 可选 callback;收到 x, y, w, h 并由胶囊边界裁剪。 |
用法说明
- CapsuleEx 会根据当前渲染尺寸设置半径;胶囊形状本身不需要传 style.radius。
- 当胶囊表示一个 clamp 后的数值时使用 ProgressBarEx。
- children 形式的 transform 与 bounds 限制见 自遮罩 API。
示例
MGFX.CapsuleEx(x, y, w, 28, {
fill = MGFX.LinearGradient(0, 0, 1, 0, Color(80, 170, 255), Color(90, 220, 180)),
outerGlow = {color = Color(80, 170, 255, 45), width = 10},
})style.backdrop
style.backdrop = true | number | Color | {blur, tint, opacity, level, recapture}由形状或图像遮罩裁剪的 framebuffer 模糊/染色效果。Backdrop 只影响形状内部覆盖范围,不是投影;需要 drop shadow 时使用 style.shadow。
参数
| 参数 | 说明 |
|---|---|
| true | 使用默认 blur = 4。 |
| number | 数字值会作为 blur 强度。 |
| Color | 只绘制按形状裁剪的 tint。 |
| table | 支持 blur、tint/color、opacity/strength、padding/spread、整数 level 和显式 recapture。 |
用法说明
- Backdrop 是 style 字段,不再是独立 primitive。
- RoundedBoxEx、ChamferBoxEx、PolyEx、LineEx、RingEx、ArcEx、SectorEx、CircleEx、CapsuleEx 和 ImageEx 都会按自身覆盖区域裁剪它。
- 每个引擎渲染帧按整数
level分层捕获 framebuffer,并用横向、纵向两个全屏 pass 建立该层共享模糊源;同层同强度的后续 shape 只做一次带遮罩采样。 - 提高
level会在当前绘制位置捕获,使高层包含已经画出的低层 UI;同层切换强度只重跑模糊 pass。只有同层内也必须更新 framebuffer 源时才设置recapture = true。
style 字段
| 字段 / 可接受值 | 默认值 | 作用 |
|---|---|---|
true快捷写法。 | {blur = 4} | 默认按形状裁剪的模糊。 |
number快捷写法。 | {blur = number} | 数字作为 blur 强度。 |
Color快捷写法。 | {tint = Color} | 只绘制按形状裁剪的 tint。 |
blur / size数字。 | 0 | 帧缓冲模糊强度。 |
tint / colorColor。 | transparent | 覆盖在模糊区域上的颜色。 |
opacity / strength0..1 数字。 | 1 | tint alpha 的乘数。 |
padding / spread数字。 | 0 | 为形状 backdrop pass 预留的扩展提示。 |
level整数。 | 0 | backdrop 捕获层;层变化时在当前绘制位置捕获 framebuffer。 |
recapture布尔值。 | false | 在同一 level 内也强制重新捕获 framebuffer;后续同层 backdrop 复用新结果。 |
示例
MGFX.RoundedBoxEx(x, y, w, h, {
radius = 12,
fill = Color(0, 0, 0, 0),
backdrop = {blur = 5, tint = Color(8, 14, 24, 150)},
})style.transform
style.transform = MGFX.Transform(...) | MGFX.PointerTilt(...) | MGFX.ProjectedQuad(...)用于形状、图像和组件 Ex 调用的绘制阶段视觉变换。
参数
| 参数 | 说明 |
|---|---|
| origin | 类似 CSS 的原点,例如 "50% 50%"、"left top" 或 {x, y}。 |
| rotate / rotateX / rotateY | 角度,单位度。 |
| perspective | 2.5D 投影的透视距离。 |
| scale / translate / skew | 2D 变换字段;translate 可包含 z。 |
| steps / subdivisions | 投影/透视变换的网格细分数。 |
用法说明
- transform 只影响视觉绘制,不改变布局、命中测试、文本排版或矩形裁剪。
- 支持 RoundedBoxEx、ChamferBoxEx、PolyEx、LineEx、CircleEx、CapsuleEx、ImageEx、IconEx、ProgressBarEx、SegmentBarEx、RingEx、ArcEx 和 SectorEx。
- TextEx/TextBoxEx 暂不属于这个 transform 契约,因为文本使用独立 glyph atlas 合成器。
transform 字段
| 字段 / 可接受值 | 默认值 | 作用 |
|---|---|---|
origin / transformOrigin"50% 50%"、"left top"、{x, y} 或数字。 | "50% 50%" | 用于缩放、旋转、透视和指针倾斜的锚点。 |
rotate / rotateZ角度,单位度。 | 0 | 围绕 origin 的 2D 旋转。 |
rotateX / rotateY角度,单位度。 | 0 | 2.5D 倾斜。透视/投影路径会被细分,让现有 shader 保持有效 UV。 |
perspective数字。 | 0 / 900 for PointerTilt | 透视距离。数值越大投影越平。 |
scale / scaleX / scaleY数字或 {x, y}。 | 1 | 围绕 origin 的视觉缩放。 |
translate / x/y/z{x, y, z} 或独立字段。 | 0 | 视觉位移;z 只影响透视。 |
skew / skewX / skewY角度,单位度。 | 0 | 旋转前的 2D 斜切。 |
steps / subdivisions0..24 的整数。 | auto | 投影和透视变换的细分数。 |
支持目标与边界
| 字段 / 可接受值 | 默认值 | 作用 |
|---|---|---|
Shape Ex callsRoundedBoxEx、ChamferBoxEx、PolyEx、LineEx、CircleEx、CapsuleEx。 | supported | 调用内部的所有绘制/特效层共享同一个 transform。 |
Image Ex callsImageEx 和 IconEx。 | supported | shader 图像、遮罩、backdrop、发光、背景和描边路径共享 transform。 |
Widget Ex callsProgressBarEx、SegmentBarEx、RingEx、ArcEx、SectorEx。 | supported | 复合回退层会继承同一个 pushed transform。 |
TextTextEx 和 TextBoxEx。 | not promised | 文本使用独立的延迟 glyph/atlas 合成器。 |
Layout/input帧坐标和命中测试。 | unchanged | transform 只影响视觉。TransformPoint/UntransformPoint 只用于显式视觉辅助。 |
示例
MGFX.RoundedBoxEx(x, y, w, h, {
radius = 10,
fill = Color(28, 34, 46, 230),
transform = MGFX.PointerTilt(mx, my, {
origin = "50% 50%",
perspective = 900,
maxRotateX = 4,
maxRotateY = 6,
strength = hover,
steps = 12,
}),
})Radial vignette fill
fill = MGFX.RadialGradient(cx, cy, radius, stops)暗角现在用普通透明径向渐变 fill 表达。
参数
| 参数 | 说明 |
|---|---|
| stops | 使用显式透明/不透明 stops。 |
| alpha | 缺省 alpha 等于 255;需要消失时写 Color(..., 0)。 |
用法说明
- 这替代旧的 backdrop 内置 vignette 字段。
- 需要边缘暗角时,把它作为单独形状层绘制。
示例
MGFX.RoundedBoxEx(x, y, w, h, {
radius = 12,
fill = MGFX.RadialGradient(0.5, 0.5, 0.85, {
{0, Color(0, 0, 0, 0)},
{1, Color(0, 0, 0, 96)},
}),
})