FLTK双窗口和FLTK单窗口的区别
Posted
技术标签:
【中文标题】FLTK双窗口和FLTK单窗口的区别【英文标题】:Difference between an FLTK Double Window and a FLTK Single Window 【发布时间】:2021-01-08 02:15:29 【问题描述】:我对@987654321@ 和FLTK Double Window 之间的区别感到困惑。在双窗口的 FLTK 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单窗口的区别的主要内容,如果未能解决你的问题,请参考以下文章