本来以为墨水屏局部刷新脏矩形的计算对GUI框架来说很麻烦…
给我给整不会了…🤡🤡🤡
...
其实你的渲染架构已经比较接近墨水屏需要的模式了。
建议把渲染拆成两层:
Layout ↓ Paint 到内存 Buffer ↓ Diff ↓ Dirty Rect ↓ EPD Update也就是说:
GUI 仍然画完整 Buffer。
最后:
Old Buffer New Buffer ↓ 比较 ↓ 找出变化区域 ↓ 通知 EPD这样你的 GUI 不需要知道是不是墨水屏。
LCD Backend:
Memcpy framebufferEPD Backend:
Diff ↓ Update(Rect1) ↓ Update(Rect2)如果以后支持真正的 E-Ink 驱动,只需要替换最后一层 Backend 即可。
所以只要遍历所有像素点,找出 [min(x),min(y),max(x),max(y)] 构成的矩形,拷贝过去即可完成刷新。
最大的问题就是CPU快不快了。