FLTK Double Window 和 FLTK Single Window 之间的区别

Difference between an FLTK Double Window and a FLTK Single Window

我对 和 FLTK Single Window and and FLTK Double Window 之间的区别感到困惑。在双 window 的 FLTK 1.4.0 文档中,我们得到这样的描述:

The Fl_Double_Window provides a double-buffered window. If possible this will use the X double buffering extension (Xdbe). If not, it will draw the window data into an off-screen pixmap, and then copy it to the on-screen window. It is highly recommended that you put the following code before the first show() of any window in your program: Fl::visual(FL_DOUBLE|FL_INDEX) This makes sure you can use Xdbe on servers where double buffering does not exist for every visual.

什么是双缓冲window?什么是屏幕外像素图?在哪种情况下,您希望使用双 Window 还是单 Window?

双缓冲的一般原理在https://en.wikipedia.org/wiki/Multiple_buffering#Software_double_buffering中解释 基本上,数据被写入缓冲区,直到需要绘制为止。然后将整个缓冲区复制到视频 ram(windows 术语中的 bitblt)。

优点:性能流畅——没有闪烁。 缺点:您在屏幕上看到的内容比写入缓冲区的数据晚了纳秒。除非你的眼睛能那么快,否则你不会注意到其中的区别。

屏幕外像素图只是一个像素图。像素图是代码写入的缓冲区。

对于像消息框或数据输入表单这样变化不大的表单,您可以使用单个 window。如果你正在玩图形或显示变化非常快的数据,如倒数计时器、滑块、仪表等,那么一定要使用双 window.

FLTK 建立在本机图形例程之上。在Linux上,即X-Windows。在 MS-Windows 上,即 windows SDK。调用某些例程可以神奇地加速不同平台的图形。

编辑

它很流畅,因为它在硬件准备就绪时写入硬件(绘画)。不是写多写少,而是写得对。

如果在硬件还没有准备好时写入硬件,就会出现各种奇怪的效果:闪烁、波纹、阻塞等

它确实使用了更多的内存 - 大约与像素图一样多。