0

glutMainloop() 関数について本当に混乱しています。この関数のループで使用される関数は? glutIdleFunc() が使われていると思っていたのですが、この関数を使わないコードを見たことがあります。

#include <GL/glut.h>

static void RenderSceneCB()
{
    glClear(GL_COLOR_BUFFER_BIT);
    glutSwapBuffers();
}

static void InitializeGlutCallbacks()
{
    glutDisplayFunc(RenderSceneCB);
}


int main(int argc, char** argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGBA);
    glutInitWindowSize(1024, 768);
    glutInitWindowPosition(100, 100);
    glutCreateWindow("Tutorial 01");

    InitializeGlutCallbacks();

    glClearColor(0.0f, 0.0f, 0.0f, 0.0f);

    glutMainLoop();

    return 0;
} 

また、このコードで InitializeGlutCallbacks() が使用されるのはなぜですか? glutDisplayFunc(RenderSceneCB); だけではないのはなぜですか。InitializeGlutCallbacks() の代わりに書かれていますか? 最後に、なぜ InitializeGlutCallbacks() は static なのですか?

4

1 に答える 1

2

本当に必要な唯一のコールバック (何かが起こるたびに呼び出される関数) は、アプリケーションが表示しようとしているものを記述する必要があるときに呼び出される glutDisplayFunc です (これは通常、1 秒あたり約 60 回行われますが、数によって異なります)。コンピューターのパフォーマンスや垂直同期など)。

glutIdleFunc は、他に何もすることがないときに呼び出される関数ですが (そのためアイドル状態になっています)、必須ではありません。この関数は、アプリケーションの設計方法によって必要になりますが、上記のプログラムでわかるように、主にオプションです。

InitializeGlutCallbacks() を呼び出す理由については、これが「優れたプログラミング プラクティス」と呼ぶことができるものです。繰り返しますが、必須ではありませんが、すべての初期化関数を関数内にまとめるとよいので、コードを読むときに役立ちます。

最後に、他のモジュールがそれらにアクセスできないようにする以外に、これらの関数を静的にする理由がまったくわかりません。「静的」を削除してみると、すべて同じように機能することがわかります。

編集:どういうわけか過剰摂取を余儀なくされていると推測しているので説明しましたが、他のポスターに同意します。選択できる場合はGLFWがより良いオプションです。

于 2013-01-23T15:03:55.297 に答える