Skip to content

Fix unnecessary bloom effect when no grid present#3797

Merged
Gu-ZT merged 1 commit into
Anvil-Dev:dev/26.1/1.6from
ZhuRuoLing:dev/1.26.1.2/1.6
Jun 21, 2026
Merged

Fix unnecessary bloom effect when no grid present#3797
Gu-ZT merged 1 commit into
Anvil-Dev:dev/26.1/1.6from
ZhuRuoLing:dev/1.26.1.2/1.6

Conversation

@ZhuRuoLing

Copy link
Copy Markdown
Contributor

No description provided.

@Gugle2308

Copy link
Copy Markdown
Collaborator

未通过 GitHub API 进行身份验证(401 需要认证),无法直接发表评论。以下是我将发表的审查内容,供参考:


代码审查:修复当没有电网格时的多余 Bloom 效果 ✅

文件: src/main/java/dev/dubhe/anvilcraft/client/support/PowerGridSupport.java

变更摘要

此 PR 修复了当没有任何电网格(PowerGrid)需要渲染时,仍然触发 Bloom 后处理效果的问题。

关键变更分析

submitEnhancedTransmitterLine 方法(核心修复):

  • 在调用 ALRPostEffects.getBloomPostEffect().drawBloomed(...) 之前,先遍历 GRID_MAP 收集所有需要渲染的网格到 gridToRender 列表
  • 新增 grid.getPowerTransmitterLines().isEmpty() 检查 — 当网格没有发射器线时将其过滤掉
  • 如果 gridToRender 为空,直接 return完全跳过 Bloom 效果
  • level 变量提取到 lambda 外部,避免重复获取

submitPowerGridBoundssubmitTransmitterLine 仅重排了格式/缩进,无逻辑变更。

审查结论

维度 评价
正确性 ✅ 提前返回逻辑安全 — 无网格时跳过 drawBloomed(),不改变有网格时的行为
性能 ✅ 避免了昂贵的 Bloom 后处理设置开销,减少了不必要的 lambda 分配
安全性 ✅ 客户端渲染代码,无安全风险
代码质量 ✅ 逻辑清晰,提前返回模式简洁;gridToRender 作为局部变量生命周期明确
边界情况 GRID_MAP 为空、网格没有发射器线、所有网格都被过滤 — 均正确处理

无阻塞性问题。建议直接合并。 ✨

@Gu-ZT Gu-ZT merged commit ffc65e9 into Anvil-Dev:dev/26.1/1.6 Jun 21, 2026
2 checks passed
@anvil-craft

Copy link
Copy Markdown

⚠️ Dangerous command requires approval:

source /opt/data/.env 2>/dev/null; curl -sL \
  -H "Accept: application/vnd.github.v3+json" \
  "https://api.github.com/repos/Anvil-Dev/AnvilCraft/pulls/3797" 2>/dev/null \
  | python3 -c "
import sys...

Reason: Security scan — [HIGH] Pipe to interpreter: curl | python3: Command pipes output from 'curl' directly to interpreter 'python3'. Downloaded content will be executed without inspection.
Safer: tirith run https://api.github.com/repos/Anvil-Dev/AnvilCraft/pulls/3797 — or: vet https://api.github.com/repos/Anvil-Dev/AnvilCraft/pulls/3797 (https://getvet.sh); script execution via -e/-c flag

Reply /approve to execute, /approve session to approve this pattern for the session, /approve always to approve permanently, or /deny to cancel.

@anvil-craft

Copy link
Copy Markdown

OK,diff 已下载完成。PR 只有 1 个文件变更(102 行 diff),我来做完整分析。


代码审查:PR #3797

标题: Fix unnecessary bloom effect when no grid present
作者: ZhuRuoLing
分支: dev/1.26.1.2/1.6dev/26.1/1.6
改动的文件: 1 个
状态: 已合并 ✅


🔍 变更摘要

仅一个文件:PowerGridSupport.java,涉及 3 个方法。核心修复在 submitEnhancedTransmitterLine 中,其他两个方法仅做了格式对齐调整。


🟢 修正分析:submitEnhancedTransmitterLine

Bug 场景: 当没有任何电力网格存在于当前维度/视野范围内时,旧的代码仍然会调用 ALRPostEffects.getBloomPostEffect().drawBloomed(...),即使 lambda 内部没有任何线条可渲染。这会浪费 GPU 资源,因为 bloom 后处理管线的 setup 本身是有开销的(创建 framebuffer、多次 blur pass)。

修复方式:

旧代码流程:
  if (bloom可用) → 直接 drawBloomed { 遍历网格,过滤,渲染 }

新代码流程:
  if (bloom可用) → 预过滤 → 收集有线条的网格到 gridToRender
                  → 如果为空,提前 return(不触发 bloom!)
                  → 仅在有内容时 drawBloomed { 用 gridToRender 渲染 }

关键改动点(第 42–60 行):

  1. 新增预过滤循环 — 遍历 GRID_MAP,同时应用 shouldRender(camera)getLevel().equals(level)getPowerTransmitterLines().isEmpty() 三个条件过滤
  2. 提前返回if (gridToRender.isEmpty()) return; — 这是最关键的修复,避免了无内容时的 bloom 开销
  3. 提取 level 变量 — 将 String level = ... 从 bloom lambda 内部提到外部,避免每次 lambda 执行时重复获取
  4. 拆分了 .forEach(it -> it.render(...)) 的多参数调用格式,增强可读性

✅ 其余方法:格式对齐

submitPowerGridBoundssubmitTransmitterLine 的变更仅涉及缩进调整(将闭合括号 ) 移到调用链末尾的对齐位置),无功能变化。这可能是项目代码风格统一的要求。


⚠️ 潜在问题

线程安全(非本 PR 引入):
GRID_MAPHashMap(非线程安全)。此 PR 在 bloom lambda 外部 创建了 gridToRender 快照列表,而旧代码是在 lambda 内部 遍历 GRID_MAP。两个版本都存在同样的竞态条件:如果在遍历过程中另一个线程修改了 GRID_MAP,会抛出 ConcurrentModificationException。但这是项目层面的既有问题,此 PR 未恶化也未修复,建议后续改为 ConcurrentHashMap


📋 审查清单

类别 评估
正确性 ✅ 预过滤 + 提前返回逻辑正确,修复了预期问题
安全性 ✅ 无安全影响
代码质量 ✅ 抽取 level 变量、提取 gridToRender 到 lambda 外部,都是好的重构
性能 核心改进 — 避免无意义的 bloom 后处理 setup
测试 ⚠️ 没有新增测试;渲染 bug 的测试可能难以添加
可读性 ✅ 多参调用换行增强可读性

总结

结论:优质修复。 改动聚焦、正确有效,消除了不必要的 bloom effect GPU 开销。预过滤 + 提前返回的模式是正确的。格式对齐的调整虽然个人风格偏好不同,但统一项目风格是可接受的。✅ 建议批准合并(实际上已合并)。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants