本来以为墨水屏局部刷新脏矩形的计算对GUI框架来说很麻烦…

给我给整不会了…🤡🤡🤡

...

其实你的渲染架构已经比较接近墨水屏需要的模式了。

建议把渲染拆成两层:

Layout
    ↓
Paint 到内存 Buffer
    ↓
Diff
    ↓
Dirty Rect
    ↓
EPD Update

也就是说:

GUI 仍然画完整 Buffer。

最后:

Old Buffer

New Buffer

↓

比较

↓

找出变化区域

↓

通知 EPD

这样你的 GUI 不需要知道是不是墨水屏。

LCD Backend:

Memcpy framebuffer

EPD Backend:

Diff

↓

Update(Rect1)

↓

Update(Rect2)

如果以后支持真正的 E-Ink 驱动,只需要替换最后一层 Backend 即可。

所以只要遍历所有像素点,找出 [min(x),min(y),max(x),max(y)] 构成的矩形,拷贝过去即可完成刷新。

最大的问题就是CPU快不快了。

陪她去流浪 碎碎念 桃子