Glad: glGetStringはnull例外を引き起こします

作成日 2019年12月12日  ·  9コメント  ·  ソース: Dav1dde/glad

このコードは、 glad.cに、関数IDがNULLとして定義されているため、null例外を発生させます。

#include <glad/glad.h>
#include <GLFW/glfw3.h>

int main(void) {
    GLFWwindow* window;

    /* Initialize the library */
    if (!glfwInit())
        return -1;

    /* Create a windowed mode window and its OpenGL context */
    window = glfwCreateWindow(640, 480, "Hello World", NULL, NULL);
    if (!window) {
        glfwTerminate();
        return -1;
    }

    /* Make the window's context current */
    glfwMakeContextCurrent(window);

    /* Loop until the user closes the window */
    while (!glfwWindowShouldClose(window)) {
        /* Render here */
        glClear(GL_COLOR_BUFFER_BIT);
        printf("%s\n", glGetString(GL_VERSION));

        /* Swap front and back buffers */
        glfwSwapBuffers(window);

        /* Poll for and process events */
        glfwPollEvents();
    }

    glfwTerminate();
    return 0;
}

嬉しいのではなく、プラットフォームヘッダー<gl/gl.h>を含めると、正常に機能します。

私は何かが欠けていると確信していますが、それが何であるかはわかりません。 助けていただければ幸いです、ありがとう!

glad1 question

全てのコメント9件

ええと..ソースファイルを掘り下げることで問題を修正することができました。 他の関数を呼び出す前にgladLoadGL();を呼び出しました。 それは正しい方法ですか?

ええ、それはまさにあなたがする必要があることです、あなたのコンテキストを現在のglfwMakeContextCurrentにした後、あなたはうれしいことを初期化する必要があります。 これはgladLoadGLを介して行うことができます。または、GLFWを使用しているため、GLFWを使用し、代わりにgladLoadGLLoader((GLADloadproc) glfwGetProcAddress)を使用して喜んで初期化する必要があります。 また、安全のために、ローダー関数の戻り値を確認します。

コードをこの例と比較できます。

あなたのコード:

    /* Make the window's context current */
    glfwMakeContextCurrent(window);

    /* Load OpenGL functions using glad */
    if (!gladLoadGLLoader((GLADloadproc) glfwGetProcAddress)) {
        glfwTerminate();
        return -1;
    }

ああ、どうもありがとうございました!
〜また、私はこれは次のようにタグ付けされて気づいたglad1どこ行うI GET、 glad2 ?〜
気にしないでください、まだリリースされていないことに気づきました。

ご協力ありがとうございました!

また、 <glad/gl.h><glad/glad.h>は同じですか? 最初の例が浮かんでいる例を見てきました。

チュートリアルに従っていますが、 glGenListsglFrustumglVertex3f関数を使用できないようです。 これらをロードするにはどうすればよいですか? GLFWの例は、これらが定義されている場所に<glad/gl.h>インポートするだけのようです。 これらの定義をWebジェネレーターから取得できないようです。 何が足りないのですか?

これらは「非推奨」のOpenGL <3(.3)関数であり、本当に古いチュートリアルです。通常、このようなチュートリアルには従いたくないでしょう。

これらの機能が本当に必要な場合は、互換性プロファイルと少なくともOpenGL2.1を選択する必要があります。 ただし、これを行うことはお勧めしません。 glVertex3fまたはglBegin / glEndチュートリアルが表示された場合は、別のチュートリアルを探してください。

GLFWは現在glad2の例を更新しています(https://glad.shまたはglad2ブランチにあります)。APIが作り直され、より多くの機能が追加されています。 使用するのは問題ありませんが、まだいくつかのことについて確信がありません(たとえば、ファイル/関数の名前を変更する可能性があります)。そのため、ここでマスターに配置していないか、「非ベータ」バージョンをまだリリースしていません。

一般に、使用しているgladのバージョンは関係ありません。どちらのバージョンも、OpenGLを完全にサポートしています。唯一の違いは、APIとファイルの名前です。 glad1またはglad2を使用して任意のOpenGLプログラムを実行できます。

ああ、知らなかった。 知らせてくれてありがとうございます!

OpenGLとVulkanについて学び始めたところです。 learnopengl.comは十分なリソースですか? そうでなければ、私は本当にいくつかの提案を使うことができます。 広くサポートされているように見えるので、少なくともOpenGL4.2を使用する予定です。

追加するかもしれないが、私は別の質問があります。 OpenGLがその有用性を失っていると言う人をたくさん見ました。 これはどれほど真実ですか? OpenGLを学習して、レンダリングに慣れ、スキルセットに追加します。 雇用主はこのスキルを探していますか?

OpenGLとVulkanについて学び始めたところです。 learnopengl.comは十分なリソースですか? そうでなければ、私は本当にいくつかの提案を使うことができます。 広くサポートされているように見えるので、少なくともOpenGL4.2を使用する予定です。

それは本当に良いリソースです。

追加するかもしれないが、私は別の質問があります。 OpenGLがその有用性を失っていると言う人をたくさん見ました。 これはどれほど真実ですか? OpenGLを学習して、レンダリングに慣れ、スキルセットに追加します。 雇用主はこのスキルを探していますか?

個人的には、OpenGLが間もなく終了するのではないかと思います。たとえそれが進んだとしても、あなたが学んだスキルが他のAPI、DirextX、Vulkanなどで役立つとは言えません。 あなたはAPIの使い方を学ぶだけでなく、その背後にある数学と概念を学んでいます。

一般に、このような質問がある場合、Freenode #OpenGLには、これらの質問に答える資格のある素晴らしい人々がいます。

リソースをありがとうございました、そして私が私の道を見つけるのを辛抱強く助けてくれました!

このページは役に立ちましたか?
0 / 5 - 0 評価