API 参考 / 渲染、资源与语言
RenderFilter
用途:渲染滤镜。在游玩内容绘制完成后、合成回目标画布前执行,用 FilterFrame#canvas() 在已有画面之上叠加绘制(后处理)。身份由注册表键承载,接口本身不带 id。
完整签名
java
public interface RenderFilter {
default int zOrder();
void apply(RenderCanvas canvas, FilterFrame frame);
}zOrder()
签名:
java
default int zOrder();行为:默认返回 0,可为任意整数。多个滤镜按从小到大执行:数字越小越先执行、越靠下;相同层号按注册顺序。可用 -99 / 99 把内容压到滤镜层最底 / 最顶。
apply(canvas, frame)
签名:
java
void apply(RenderCanvas canvas, FilterFrame frame);行为:canvas 为本帧画布(叠加在游玩内容之上),frame 为当前帧只读视图。宿主在每个回调前后自动 save/restore,因此单帧内各滤镜状态互不污染。
注册入口:ctx.registries().renderFilters()。
示例:四边暗角
java
public final class Vignette implements RenderFilter {
@Override public int zOrder() { return 50; }
@Override public void apply(RenderCanvas c, FilterFrame f) {
c.save();
c.setColor(java.awt.Color.BLACK);
c.setAlpha(0.55);
c.fillRect(0, 0, f.width(), 40);
c.fillRect(0, f.height() - 40, f.width(), 40);
c.setAlpha(0.35);
c.fillRect(0, 0, 40, f.height());
c.fillRect(f.width() - 40, 0, 40, f.height());
c.restore();
}
}