22

MacBook Pro を Xcode を含む Mavericks (MacOS 10.9) にアップグレードしました。Apple の「OpenGL Capabilities Table」によると、このバージョンは OpenGL 4.1 をサポートしていますが、glGetString(GL_VERSION) を呼び出すと「1.2」が返され、「#version 330」で始まる私の GLSL 3.30 シェーダーはロードを拒否し、そのバージョンを示しています。はサポートされていません。

4.1 のサポートを有効にするには、Mavericks に対して何かを行う必要がありますか?

4

6 に答える 6

23

OS X で下位レベルの API のいずれかを使用してピクセル形式をリクエストする場合、コア プロファイルを使用するには、属性リストに以下を追加する必要があります。

CGL:

  kCGLPFAOpenGLProfile,     kCGLOGLPVersion_3_2_Core

NSOpenGL:

  NSOpenGLPFAOpenGLProfile, NSOpenGLProfileVersion3_2Core

現在、特定の定数は...3_2Coreという名前になっていますが、実際には、非推奨の機能をすべて削除し、少なくとも OpenGL 3.2 (つまり、コア プロファイル) をサポートするコンテキストを要求することを意味します。この同じ定数を使用して、4.1 または 3.3 のコンテキストを取得できます。正直なところ、定数に実際のバージョン番号を含めることは、おそらく悪い選択でした。

ピクセル形式を要求するときにこれを指定しない場合、OS X はそれぞれkCGLOGLPVersion_LegacyまたはをNSOpenGLProfileVersionLegacy返します。これにより、OpenGL 2.1 機能に制限されます。

より高いレベルのフレームワークを使用している場合は、API リファレンスを参照する必要があります。ただし、OS X では、OpenGL 2.1 よりも新しいものにアクセスするには、コアプロファイル コンテキストが必要であることに注意してください。

于 2013-11-08T21:32:07.423 に答える
13

OpenGL ライブラリ GLFW を使用します。最新バージョンは 3.0.4 です... glfw init を初期化した直後

if (!glfwInit())
{
    printf("glfwInit() fail to initualize. \n");
    glfwTerminate();
    exit(-1);
}

glfwInit()を初期化した後、これらの 4 行のコードを含めます。これらの 4 行のコードにより、OS でサポートされている最高のバージョンを使用できるようになります。Macではopengl 4.1

glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 2);

次に、ウィンドウを作成します。

_Window = glfwCreateWindow(width, height, title, 0, 0);

作成されていることを確認してください。

if (!_Window) {
    printf("Display window fail to create. \n");
    glfwTerminate();
    exit(-1);
}

次に、次を使用して現在のウィンドウにします。

glfwMakeContextCurrent(_Window);

それを現在のウィンドウにした後、あとはメインループを作成するだけです。

while (!glfwWindowShouldClose(_Window))
{
    ........
    glfwSwapBuffers(_Window);
    glfwPollEvents();
}

glfwPollEvents(); が含まれていることを確認してください。ループ内で、閉じるボタンを使用してウィンドウを閉じることができます。xcode でライブラリをコンパイルするのに問題がある場合は、ここにメッセージを送ってください。ライブラリのコピーをお送りします。

于 2014-02-28T23:57:12.687 に答える
1

http://support.apple.com/kb/HT5942

サイトのタイトルは「Mac コンピュータ: OS X Mavericks での OpenCL と OpenGL のサポート - OS X Mavericks でコンピュータがサポートする OpenGL と OpenCL のバージョンについて学ぶ」です。

于 2013-12-07T01:11:17.767 に答える
0

高レベル API として SDL を使用している場合、4.1 のサポートを得るために必要なことがいくつかあります。

まず、SDL2 2.0.1 (またはそれ以降だと思います) があることを確認してください。たとえば、brew を使用する場合:

醸造更新 醸造アップグレード sdl2

次に、SDL にコア プロファイルを要求するように具体的に指示する必要があります。

SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE );

第 3 に、Mac でコア プロファイルを要求する方法の癖により、実際には 4.1 を取得するには 3.2 を要求する必要があります (!)。これは SDL2 リポジトリで修正されたと思いますが、まだリリースされていません。

SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3); SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 2);

于 2014-01-07T21:03:01.057 に答える