Add client projection renderer module 新增客户端投影渲染模块 - #126
Conversation
🌿 Roseau API Breaking Change Report
|
|
核查已完成(diff 分析 + 1.21.1 官方 mappings/字节码 + NeoForge 21.1.226 实测 + 与 AnvilCraft 现存同源实现逐行对账)。以下是审查意见: 代码审查摘要 — PR #126 投影模块(AnvilLib)操作: opened | 范围: 23 个文件(19 新增 / 4 修改 / 0 删除),+1247 / −1 行 🔴 关键无。逐项核验了 1.21.1 的 API 存在性、AT 目标、Mixin 注入点与着色器一致性,未发现会导致编译失败、崩溃或功能失效的问题。(预判中的两个高风险项均已排除:①
|
| 待核验 | 结论 |
|---|---|
CompositeRenderType.state()、CompositeState.textureState/transparencyState、TextureStateShard.texture(Optional) |
✅ 均存在,AT 目标与描述符正确 |
VertexBuffer.upload(MeshData) 是否接管 MeshData.close() |
✅ 接管(字节码 close() ×3),无原生内存泄漏 |
renderBatched(9 参, ModelData+RenderType) / renderLiquid(5 参) |
✅ 与 NeoForge 1.21.1 签名一致(AnvilCraft 1.21.1 同写法) |
BakedModel.getRenderTypes(state,random,data)→ChunkRenderTypeSet |
✅ 可 for-each 为 RenderType |
BlockAndTintGetter 抽象方法集(3+3+2) |
✅ ProjectionScene 全覆盖;getShade(FFFZ) 由 IBlockAndTintGetterExtension 提供 |
RenderSystem.assertOnRenderThread/getModelViewMatrix/getShader、drawWithShader |
✅ |
RegisterShadersEvent.registerShader、ModelEvent.BakingCompleted、ClientTickEvent.Post、RenderLevelStageEvent.Stage |
✅ |
Window.<init> 中 GLFW.glfwDefaultWindowHints() |
✅ 唯一命中,@At(INVOKE, shift=AFTER) 注入点有效 |
WorldOpenFlows.createFreshLevel(5)/LevelSettings(7)/Block.shouldRenderFace(5)/BlockPos.of(long) |
✅ 签名匹配 |
- 规模/卫生:19 新增 0 删除;
No newline at end of file0 处;无 TODO/FIXME/调试输出/凭据;@NullMarked+ 仅org.jspecify.annotations(合 AGENTS.md);公共面收敛为ProjectionScene/ProjectionRenderer,渲染类型/着色器/消费者均包私有。 - 构建与发布接线一致:
settings.gradleinclude + 构件重命名;.github/modules.json(generate-matrix.js据此生成 build-l0 矩阵、deploy-l0 与 roseau 检查,anvillib-renderer/anvillib_renderer与推导规则吻合);roseau_comment.ymlMODULES 列表;module.main/build.gradle两处依赖块(发布坐标 + project 坐标)对称补齐。
📋 声称验证表
PR 描述为空(body: null),无 checklist 可比对;按标题「投影模块」对 diff 做映射核对:
| 应有内容 | 状态 | 对应文件 |
|---|---|---|
| 模块骨架/元数据 | ✅ | AnvilLibRenderer、package-info ×2、gradle.properties、neoforge.mods.toml |
| 场景/邻接视图 | ✅ | ProjectionScene(含 Shifted 视图) |
| 网格烘焙与绘制 | ✅ | ProjectionRenderer、GhostConsumer |
| 渲染类型与着色器 | ✅ | ProjectionRenderTypes、ProjectionShaders、projection.fsh/.json、accesstransformer.cfg |
| 回归测试实现 | ✅ | ProjectionTest、HiddenWindowMixin、projection_test.mixins.json、client-test.gradle |
| 测试在 CI 执行 | ❌ | 无工作流传 -PprojectionTest( |
| 构建/CI 接线 | ✅ | settings.gradle、.github/modules.json、roseau_comment.yml、module.main/build.gradle |
| 文档同步 | ❌ | README 未更新( |
🧪 测试建议
rebuild()异常路径(烘焙中途抛异常 → mesh 为 null 且isValid()==false)无覆盖;ProjectionScene.getBlockTint的默认构造器路径(level::getBlockTint+ tintPos 偏移)未断言,仅覆盖了自定义回调;ProjectionRenderTypes.ghost()的缓存分支(非 solid/cutout/translucent →entityTranslucentCull)与 128 上限清理未覆盖;render()在isValid()==false时应为 no-op(断言不抛异常即可)。
结论: COMMENT — 实现质量高,AT/着色器/API/Mixin 目标均经实机核验,可以合并;建议合并前顺手处理 -PprojectionTest 用法说明。
标题建议:Add client projection renderer module 新增客户端投影渲染模块
(gh auth status 显示 token 已失效:The token in /opt/data/home/.config/gh/hosts.yml is invalid,按规程未导出凭据、未自动改标题;修复认证后我可执行 gh pr edit 126 --title …。)
由 Hermes Agent 审查
|
💾 Self-improvement review: Patched SKILL.md in skill 'offline-pr-evidence-verification' (1 replacement). · Patched references/new-module-and-ci-verification.md in skill 'github-webhook-pr-review' (1 replacement). · Patched references/pr-class-routing.md in skill 'github-webhook-pr-review' (1 replacement). |
🌿 Roseau API Breaking Change Report
|
🌿 Roseau API Breaking Change Report
|
No description provided.