結論から言ってしまうとSBL_PollEventの中身は通常のWin32アプリケーションで実装されるメッセージポンプと同様の処理を行うSDL_PumpEventsとメッセージキューに貯まっているウィンドウズメッセージを横取りするSBL_PeepEventsによって実装されています。
SDL_PumpEventsの実装を辿っていくと最終的に次のコードが見つかります。
これは典型的なメッセージポンプ処理の実装です。
[cpp]
// SDL_dibevents.c
void DIB_PumpEvents(_THIS)
{
MSG msg;
while ( PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE) ) {
if ( GetMessage(&msg, NULL, 0, 0) > 0 ) {
DispatchMessage(&msg);
}
}
if ( SDL_GetAppState() & SDL_APPMOUSEFOCUS ) {
DIB_GenerateMouseMotionEvent( this );
}
}
[/cpp]
SBL_PeepEventの実装を辿っていくと「SBLが管理しているイベントキューの中にある全てのイベント種類の中から最初の1つを取得する」という動作を行います。取得したイベントはSDL_CutEventが呼び出され、メッセージキューから消えます。
余談ですが、spot=(spot+1)%MAXEVENTの式があり、MAXEVENTS=128の指定のため、おそらくSDLのイベントキューのサイズは128だろうと推測する。
0 件のコメント:
コメントを投稿