【发布时间】:2017-09-19 12:50:06
【问题描述】:
我正在尝试实现一个占用尽可能少系统资源的跨平台 UI 库。我正在考虑使用我自己的软件渲染器或 opengl。
对于固定控制一切都很好,我只能在需要时重新绘制。然而,在实现动画时,尤其是像 sublime 文本中的“阶段”插入符号这样的动画闪烁插入符号,我看不到平衡资源使用和性能的简单方法。
对于闪烁的插入符号,需要非常频繁地重新绘制插入符号(我猜至少每秒 15-20 次)。一方面,软件渲染器支持部分重绘,但速度太慢而无法实用(大型重绘区域为 3-4 fps,例如 1000x800,这使得无法实现动画)。另一方面,据我所知,opengl 并不能很好地支持部分重绘,这意味着整个屏幕需要不断地以 15-20 fps 的速度渲染。
所以我的问题是:
- 插入符号通常如何在各种 UI 系统中实现?
- 有没有办法让 opengl 只渲染到屏幕的一部分?
- 我知道 glViewport 可以渲染到屏幕的一部分,但由于双缓冲或其他原因,屏幕的其余部分不会保持原样。这样我还是需要重新渲染整个屏幕。
【问题讨论】:
-
如果你每秒画任何东西 15-20 次,人眼无法感知变化。这就是为什么 15-20 fps 是所需帧速率的基础。闪烁的插入符号应该以 0.3-0.6 fps 的速度绘制。
-
好吧,如果你看一下 sublime text 的插入符号,你会发现它实际上是平滑动画的,所以我猜这需要比没有动画时更高的 fps。
标签: user-interface opengl cross-platform caret