Compiz和OpenGL窗口

时间:2013-01-02 19:51:59

标签: opengl window freeze compiz

我通过GLX在Linux上编写了一个OpenGL应用程序。它使用glXSwapBuffers双重缓冲和通过NVIDIA X服务器设置同步到VBlank。我正在使用Compiz并且平滑移动窗口并且没有撕裂(在Compiz设置中启用了与VBlank同步)。 但是当我

  1. 尝试移动或调整OpenGL窗口或

  2. 将其他窗口移动到OpenGL窗口占用的区域

  3. 系统停滞并冻结3-4秒。移动其他 OpenGL窗口占用区域外的窗口一如既往地平滑。 此外,只有OpenGL应用程序在 因此,生成动画帧的循环交换缓冲区。 如果内容是静态的并且应用程序没有交换缓冲区则没有问题,移动各种窗口是平滑的。 可能是我的应用程序和Compiz之间的同步问题?

1 个答案:

答案 0 :(得分:2)

我不知道它是否与几年前的形状相同,但是......

您的描述与Compiz SNAFU非常匹配。每个窗口调整大小都会触发重新创建将接收窗口内容的纹理。纹理创建是一项昂贵的操作,因此应该避免。不幸的是Compiz开发人员看起来并不是最聪明的,因为他们没有意识到这个问题有一个明显的解决方案:X11中的Windows可以没有太多成本(每个Window管理器多次这样做)进行重新设计,它被称为堆叠。 Compiz 一个窗口管理器。

那么为什么Compiz没有一个桌面大小的窗口,它会重新调整那些即将调整大小的窗口,从那里获取其恒定大小的窗口纹理,并在完成调整大小操作后将窗口重新调整到其装饰框架中?

我不知道为什么会这样。无论如何,Compiz做的一些事情并不是很聪明。

如果你想解决这个问题,那么:Compiz是开源的,我刚才描述了该怎么做。