带有Python绑定的C lib,两者都想渲染

时间:2009-11-23 20:06:39

标签: python c sdl swig pygame

我在Python中描绘了一些流体动力学。过了一会儿,我正在寻找更快的速度,所以我重写了C中的实际逻辑,并建立了一些Python绑定(使用 SWIG )。

我现在的问题是我不知道如何以良好的方式呈现它。逻辑是逐像素运行的,因此像素是我想要跟踪和渲染的。

如果我尝试在接受SDL_Surface*的C lib中创建一个函数,那么Python会给我一个 TypeError ,我觉得PyGame很容易直接映射到那里我可能有点天真SDL。如果我使C libs“init”返回SDL_Surface*,Python似乎也不确定该怎么做。

这样做的好方法是什么?如果我只是在C lib中渲染所有东西,那就没问题了。但我想在那里放一些GUI(使用Python)。 C lib已经跟踪哪些像素是“脏”的。我是否应该公开该列表并让Python循环遍历它,为每个脏像素调用一个函数?看起来很糟糕,因为那些巨大的循环是我想用C语言重写部分应用程序的确切原因。

在有人建议之前, boost.python 现在安装有点沉重(因为我在Windows上),所以我暂时坚持使用SWIG(除非有人)有一个聪明的方法来安装“只”boost.python?)。

我希望这里有一颗银弹。 如何制作C lib,运行SDL,与Python共享渲染目标,运行PyGame?

1 个答案:

答案 0 :(得分:0)

您是否尝试过类似以下内容从python对象获取SDL_Surface*

PySurfaceObject *obj;
SDL_Surface *surf;
if (!PyArg_ParseTuple(args, 'O!', &PySurface_Type, &obj) {
    return NULL; # or other action for error
}
surf = PySurface_AsSurface(obj);