如何直接写入GTK / GDK中的显示缓冲区

时间:2011-01-03 19:28:47

标签: c linux gtk gdk

我有一个程序在窗口中显示具有固定帧速率(例如30 fps)的动画。

目前我使用SDL但不幸的是它缺乏桌面集成(如拖放),现在我想使用GTK。

所以我想做什么(假设窗口是双缓冲的):

1 obtain off-screen buffer
2 render my stuff to buffer
3 tell the toolkit to swap buffers
4 update window
5 repeat

除了非常基本的GDK / GTK调用之外,我不想使用任何功能来创建和管理窗口并接收输入事件。

在他们建议使用GdkRGB的FAQ中。但是,在GdkRGB的官方文档中,他们使用了不推荐使用的gdk_draw_rgb_image()函数,实际上大多数GdkRGB函数都是。

作为替代方案,他们建议使用OpenGL。问题是它需要一些不常见的库,如GtkGLArea,它不是GTK的一部分(我不想依赖任何默认安装的库)。此外,在我的系统上,驱动程序的OpenGL支持是有限的。

我已经研究过Cairo(它是一些已弃用的函数的替代品)但是这会为我相对简单的问题添加更多的样板代码(我怀疑需要额外的开销)。

1 个答案:

答案 0 :(得分:4)

我个人会说GdkRGB对你来说是一个合理的选择。它的设计很简单,其范围几乎与您描述的完全相同。使用不推荐使用的代码很有意义 - 如果你想让现在的东西运转起来,它可能是一个很好的选择,但是如果你希望你的代码能够成长并在将来保持不变,你应该看看替代方案。

其中,开罗可能是你最好的选择。只有更多的样板 - 你应该看看http://cairographics.org/samples/,它有一些非常小而且易于理解的例子。开罗的一个潜在好处是它更有可能是硬件加速。

[免责声明:我是GdkRGB的原作者。这是可悲的看到它现在已经过时,但我想它功成身退以及]