0

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

我现在的问题是我没有如何以一种好的方式渲染它。逻辑是逐像素运行的,所以我想要跟踪和渲染像素。

如果我尝试在接受 a 的 C 库中创建一个函数,Python 会给我一个TypeErrorSDL_Surface*,我可能有点天真地认为 PyGame 很容易将它直接映射到 SDL。如果我让 C 库“init”返回一个SDL_Surface*.

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

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

我希望这里有一颗灵丹妙药。如何制作 C 库、运行 SDL、与 Python 共享渲染目标、运行 PyGame?

4

1 回答 1

0

您是否尝试过类似以下的方法SDL_Surface*从 python 对象中获取?

PySurfaceObject *obj;
SDL_Surface *surf;
if (!PyArg_ParseTuple(args, 'O!', &PySurface_Type, &obj) {
    return NULL; # or other action for error
}
surf = PySurface_AsSurface(obj);
于 2009-11-24T04:10:31.477 回答