Theseus 模组文档
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();
    }
}