N 帧处的屏幕应该是什么样子?如果运行时可以回答这个问题,它就可以插入HyperFrames中。
适配器 API 目前处于 v0(实验性)。在 v1 之前,可能会发生重大更改。核心契约(逐帧查找、确定性输出)是稳定的,但方法签名可能会发生变化。
它是如何运作的
主机应用程序(引擎 或 生产者)通过严格顺序调用适配器方法来驱动渲染。适配器从不控制自己的时钟——它只响应搜索命令。适配器 API (v0)
adapters/types.ts
所需语义
getDurationFrames()必须返回一个有限整数 >= 0seekFrame(frame)必须支持任意查找顺序(向前、向后、随机)seekFrame(frame)对于同一输入帧必须是幂等的seekFrame(frame)必须将内部时间限制在适配器的范围内- 适配器应该是暂停/寻道驱动的,而不是时钟驱动的
主机编排
主机在调用适配器之前对帧进行规范化:engine/render-loop.ts
engine/render-loop.ts
决定论合约
这些规则对于任何适配器都是不可协商的。它们是 Hyperframes 确定性渲染 保证的基础。- 规范时钟:
t = frame / fps - 无挂钟依赖性(
Date.now,漂移相关逻辑) - 没有未种子的随机性
- 无渲染时网络获取
- 固定输出参数(
fps、width、height) - 仅限有限期限
- 寻道前确定性帧量化
支持的运行时
第一方运行时适配器:| 运行时 | 寻找方法 | 技能 |
|---|---|---|
| GSAP | timeline.totalTime(timeSeconds) 或 timeline.seek(timeSeconds) | /gsap |
| 动漫.js | instance.seek(timeMs) 用于在 window.__hfAnime 上注册的动画 | /animejs |
| CSS 关键帧 | 浏览器 Animation.currentTime,具有暂停的负延迟回退 | /css-animations |
| 洛蒂 / 点洛蒂 | goToAndStop(timeMs, false)、原始帧设置器或玩家搜索 API | /lottie |
| 三.js/WebGL | hf-seek 事件加上 window.__hfThreeTime 用于确定性场景渲染 | /three |
| 网页动画 API | document.getAnimations() 和 animation.currentTime | /waapi |
一致性测试
每个适配器都应通过以下最低测试:- 可重复性——两次寻找同一帧,得到相同的输出
- 随机查找 — 查找顺序
[90, 10, 50, 10]产生确定性结果 - 边界——负值和溢出帧值不会破坏
- 持续时间 — 返回的持续时间是一个有限整数
- 清理——
destroy之后没有泄漏的计时器/监听器
下一步
确定性渲染
了解适配器必须坚持的确定性保证
GSAP动画
查看实际使用的第一方 GSAP 适配器
@hyperframes/引擎
在渲染期间驱动适配器的捕获引擎
贡献
构建并贡献您自己的适配器