2013-02-18 88 views
2

我们正在窗口中绘制图形。我们正在更新曲线每50ms 与从硬件接收的值,如传感器。 我们需要以图形格式显示这些值。所以我们每50ms更新 图。这给闪烁的问题。 我们在X11中编写代码。有没有办法避免在X11中使用 图形绘图中的闪烁。提前致谢。如何避免使用X11在图形图形中闪烁

+0

窗口库?你是直接画到屏幕上吗?如果是这样,为什么不绘制到屏幕外的缓冲区?然后在完成绘制当前50ms'窗口'的曲线时将其喷射到屏幕上。 – enhzflep 2013-02-18 07:16:27

+0

感谢您的建议,但我们已经使用位图绘制图形,然后复制到窗口,在这种情况下窗口也会闪烁。我们在子窗口中执行此图形。我们创建了三个带有一个根窗口的子窗口。我们在子窗口中绘制图形。我的疑问是我们是否需要处理事件,但现在我们没有使用任何事件 – VigneshK 2013-02-19 09:08:16

+0

答案太长以至于无法发表评论 - 请参阅已添加的“答案” – enhzflep 2013-02-19 09:34:34

回答

1

这里的关键字是双缓冲。但我不知道x11是否提供了这个开箱即用或者你需要自己实现它,所以我会离开你的谷歌搜索;)

除此之外,你可能会考虑更新频率较低。或许足够以250,500或1000毫秒的时间进行更新?这当然取决于你的用例。

1

不客气。嗯。那么,在这种情况下,我会检查将运行它的机器的X-Server设置。我最近得到了一张新的vid卡,发现openGL应用程序运行的帧数更多/秒,但质量很差 - 图像中可见“撕裂” - 您可以一直看到最后一帧和当前帧在同一时间。在启用后,在XServer的设置中等待VSynch,问题消失。不过,这听起来更像是我以前在MS Windows下遇到的一个问题。在这种特殊情况下,每次我向控件发送新图像时,窗口都会重新绘制图像窗口下的窗口/对话框的背景。所以,不是简单地更换旧图像,而是在将图像替换为图像(grrr)之前,将图像清除为图像灰色。如果您可以访问足够快的屏幕录制软件,则可以在运行时对应用程序进行视频录制,然后逐帧播放视频。或者,如果您搜索“禁用窗口背景重绘/删除X11”或类似内容,您可能会获得一些牵引力。 :)

猜猜这也取决于你是否使用Gtk +,wxWidgets或只是原始的X11代码。

+0

我们正在使用原始X11代码。我们使用XCopyArea将图像绘制到窗口。我们是否需要在代码中使用XSync命令?我们需要这样做。 – VigneshK 2013-02-19 09:41:54

+0

从XCopyArea手册页读取时,我特别感兴趣地注意到文本_“如果源矩形的区域被遮挡,并且没有保留在后台存储区中,或者指定了源绘制边界外的区域,则这些区域不是而是在所有相应的目标区域上发生,这些目标区域或者是可见的,或者是保留在后备存储区中**如果目标是具有非无背景的窗口,则目标的相应区域将以该背景平铺** “_ - 我会检查目标窗口的背景。 – enhzflep 2013-02-19 10:43:00

+0

谢谢你的回复。我们在正确的区域使用XCopyArea。在我们的代码中,我们没有将背景设置为none。我试图将XSetBackgroundPixmap设置为none,但是我没有得到正确的输出,而是整个窗口用前景色绘制。 – VigneshK 2013-02-19 11:04:20