FLTK双窗口和FLTK单窗口的区别

Posted

技术标签:

【中文标题】FLTK双窗口和FLTK单窗口的区别【英文标题】:Difference between an FLTK Double Window and a FLTK Single Window 【发布时间】:2021-01-08 02:15:29 【问题描述】:

我对@9​​87654321@ 和FLTK Double Window 之间的区别感到困惑。在双窗口的 F​​LTK 1.4.0 文档中,我们得到这样的描述:

Fl_Double_Window 提供双缓冲窗口。 如果可能,这将使用 X 双缓冲扩展 (Xdbe)。如果没有,它会将窗口数据绘制到屏幕外的像素图中,然后将其复制到屏幕上的窗口中。 强烈建议您将以下代码放在程序中任何窗口的第一个 show() 之前: FL::visual(FL_DOUBLE|FL_INDEX) 这确保您可以在不为每个视觉对象都存在双缓冲的服务器上使用 Xdbe。

什么是双缓冲窗口?什么是离屏像素图?您希望在哪种情况下使用双窗口与单窗口?

【问题讨论】:

【参考方案1】:

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

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

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

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

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

编辑

它很顺利,因为它在硬件准备好时写入硬件(绘画)。它不是写得更多或更少,而是在正确的时间。

如果硬件在未准备好时写入,可能会发生各种奇怪的影响:闪烁、涟漪、阻塞等。

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

【讨论】:

您能否澄清一下您所说的“性能”是什么意思?它是否“顺利”是因为他们在 gui 的每个“绘画”之间的时间更少?另外,这是否意味着双窗口会使用更多 RAM?

以上是关于FLTK双窗口和FLTK单窗口的区别的主要内容,如果未能解决你的问题,请参考以下文章

FLTK 等待事件关闭窗口

FLTK 模态窗口

FLTK:窗口聚焦在 MacOS 上时的事件

如何使用 FLTK 在 Windows、Mac OS X 和 Linux 中使窗口透明?

我可以使用 FLTK 1.3 在不同线程上创建窗口吗?

创建自定义 fltk 对话框/模态窗口