1

ウィンドウ アプリケーション (FreeGLUT、GLFW など) のコールバック関数がどのように機能するかを理解したいと思います。

キーボード/マウス/サイズ変更イベントを 1 秒間に何回チェックしますか?

フレームレートに依存しますか、それは一定ですか、それともオペレーティングシステム固有ですか?

4

1 に答える 1

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 描画ルーチンや入力コールバック関数など、関心のある関数にブレークポイントを設定してみてください。次に、コール スタックがどのようにそこに到達したかを示します。

于 2013-08-28T17:37:56.370 に答える