このコードは、 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>
を含めると、正常に機能します。
私は何かが欠けていると確信していますが、それが何であるかはわかりません。 助けていただければ幸いです、ありがとう!
ええと..ソースファイルを掘り下げることで問題を修正することができました。 他の関数を呼び出す前に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>
は同じですか? 最初の例が浮かんでいる例を見てきました。
チュートリアルに従っていますが、 glGenLists
、 glFrustum
、 glVertex3f
関数を使用できないようです。 これらをロードするにはどうすればよいですか? 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には、これらの質問に答える資格のある素晴らしい人々がいます。
リソースをありがとうございました、そして私が私の道を見つけるのを辛抱強く助けてくれました!