在OS-X上将Cairo Surface转换为Pygame的最快方法

时间:2010-08-17 07:15:06

标签: python macos pygame cairo

我正在寻找一种在Python中绘制流畅动画的方法。我想使用cairo,部分原因是我喜欢亚像素过滤,部分原因是因为我熟悉API。我的第一种方法是使用GTK.DrawingArea作为cairo表面的目标。虽然绘图很快,但我找不到任何可靠的方法将显示/缓冲与垂直同步联系起来,因此动画不稳定且不可靠。

我的下一个方法是尝试PyGame。使用wiki中的示例作为起点,我编写了一些简单的代码来动画各种弹跳球。链接页面上的不同方法分为两类:

  1. 画到屏幕外的开罗 ImageSurface然后使用Numpy来 将像素缓冲区转换为Pygame 表面上。
  2. 为两者共享相同的内存 表面
  3. 第一种方法很糟糕,因为转换大约需要10ms,这是我60hz帧的大部分时间片。我在带有2.2Ghz Core2Duo和Nvidia 8400的Macbook-pro上运行代码。时间非常依赖于表面的大小,这适用于800x800的窗口。

    第二种方法来自像素坐标的排序。 cairo和pygame都坚持认为他们只能使用RGB像素排序而不支持转换。问题是,当我设置一个pygame表面时,它使用BGRA像素排序,这完全阻止了我。

    现在问题是:

    1. 是否可以更改像素 任何一个库使用的格式 mac与每个兼容 其他
    2. 如果不可能是什么     最快的方式来进行转换     纯粹用Python?
    3. 如果最快的Python方式仍然存在 大部分时间都在吸吮 框架然后我如何接口 一些C代码进行转换?
    4. 取决于复杂程度 与C的接口是多少点 在那里使用pygame而不是 只是用C?
    5. 编写SDL接口

2 个答案:

答案 0 :(得分:2)

本教程也可以帮助您:http://www.pygame.org/wiki/CairoPygame

答案 1 :(得分:1)