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

3
我正在寻找一种在Python中绘制流畅动画的方法。我想使用cairo,部分原因是我喜欢子像素过滤,部分原因是我熟悉API。我的第一种方法是将GTK.DrawingArea用作cairo surface的目标。虽然绘图很快,但我无法找到任何可靠的方法来将显示/缓冲与垂直同步绑定,因此动画会出现卡顿和不可靠的情况。
我的下一个尝试是尝试PyGame。使用wiki上的例子作为起点,我编写了一些简单的代码来动画显示各种弹跳球。链接页面上的不同方法分为两类:
1. 绘制到离屏cairo ImageSurface,然后使用Numpy将像素缓冲区转换为Pygame surface。 2. 共享两个surface的相同内存
第一种方法的性能非常差,因为转换需要大约10毫秒,这是我60hz帧的大部分时间片。我在Macbook-pro上运行代码,配备2.2Ghz Core2Duo和Nvidia 8400。时间非常依赖于表面的大小,这是一个800x800窗口的情况。
第二种方法从像素坐标的排序中获得surface。cairo和pygame都坚称它们只能使用RGB像素排序,不支持转换。问题在于,当我设置pygame surface时,它使用BGRA像素排序,这完全使我无法继续。
现在是问题时间:
1. 是否可以更改Mac上任一库使用的像素格式以与彼此兼容? 2. 如果不可能,纯Python中最快的转换方式是什么? 3. 如果最快的Python方式仍然占用大部分帧时间,则如何接口到一些C代码进行转换? 4. 根据与C交互的复杂程度,在使用pygame而不是仅在C中编写SDL接口方面有多少意义?
2个回答

1

它们都遇到了问题2 - 两个库中颜色分量的排序不同,因此需要进行某种形式的转换。那个页面实际上是我几年前开始的地方 :) - Andrew

0

恐怕不行 - 我在寻找的是非常具体的东西。 - Andrew

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接