跳转到内容
查看源码

实时替换(--watch 与 Player)

Entelechy 的核心体验是:世界一直在运行,定律和结构可以随时替换。有三种方式在本地体验。

终端窗口
entelechy run examples/grayscale/scene.esn --out output.ppm --watch

保存场景或它使用的任何文档,文本发生变化的 Kernel 会重新发布,受影响的节点重新运行。编译失败的 Kernel 会被报告,旧版本继续运行。下面是一次真实的会话日志(复制了 examples/grayscale 到 gw/ 后操作):

watching gw/kernels/gradient.ent, gw/kernels/grayscale.ent, gw/kernels/pixelate.ent, gw/scene.esn; edit a document and save
rejected gw/kernels/grayscale.ent:8:59: `nope` is not defined ← 故意写错:被拒绝
scene loaded
evaluated in 51.856µs: executed [], reused 2 -> gw.png ← 什么都没变,旧版本仍在运行
scene loaded
evaluated in 1.30081ms: executed [gray+source, blocks], reused 0 -> gw.png ← 修好并把 amount 改成 0.5

--watch 下场景的时钟是从启动起经过的秒数,所以用到 time() 的场景会持续变化。

终端窗口
entelechy player examples/life/scene.esn

Player 在窗口中打开场景并保持实时:改动的 Kernel 在帧之外编译,准备好后再换入。它接受 run 的 --library、--input、--output、--backend、--memory、--work、--small、--allow、--grant,以及:

参数 作用
--scale <n>、--window <w>x<h> 初始放大倍数与窗口尺寸
--no-audio 不打开声卡
--show-while-building 设备还在构建时先打开窗口,期间在 CPU 上绘制
--hold-pointer 点击后锁定并隐藏系统光标
--folder <name,...> 允许用 Cmd+O 为这些目录输入/输出选择文件夹(权限由 --folder-allow 指定)
--replay <file> 在窗口中播放一个回放
--serve、--listen <host:port>、--allow-origin <origin> 在窗口中同时提供创作协议

窗口快捷键:

键 作用
F5 重置状态
F6 在各节点之间切换预览
F8 暂停场景时间;F9 或 F7 单步
F10 显示帧数据:frame、cpu、wait、gpu、节点、内存、等待设备的节点、最忙的节点

手柄映射为按键:方向键与左摇杆是方向键,South 是 Z,East 是 X,Start 是 Enter,Select 是 Escape。其他所有键都交给场景。

终端窗口
entelechy replay tests/*.replay --watch

只重新播放受改动影响的回放,并且每个回放只计算变化的部分——适合边写 Kernel 边看测试。

替换 Kernel 时,用 <~ 读取的状态(上一帧提交的值)会被保留;如果新版本改变了状态端口的布局,可以用 migrate 指定一个迁移 Kernel 来转换旧状态,否则状态从初始值重新开始,并在求值报告中说明。详见图与状态和热替换与校验。