DEKI/ENGINE 文档
Deki 0.20.2
面向嵌入式显示屏和桌面的模块化 C++ 2D 引擎
载入中...
搜索中...
未找到
提升速度

让开发板变快的大部分设置都会自动选择。本页说明哪些会自动选择、还剩什么需要设置,以及如何看懂数字。

从开发板开始

开发板包(例如 deki-lilygo-boards)带有该开发板运行最好的设置。把开发板选为目标就会使用这些设置,无需调整。

开发板 所有演示场景 画面
LilyGO T-Display S3 AMOLED 59.6 fps(面板的刷新率) 不撕裂(TE 线)
LilyGO T-Deck Plus 60 fps 不撕裂(面板的扫描线)

本页其余内容适用于自己制作的开发板,或用于查明某个场景为什么慢。

自动选择的内容

这些都在游戏启动时由设备决定。启动日志中每一项各有一行,说明选了什么以及原因。

内容 如何选择
整帧还是条带 帧缓冲区能宽裕地放进内部 RAM 时用整帧,放不下时用条带。条带每次在内部 RAM 中绘制几行或几列,比在 PSRAM 中绘制整帧快得多。(渲染设置 frameMode)
从另一个核心发送 在双核芯片上且有两份帧副本的内存时,绘制下一帧的同时发送当前帧;否则按绘制顺序发送。(asyncPresent,开)
撕裂 接了 TE 线时(tePin),画面跟随面板的刷新信号。没有接时,改为回读面板的扫描线(scanlineSync,开)。无法回读的面板按绘制顺序发送,可能撕裂。

开发板需要设置的内容

这些描述开发板的接线,设备无法自行得知。

设置 设为
controller、busType 和引脚 开发板原理图上写的。
spiWriteHz(parallelWriteHz) 面板接受的最快时钟。大多数 ST7789 模块支持 80 MHz;并行总线上 20 MHz 比较稳妥。
tePin 面板 TE 输出所接的 GPIO(如果接了)。这是防止撕裂的最好方法。
readsOnMosi 面板在数据线上而不是 MISO 上应答时打开(T-Deck 就是这样)。只在没有 TE 线时有关。
initSequence 控制器默认的启动序列显示不对时(颜色发白、残留上一幅图像)所用的面板模块自己的启动序列。

值得了解的项目设置

设置 何时修改
dirtyTileTracking 屏幕大部分静止、且没有每帧都画满整个屏幕的东西时打开(全屏背景就会画满整个屏幕)。这样只发送变化的部分。
bandRows 条带的大小。条带越大,遍历场景的次数越少,但占用更多内部 RAM。40 适合大多数屏幕。
frameMode 保持自动,除非你在自己的开发板上测得另一种模式更快。

很少需要:usePsram 和 doubleBuffer(引擎绘制整帧的位置),以及 spiReadHz(T-Deck 的 ST7789 在 10 MHz 下读取可靠)。

看懂数字

串口上的 DEKI:STATS 或 device_stats 工具会输出一行:

fps=60.0 frameMs=16.66 updateMs=1.00 renderMs=7.80 presentMs=3.36 internalFree=50807 frameMode=whole
  • updateMs:游戏逻辑。刚打开的场景在这里加载。
  • renderMs:绘制。使用条带时也包括发送,因为每个条带画好就发送。
  • presentMs:把帧交给显示屏的时间。偏高说明显示屏还在发送上一帧:瓶颈是总线,而不是绘制。
  • internalFree:剩余的内部 RAM,Wi-Fi、蓝牙和条带都从这里取用。

DEKI:PROFILE 按组件和传输路径拆分绘制时间,用来找出场景中最耗时的那一项。

锁定在面板刷新率(59.6 到 60.3 Hz)的帧率,就是不撕裂的开发板能达到的最好结果:画面等待刷新,而不是撕裂。