Theseus 模组文档
API 参考 / 渲染、资源与语言

RenderContext


用途:一次渲染回调的上下文。只在本次回调期间有效——不要把它或它返回的 canvas() / matrices() 存起来跨帧使用。

方法速览

方法用途
width() / height()本层逻辑尺寸(逻辑坐标,左上角为原点)
partialTick()帧插值参数 [0,1](当前恒接近 0,见下)
layer()当前渲染层
matrices()变换栈(与 canvas().save/restore 共用同一份状态)
canvas()中立绘制入口
drawTexture(...)绘制纹理的指定子区域(精灵图/图集)
advanced()裸图形 API 出口(破坏可移植性)

完整签名

java
public interface RenderContext {

    int width();

    int height();

    double partialTick();

    RenderLayer layer();

    MatrixStack matrices();

    RenderCanvas canvas();

    void drawTexture(RenderImage image, float x, float y, float w, float h,
                     float u0, float , float u1, float );

    AdvancedRenderAccess advanced();
}

width() / height()

签名:

java
int width();

int height();

行为:返回本层的逻辑尺寸(像素)。宿主在进入插槽前已把画布变换设置为「逻辑空间」,所以直接用逻辑坐标绘制即可,不需要按窗口分辨率换算。窗口缩放/全屏只影响显示尺寸,不影响这里的逻辑尺寸。

partialTick()

签名:

java
double partialTick();

行为:帧插值参数,范围 [0,1]。固定步长模式(-Dseecmd.gl.frameMode=fixed:<n>)下由宿主按 (now - lastStep) / stepNanos 计算并截断;vsync / unlimited 模式恒为 1.0。

诚实说明:本引擎是「每帧一次逻辑更新 + 同帧渲染」,固定步长下该值恒接近 0;游玩时间走音频时钟,与帧间隔无关。请把它当常量设计,不要依赖它做平滑。

layer()

签名:

java
RenderLayer layer();

行为:返回当前处于哪个渲染层(见 RenderLayer)。最常见的用法是过滤:只在 HUD / OVERLAY 等层绘制。

matrices()

签名:

java
MatrixStack matrices();

行为:返回变换栈。push() 等价于 canvas().save(),两者共用同一份底层状态,可以混用但配对必须守恒。详见 MatrixStack。

canvas()

签名:

java
RenderCanvas canvas();

行为:返回本层的中立绘制入口。宿主在进入插槽前把状态(颜色/透明度/裁剪/变换)重置为默认,插槽结束后强制恢复;但插槽内部的状态污染会影响同层其它模组,所以请自行 save() / restore() 配对。

drawTexture(...)

签名:

java
void drawTexture(RenderImage image, float x, float y, float w, float h,
                 float u0, float , float u1, float );

行为:把图片的指定区域绘制到目标矩形,用于精灵图/图集。源区域用归一化坐标 [0,1](u 沿宽度、v 沿高度,原点在图片左上角),与图片像素尺寸无关,因此同一段代码适用于任意尺寸的图集。

u1 必须大于 u0、 必须大于 ;image 须是经 ModContext#resources() 加载的句柄。

advanced()

签名:

java
AdvancedRenderAccess advanced();

行为:返回裸图形 API 出口。会破坏可移植性与像素对账,非必要不要用,详见 AdvancedRenderAccess。

示例:从 4×5 图集取第 2 列第 3 行

java
// 图集 4 列 × 5 行:格宽 0.25,格高 0.2
ctx.drawTexture(sheet,
        x, y, 64, 64,          // 目标矩形(逻辑坐标)
        0.25f, 0.4f, 0.5f, 0.6f);  // 源区域:第 2 列、第 3 行