11

Xcode 5 (Mac OSX 10.8.4) で OpenGL プロジェクト用に GLFW3 をセットアップしようとしています。プロジェクトを問題なくインストールしてGLFW3にリンクしました。プロジェクトでウィンドウが正常に作成され、ウィンドウでマウスとキーボードの入力を検出できたので、GLFW3 が正しく接続されたと思います (または、少なくともそう見えました)。

しかし、オブジェクトを描画しようとすると問題が発生しました。これは、エラーが表示されたコード スニペットです。

#include <GLFW/glfw3.h>    

void LoadObject()
{
    glGenVertexArrays(1, &VAO_myObj); // ERROR : Use of undeclared identifier 'glGenVertexArrays'
    glBindVertexArray(VAO_myObj);     // ERROR : Use of undeclared identifier 'glBindVertexArray'


    glGenBuffers(1, &VBO_myObj);                // No error
    glBindBuffer(GL_ARRAY_BUFFER, VBO_myObj);   // No error

    glBufferData(blah blah blah);      // No error

    glEnableVertexAttribArray(0);      // No error
    glVertexAttribPointer(blah);       // No error


    glBindBuffer(GL_ARRAY_BUFFER, 0);  // No error
    glBindVertexArray(0);              // ERROR : Use of undeclared identifier 'glBindVertexArray'
}

というわけで、GLFW3はどうにかしてそれらの機能へのリンクに失敗したのではないかと思いました(?)。Xcode に「glGen...」と入力すると、ポップアップ ウィンドウに次の 4 つの関数しか表示されませんでした。

void glGenBuffers(GLsizei n, GLuint * buffers)
GLuint glGenLists(GLsizei range)
void glGenQueries(GLsizei n, GLuint * ids)
void glGenTextures(GLsizei n, GLuint * textures)

そのため、 glGenVertexArrays() が実際にライブラリから欠落している可能性が最も高い.

「glBind...」についても同様に、Xcode に名前を入力すると、ポップアップ ウィンドウに次のようなものだけが表示されました。

void glBindAttribLocation(GLuint program, GLuint index, const GLchar * name)
void glBindBuffer(GLenum target, GLuint buffer)
void glBindTexture(GLenum target, GLuint texture)

リストのどこに glBindVertexArray() が表示されましたか。

そのため、glGenVertexArrays() と glBindVertexArray() が欠落しているようです。しかし、なぜそのような重要な機能を見逃したのでしょうか? ですから、私自身がここで何かを見逃している可能性が最も高いです。

以前に Xcode 5 を使用した GLFW3 でこの問題に遭遇したことがある人がいるかどうか疑問に思っています。ちなみに、私は glew やその他の OpenGL サポートのものは使用していません。私はGLFW3のみを使用しています。

この問題に関するヒントやポインタをいただければ幸いです。

余談ですが、最新の (シェーダーベースの) OpenGL プロジェクト用に Mac でウィンドウを表示するには、どのツール (glfw 以外) をお勧めしますか?

よろしくお願いいたします。

4

2 に答える 2

20

<OpenGL/gl3.h>OpenGL 3.2 コア API 呼び出しを使用するには、OS X に含める必要があります。両方を含めた場合、コンパイラの警告が表示される可能性があることに注意してください<OpenGL/gl.h><OpenGL/gl3.h>これは、次のgl3.h2 つの目的があるためです。

  1. コア OpenGL 3.2 の関数、列挙型、および型定義を提供します。
  2. コア OpenGL 3.2 で無効な非推奨の関数、列挙型、および型定義を削除します。


それらは事実上相互に排他的であり、適切なヘッダーは使用しているコンテキストのバージョンによって異なります。

  • MacOS X 10.7+: (OpenGL: 2.1 )

    • #include <OpenGL/gl.h>


  • MacOS X 10.7+: (OpenGL: 3.2コア)

    • #include <OpenGL/gl3.h>
于 2013-11-07T02:05:02.673 に答える
13

GLFW3 には<GL/gl.h>デフォルトで含まれています。を含めるには、前にどこかに<GL/gl3.h>固執する必要があります#define GLFW_INCLUDE_GLCOREARB#include <GLFW/glfw3.h>

GLFW3 の Mac OSX インストールでは、homebrew を使用して、include の前の define マクロでOpenGL/gl3.h. ヘッダー ファイル内で確認できます。

#if defined(__APPLE__)
 #if defined(GLFW_INCLUDE_GLCOREARB)
  #include <OpenGL/gl3.h>
  #if defined(GLFW_INCLUDE_GLEXT)
   #include <OpenGL/gl3ext.h>
  #endif
...

定義オプションは、glfw3のビルド ガイドで概説されています。これにより、コンパイラの警告も軽減されます。

于 2014-02-13T08:20:05.647 に答える