OS X 10.8.4 の XCode (バージョン 4.6.3) で GLFW (バージョン 3.0.2) と GLEW (バージョン 1.10.0) を使用して単純な OpenGL プログラムを実行しようとしています。コード全体を以下に示します。
#include <GLFW/glfw3.h>
#include <OpenGL/OpenGL.h>
#include <iostream>
using namespace std;
void RenderScene()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
}
void InitGL()
{
glClearColor(1, 0, 0, 1);
}
void ErrorFunc(int code, const char *msg)
{
cerr << "Error " << code << ": " << msg << endl;
}
int main(void)
{
GLFWwindow* window;
/* Report errors */
glfwSetErrorCallback(ErrorFunc);
/* Initialize the library */
if (!glfwInit())
return -1;
/* Window hints */
glfwWindowHint (GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint (GLFW_CONTEXT_VERSION_MINOR, 2);
glfwWindowHint (GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
glfwWindowHint (GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
/* 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);
/* Initialize OpenGL */
InitGL();
/* Loop until the user closes the window */
while (!glfwWindowShouldClose(window))
{
/* Render here */
RenderScene();
/* Swap front and back buffers */
glfwSwapBuffers(window);
/* Poll for and process events */
glfwPollEvents();
}
glfwTerminate();
return 0;
}
これらのほとんどは、GLFW のドキュメントから直接得たものです。レンダリング機能と GLEW の初期化のみが私のものです。OpenGL、Cocoa、IOKit のフレームワークを追加し、libGLEW.a と libglfw3.a にリンクしました。プログラムは正常にコンパイルされますが、GLEW が処理するはずの関数を実行しようとするとクラッシュするように見えます。ここで、プログラムは でクラッシュしglClearBufferfv
ます。それをコメントアウトすると、黒い背景のウィンドウが表示されます。私の推測では、GLEW は密かに機能していません。エラーは報告されていませんが、まったく機能していないように見えるからです。
XCode がスローする正確なエラー メッセージはerror: address doesn't contain a section that points to a section in a object file
、エラー コードEXC_BAD_ACCESS
. プログラムに置き換えるglClearBufferfv
とglClearColor
クラッシュしませんが、実際には赤である必要がある場合でも背景が黒くなります。クエリを実行すると、OpenGL はバージョン文字列2.1 NVIDIA-8.12.47 310.40.00.05f01
を返します。これは、新しい関数の呼び出しが機能しない理由を説明していますが、GLEW は正しい OpenGL コンテキストを設定するべきではありませんでしたか? さらに、GLFW のドキュメントには、GLFW 2.7.2 以降、OpenGL 3+ コンテキストを作成していると書かれています。私は本当に何をすべきかわかりません。