0

Pythonでいくつかの流体力学をスケッチしています。しばらくして、もう少し速度を求めているので、実際のロジックをCで書き直し、Pythonバインディングをいくつか作成しました(SWIGを使用)。

今の私の問題は、それを良い方法でレンダリングする方法がないことです。ロジックはピクセルごとに実行されるため、ピクセルを追跡してレンダリングしたいと思います。

を受け入れるClibで関数を作成しようとすると、PythonでTypeErrorSDL_Surface*が発生します。おそらく、PyGameがそれをSDLに直接簡単にマッピングしたと考えるのは少しナイーブでした。また、Pythonは、Clibs"init"に。を返す​​ようにした場合の対処方法がわからないようですSDL_Surface*

これを行うための良い方法は何ですか?C lib内のすべてをレンダリングするだけであれば、問題はありません。しかし、私はそこにいくつかのGUIを配置したいと思います(Pythonを使用)。C libは、どのピクセルが「ダーティ」であるかをすでに追跡しています。そのリストを公開してPythonにループさせ、ダーティピクセルごとに関数を呼び出す必要がありますか?この種の巨大なループが、アプリの一部をCで書き直したかった正確な理由であるため、悪いようです。

そして、誰かがそれを提案する前に、boost.pythonは今インストールするのが少し重いので(私はWindowsを使用しているので)、私は今のところSWIGに固執します(誰かが「ちょうど」ブーストをインストールする賢い方法を持っていない限り) .python?)。

ここで銀の弾丸を期待しています。SDLを実行してClibを作成し、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 に答える