ウィンドウ アプリケーション (FreeGLUT、GLFW など) のコールバック関数がどのように機能するかを理解したいと思います。
キーボード/マウス/サイズ変更イベントを 1 秒間に何回チェックしますか?
フレームレートに依存しますか、それは一定ですか、それともオペレーティングシステム固有ですか?
一般的に言えば、Unix または Windows 実装の詳細には触れずに、コールバックはおおよそ次のようなメイン イベント ループから呼び出されます。
Loop forever {
Get a message from the event queue.
Process the message
}
「メッセージの取得」の段階では、メッセージがキューに表示されるのを待つ場合、おそらく 1 ミリ秒未満の非常に短いスリープになります。イベント キューには、マウス ボタンの押下、マウス モーション イベント、キーボード イベント、サイズ変更や公開などのウィンドウ イベントなど、アプリケーションに関連するすべてのメッセージが含まれます。
「メッセージを処理する」ステップは、イベントを取得し、イベントに関連するものにディスパッチします。たとえば、マウス クリックによって、Button ウィジェットのコールバックが呼び出される場合があります。または、OpenGL 描画領域に入力ハンドラー コールバックが設定されている場合、マウス クリックでその関数が呼び出されます。
プロセスの詳細については、次の 2 つのリソースを参照してください。
Windows の場合: http://en.wikipedia.org/wiki/Message_loop_in_Microsoft_Windows
X/Motif の場合: http://www.unix.com/man-page/all/3x/XtAppMainLoop/
途中の特定のステップ (多数あります) を見たい場合は、メインの OpenGL 描画ルーチンや入力コールバック関数など、関心のある関数にブレークポイントを設定してみてください。次に、コール スタックがどのようにそこに到達したかを示します。