私はSDLを使用しており、GTKウィジェット([GTKSDL]、http://gtksdl.sourceforge.net「GTKSDLへのダイレクトリンク」のおかげで)を使用しています。GTKSDL - イベントの処理
ウィジェットはGTKで.objファイルを読み込んでOpenGLでモデリングしてSDLウィジェットに表示するだけです。 これまでのところ、すべてが機能しています。
SDLイベントを使用してウィジェット内のオブジェクトを移動しようとすると問題が発生します。 GTKにSDLウィンドウを統合する前に、イベントは問題なく動作していました。 また、いったん3Dモデルが表示されると、SDLのイベントループが何かを待っているように見えるので、私はGTKとやりとりすることができません。
私は2つのイベントループをフォークすることを考えましたが、GTKとSDLが同時にXサーバーにアクセスしようとしているようで、複数の競合が発生するようです。 私はSDLで無限ループを削除しようとしましたが、動作しません。
私はデビアンにいるので、私は "GTKSdl"の実装をインターネットで検索しましたが、それは時代遅れです。
UPDATE:
私はすでにSDLPollEventとg_idleアドオンを使用しています。私は(GTKとの)ファイルを選びました後 だから右、私は、構造体「t_stage」を記入し、g_idle_add使用:
g_idle_add((GSourceFunc) &mainloop, stage);
gboolean mainloop(t_stage *stage)
{
SDL_Event evt;
while (SDL_PollEvent(&evt) != 0)
{
if (evt.type == SDL_MOUSEBUTTONDOWN)
on_mouse_down(stage, &(evt.button));
else if (evt.type == SDL_MOUSEBUTTONUP)
on_mouse_up(stage, &(evt.button));
else if (evt.type == SDL_MOUSEMOTION)
on_mouse_move(stage, &(evt.motion));
else if (evt.type == SDL_KEYDOWN)
handle_key(stage, evt.key.keysym.sym, 1);
else if (evt.type == SDL_KEYUP)
handle_key(stage, evt.key.keysym.sym, 0);
}
apply_keys(stage);
draw(stage, 0);
return (1);
}
をしかし、イベントがまだ受信されません。何か案は ?
g_idle_addはソリューションのようですが、g_idle_addによって呼び出される関数はgPointerデータのパラメータとしてのみ使用されるため、SDLイベントをどのように扱うことができますか? –
私はあなたにそれが通知されているかどうか分からない、私は物事をより明確にするために私の答えに更新を加えた。 – liberforce
私はすでにSDLPollEventとg_idle addを使用しています。 ファイルを選択した直後に、構造体 "t_stage"を埋め込み、g_idle_addを使用します: g_idle_add((GSourceFunc)&mainloop、stage); ここにプロトタイプがあります: void mainloop(t_stage * stage) しかしイベントはまだ受信されません。何か案は ? –