3D モデリング プロジェクトでは、SDL を使用し、GTK ウィジェットに含めています ([GTKSDL] のおかげで、http ://gtksdl.sourceforge.net "GTKSDL への直接リンク")。
ウィジェットは、GTK を使用して .obj ファイルをロードし、OpenGL を使用してモデル化し、SDL ウィジェットに表示するだけです。これまでのところ、すべてが機能しています。
SDL イベントを使用してウィジェット内のオブジェクトを移動しようとすると、問題が発生します。SDL ウィンドウが GTK に統合される前は、イベントは問題なく機能していました。また、3D モデルが表示されると、SDL のイベント ループが何かを待っているように見えるため、GTK と対話することは不可能です。
2 つのイベント ループを fork することを考えましたが、GTK と SDL が同時に X サーバーにアクセスしようとしていて、複数の競合が発生しているようです。SDL の無限ループを削除しようとしましたが、うまくいきません。
私は Devian を使用しています。インターネットで「GTKSdl」の実装を検索しましたが、時代遅れのようです。パッチを適用する方法はありますか?
アップデート:
私はすでに SDLPollEvent と g_idle add を使用しています。したがって、(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);
}
しかし、イベントはまだ受信されていません。何か案は ?