8

私は Mac で作業しています。FreeGlut をコンパイルしてインストールしましたが、OpenGL 3.2 コンテキストを取得できないようです。しかし、GLFWを使用している限り問題なく取得できています。したがって、GLFW では、このコードは問題なく動作します。

    glfwOpenWindowHint(GLFW_OPENGL_VERSION_MAJOR, 3);
    glfwOpenWindowHint(GLFW_OPENGL_VERSION_MINOR, 2);
    glfwOpenWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
    glfwOpenWindow(500, 500, 8, 8, 8, 8, 24, 8, GLFW_WINDOW)

しかし、FreeGlut では、このコードは失敗します (on glutCreateWindow):

glutInitContextVersion (3, 2);
glutInitContextProfile(GLUT_CORE_PROFILE);  
glutInitWindowSize (width, height); 
glutInitWindowPosition (300, 200);
int window = glutCreateWindow (argv[0]);

失敗するエラーは次のとおりです。

X Error of failed request:  BadRequest (invalid request code or no such operation)
  Major opcode of failed request:  34 (X_UngrabKey)
  Serial number of failed request:  29
  Current serial number in output stream:  29

Intel HD4000 グラフィックスを搭載した MacOS X 10.8 Mountain Lion で実行し、XQuartz を X11 サーバーとしてインストールし、ソースから FreeGlut 2.8 をコンパイルしてインストールしました。

何が問題なのか誰か知っていますか?

4

3 に答える 3

1

10.8 および 10.7 では、GL コンテキストを設定するときに明示的に呼び出した場合、GL 3.2 を使用できます。Apple は、GL 2.1 である「レガシー プロファイル」と区別するために、これを「コア プロファイル」と呼んでいます。

OSX 上の Wine でこの問題に遭遇しました。これは OpenGL 3.2 をサポートしていません。私の理解では、X11 サーバー (Apple X11 または XQuartz) は現在 3.2 サポートを実装しておらず、それを有効にするためにどこかに切り替えるスイッチもありません。3.2 プロファイルは一部の既存の GL アプリケーションを破壊するため、互換性の問題である可能性があります。

この投稿では、GLFW (または、Apple の GLUT.framework がまだある場合) を使用することをお勧めします。

このページでは、OSX での GL スタックについて説明し、GLX での 2.1 の問題を確認します。

于 2013-02-26T19:11:18.247 に答える
0

フラグを含める必要があります。通常はバージョンの下にあります。次のようになります。

glutInitContextFlag(GLUT_FOWARD_COMPATIBLE);
于 2014-07-14T15:01:08.663 に答える
0

Freeglut は SGI GLUT Toolkit の拡張実装であり、(廃止されたハードウェアに関するいくつかの例外を除いて) 同じ機能を実装しています。

残念ながら、これには厳密な CORE/FORWARD COMPATIBLE 実装では機能しなくなる多くの機能が含まれています。

通常、バージョンまたはプロファイルを指定せずにコンテキストを要求すると、ドライバーと GL ツールキットの組み合わせが提供できる最高のものを取得できます。これは通常、コア プロファイルではなく互換性プロファイルです。

互換性プロファイルを使用することで失われる唯一のものは、推奨されない関数の想定されたチェックであることに注意してください。すべての新しいコア機能は問題なく動作するはずです。

freeglut に関するこの問題は、Apple に限定されたものではなく、一部の Gallium ドライバーを使用する Linux でも発生します。これを修正する短期的な意図があるかどうかは明らかではないため、CORE/FORWARD COMPATIBLE を使用する必要がある場合は、おそらく GLFW または SDL に切り替える必要があります。

于 2014-02-23T23:16:22.493 に答える