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.javapipeline/ShadowRenderer.javapipeline/transform/ShaderTransformer.javashadows/frustum/CullEverythingFrustum.javashadows/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」的割裂。见 资源域与语言文件。
相关条目
- Iris(着色器)mixin 分组 - 44 个 mixin
- KeyBinding 注册总表 - 3 个 Iris 按键
- AngelicaModulesConfig -
enableIris - Mod ID 与注册总表 -
embeddium死声明 - 资源域与语言文件 - 语言键的实际存放位置