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)。
相关条目
- MixinRenderBlockConnectedTexturesEthereal - 处理
Ethereal子类 - MixinIconConnectedTexture - 处理
IconConnectedTexture的纹理索引 - ExtraUtilsCompatHandler - 声明
perThread=true触发 per-thread 实例化 - PatchesConfig -
patchExtraUtils开关