密度函数 GPU 调试窗口

基本信息

属性 值
打开方式 指令 /datapack gpu-debug(DatapackCommand.java:80-84)
实现类 databack.common.worldgen.debug.DFDebugWindow(513 行,extends javax.swing.JFrame)
UI 框架 Java Swing(AWT),非 Minecraft GUI
单例 静态 instance,open() 中若为 null 或 !isDisplayable() 则新建(DFDebugWindow.java:46-56)
线程要求 任意线程可调用,内部走 SwingUtilities.invokeLater
伴随包 ChunkDebugCapture、DebugCaptureStore、KernelRecord(同目录)
依赖库 mcgpu.core.hwaccel.buffer.BufferDataType(MCGPU)

功能

对走 MCGPU 加速的密度函数求值过程做离屏抓取与回放。它面向模组开发者而非普通玩家:普通游玩中不会自动弹出,只有显式执行 /datapack gpu-debug 才会打开。

打开流程

DatapackCommand.processCommand 在参数栈顶部为 gpu-debug 时提前返回,位置在世界查找之前(DatapackCommand.java:79-84):

// gpu-debug does not need world/pack state — handle before the world lookup.
if ("gpu-debug".equals(argStack.peek(0))) {
    DFDebugWindow.open();
    sender.addChatMessage(new ChatComponentText("Opening GPU debug window."));
    return;
}

因此该子命令不需要世界已加载,在指令层面不依赖数据包状态。DFDebugWindow.open() 为 public static synchronized,内部 SwingUtilities.invokeLater(() -> { instance.setVisible(true); instance.toFront(); })(DFDebugWindow.java:46-56)。

界面布局

类头部 javadoc 给出的 ASCII 布局图(DFDebugWindow.java:19-43)与源码一致:

区域 控件 源码
外层 JSplitPane.HORIZONTAL_SPLIT,setDividerLocation(280) DFDebugWindow.java:91-92
左栏 4 个按钮 + 区块列表 DFDebugWindow.java:107-110
右栏 JTabbedPane,5 个标签页 DFDebugWindow.java:148-183

左栏按钮

按钮文本 源码行
Enable Capture DFDebugWindow.java:107
Disable Capture DFDebugWindow.java:108
Replay Chunk DFDebugWindow.java:109
Clear All DFDebugWindow.java:110

左栏下方是区块列表,模型为 DefaultListModel<ChunkDebugCapture> chunkListModel(DFDebugWindow.java:58)。

右栏标签页

标签页 内容 源码行
Kernels 内核表格(KernelTableModel 包在 JScrollPane 中) DFDebugWindow.java:162
GLSL GLSL 源码区 DFDebugWindow.java:169
Values 数值表格 DFDebugWindow.java:174
Heatmap 热力图面板 DFDebugWindow.java:178
DF Map 密度函数映射表格 DFDebugWindow.java:183

注:javadoc 的 ASCII 图(DFDebugWindow.java:31)只画了 4 个标签页 Kernels | GLSL | Values | Heatmap,而源码中实际 addTab 调用有 5 个(多出 DF Map,DFDebugWindow.java:183)。此处以源码为准。

交互

触发 行为
/datapack gpu-debug 打开或前置已存在的窗口,聊天框回显 Opening GPU debug window.
未选择区块即回放 弹出 JOptionPane.showMessageDialog(this, "Select a chunk first.", "Replay", ...)(DFDebugWindow.java:209)
关闭窗口 instance.isDisplayable() 变 false,下次 open() 重新构造新实例(DFDebugWindow.java:47)

相关类

类 作用
DebugCaptureStore 抓取数据仓库;注释写明由 ModernWorldGenerator 在构造 GpuChunkCache 之后注册与回调(DebugCaptureStore.java:39、62)
ChunkDebugCapture 单个区块的抓取记录,同时被 MCGPU 侧引用(mcgpu 命中)
KernelRecord 单个已编译内核的记录
KernelTableModel DFDebugWindow 内部类,驱动 Kernels 标签页表格(DFDebugWindow.java:59)

MCGPU 相关代码分布在密度函数 DAG 与代码生成包中:DFDagBuilder2、DensityFunctionExecutor、KernelDispatchListener、BarrierBuffer、codegen(SplineEmitter、ExprEmitter、KernelBodyEmitter、CodeGenContext、GeneratedKernel、VulkanCodeGen)、DFPlanBuilder、BarrierDFCodeGenerator,以及世界生成侧的 ModernWorldGenerator、GpuChunkCache。

相关条目