Iris(内嵌着色器库)

基本信息

属性 值
主包 net.coderbot.iris
路径 src/main/java/net/coderbot/iris/
文件数 381(iris 子包)
modid 无
资源域 assets/iris(该域下无 lang 目录)
mixin early/shaders/ 44 个
总开关 AngelicaConfig.enableIris(默认 true,RequiresMcRestart)

Iris 是本仓最大的单一子系统(381 个 java 文件,占 src/main/java 1035 个文件的 37%)。它以库的形式内嵌,没有 @Mod 注解,因此 mcmod.info 里没有它的条目(该文件里的 embeddium 条目反而是死声明,见 Mod ID 与注册总表)。

net/coderbot/ 构成

子包 文件数
iris 381
batchedentityrendering 17
合计 398

另有 3 个文件的 net/irisshaders/ 包(独立的顶层包,不在 coderbot 下)。

关键类

类 位置 作用
Iris net/coderbot/iris/Iris.java 门面单例 Iris.INSTANCE
IrisDebugScreenHandler net/coderbot/iris/client/IrisDebugScreenHandler.java 调试叠加
DeferredWorldRenderingPipeline net/coderbot/iris/pipeline/DeferredWorldRenderingPipeline.java 延迟渲染管线
ShadowRenderer net/coderbot/iris/pipeline/ShadowRenderer.java 阴影渲染
ShaderTransformer net/coderbot/iris/pipeline/transform/ShaderTransformer.java 着色器变换
BlockRenderingSettings — 方块渲染设置(MixinItemRenderer 等处引用)

Iris.java 与 Angelica 主代码有大量交叉引用(ClientProxy import 了 4 个 Iris 类),并且反过来引用 Embeddium 的库类 org.embeddedt.embeddium.*(见下)。

生命周期

Iris 没有自己的 @Mod 生命周期。Iris 类提供了 fmlInitEvent() 方法,由 Angelica 的 Proxy 手工调用:

阶段 位置 动作
preInit ClientProxy.java:145 Iris.warmupShaderTransforms()
init ClientProxy.java:172-174 Iris.INSTANCE.fmlInitEvent(),随后把 Iris.INSTANCE 同时注册到 FML bus 与 EVENT_BUS

fmlInitEvent()(Iris.java:980)同时创建并注册 3 个按键,见 KeyBinding 注册总表。

Iris.java:981 把 IRIS_VERSION = Tags.VERSION —— Iris 与 Angelica 共享同一版本号。

GL 桥接

IrisGLSMBridge(com.gtnewhorizons.angelica.iris,3 个文件)是 Iris 与 GLSM 之间的桥:

时机 动作
preInit(ClientProxy.java:144) installImmediateExtendedHandler()
init(ClientProxy.java:169) register()

Embeddium 依赖

Iris 的代码 import 了 org.embeddedt.embeddium.impl.* 的库类(GlUniformMatrix3f、GlUniformMatrix4f、Viewport、ViewportProvider、ShaderConstants、ShaderLoader、ShaderParser、Frustum、ShadowSearchFrustum、BulkOcclusionFrustum 等),分布在:

  • pipeline/DeferredWorldRenderingPipeline.java
  • pipeline/ShadowRenderer.java
  • pipeline/transform/ShaderTransformer.java
  • shadows/frustum/CullEverythingFrustum.java
  • shadows/frustum/fallback/*(BoxCullingFrustum、NoCullingFrustum、CubicOcclusionFrustum 等)

这些是库类引用,不是 mod 声明 —— 这正是 mcmod.info 里 embeddium 条目容易让人误判的地方。

mixin 补丁

44 个 early/shaders mixin,见 Iris(着色器)mixin 分组。其中 MixinItemRendererBackhand 专门处理 Backhand 的副手渲染。

资源域问题

assets/iris/ 目录存在,但没有 lang 子目录(0 个 .lang 文件)。Iris 的语言键(如 key.category.iris.keybinds)实际写在 assets/angelica/lang/ 下,形成「资源域 iris,语言文件在域 angelica」的割裂。见 资源域与语言文件。

相关条目