MixinRenderBlockConnectedTextures

基本信息

属性 值
类名 com.gtnewhorizons.angelicacompat.mixins.late.client.extrautils.MixinRenderBlockConnectedTextures
目标类 com.rwtema.extrautils.block.render.RenderBlockConnectedTextures
Mixin 阶段 LATE
Mixin 启用条件 PatchesConfig.patchExtraUtils == true
Mixin 注入方法 getFakeRender()(@Overwrite)
启用版本 Minecraft 1.7.10(仅客户端)

功能

原版 RenderBlockConnectedTextures 拥有一个静态字段 fakeRender(类型 FakeRenderBlocks),供多个 renderWorldBlock 调用复用:

  • 静态字段 = 多线程并发时所有 worker 共用同一个实例;
  • 各 worker 各自往实例里写 curBlock / curMeta / blockAccess,互相覆盖;
  • 最终渲染结果出现相邻方块之间的纹理错乱(纹理渗透到隔壁方块)。

本 Mixin 把 getFakeRender() 返回值改为实例字段 newFakeRender:

@Unique
private FakeRenderBlocks newFakeRender = new FakeRenderBlocks();

@Overwrite(remap = false)
public FakeRenderBlocks getFakeRender() {
    return newFakeRender;
}

每个 RenderBlockConnectedTextures 实例(Angelica 在 perThread 路径下会为每个 worker 提供独立实例)拥有独立的 newFakeRender,不再互相覆盖。

实现要点

  • @Overwrite(remap = false):getFakeRender 是 EU 私有方法,无 SRG 名。
  • @author Cleptomania,@reason Thread safety compat (don't use static FakeRenderBlocks anymore)。
  • 与 ExtraUtilsCompatHandler 配合:CompatHandler 声明 RenderBlockConnectedTextures.perThread=true,Angelica 据此为每个 worker thread 分配独立的 RenderBlockConnectedTextures 实例。

第三方 mod 集成

仅针对 com.rwtema.extrautils.block.render.RenderBlockConnectedTextures (Extra Utilities)。

相关条目