1

編集:解決しました。これは GLFW の問題であり、Mountain Lion や OpenGL とは関係ありません。

以前は 2009 Macbook Pro で Lion を使用していました。XCode では、以下は問題なく動作しました。

 glfwOpenWindowHint(GLFW_OPENGL_VERSION_MAJOR, 3);       
 glfwOpenWindowHint(GLFW_OPENGL_VERSION_MINOR, 2);
 glfwOpenWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
 glfwOpenWindowHint(GLFW_WINDOW_NO_RESIZE, GL_TRUE);
 glfwOpenWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);

 ALLEGE(glfwOpenWindow(SCREEN_SIZE.x, SCREEN_SIZE.y, 8, 8, 8, 8, 0, 0, GLFW_WINDOW) != GL_FALSE);    // msg = "glfwOpenWindow failed. Can your hardware handle OpenGL 3.2?"

 int major, minor, rev;
 glfwGetGLVersion(&major, &minor, &rev);
 fprintf(stderr, "OpenGL version recieved: %d.%d.%d\n", major, minor, rev);

そして、印刷しOpenGL version received: 3.2ました。Mountain Lion にアップグレードした後、上記のコードは機能しません (glfwOpenWindow が false を返すため、ALLEGE でハングアップします)。すべての GLFW ウィンドウ ヒントを取り除く例:

 ALLEGE(glfwOpenWindow(SCREEN_SIZE.x, SCREEN_SIZE.y, 8, 8, 8, 8, 0, 0, GLFW_WINDOW) != GL_FALSE);    // msg = "glfwOpenWindow failed. Can your hardware handle OpenGL 3.2?"

 int major, minor, rev;
 glfwGetGLVersion(&major, &minor, &rev);
 fprintf(stderr, "OpenGL version recieved: %d.%d.%d\n", major, minor, rev);

使用する OpenGL のバージョンを OS が選択できるようにします。上記のコードはコンパイルおよび実行されますOpenGL version received: 2.1が、コンソールに出力されます。

私は「え?」と言いました。詳細については、システム情報アプリを参照してください。フレームワーク セクションは、私が持っている OpenGl フレームワークが 1.8.6 であることを知らせてくれます。

私の OpenGL フレームワークが実際にダウングレードされた場合、私はあらゆる種類の混乱とかなり動揺しています。フレームワークを手動でアップグレードする方法がわかりません。何が起こっているのか理解するのを手伝ってくれる人はいますか?

Edit1 : OpenGL Extensions Viewer.app を使用すると、OpenGl のバージョンが2.1 NVIDIA-8.0.61

Edit2:問題は、プロジェクトが正しいプロファイル(コアではなく互換性)を使用していないことに関連しているように見えますが、glfwのヒントを使用してコアを指定すると、たとえば

 glfwOpenWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);

への後続の呼び出しはglfwOpenWindow()失敗します。ウィンドウが正常に開かれるまで glGetError が機能しないため、この問題を診断する方法がわかりません。

4

1 に答える 1

2

ソースから GLFW を再コンパイルし、それを静的リンクで使用すると、問題が解決するだけでした。内部エラーが原因glfwOpenWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);で、正しく動作しませんでした。

于 2013-01-20T23:54:39.487 に答える