2016-07-15 27 views
0

私はOpenGLでプロジェクトを持っており、シェーダをロードしようとしています。私はGLuint shader=glCreateShader(shaderType);を使っています。問題は、この行を実行しようとすると、EXC_BAD_ACCESS(コード= 1、アドレス= 0x0)(XCodeで)エラーが発生することです。glCreateShader原因EXC_BAD_ACCESS

私はglfwを初期化していない可能性があるいくつかの回答を見つけました。しかし、それはうまく動作するようです。 initOpenGLProgram()

if (!glfwInit()) { 
     fprintf(stderr, "Couldn't initialize GLFW.\n"); 
     exit(EXIT_FAILURE); 
    } 

    glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3); 
    glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3); 
    glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); 
    glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE); 
    glfwSetErrorCallback(errorCallback); 
    GLFWwindow* window = glfwCreateWindow(WIDTH, HEIGHT, "OpenGL Test", nullptr, nullptr); 

    if (!window) { 
     fprintf(stderr, "Couldn't create window.\n"); 
     glfwTerminate(); 
     exit(EXIT_FAILURE); 
    } 

    glfwMakeContextCurrent(window); 
    glfwSwapInterval(1); 

    if (glewInit() != GLEW_OK) { 
     fprintf(stderr, (char*)"Couldn't initialize GLEW library.\n"); 
     exit(EXIT_FAILURE); 
    } 

    initOpenGLProgram(window); 

:新しいShaderProgram

glClearColor(0, 0, 0, 1); 
glEnable(GL_DEPTH_TEST); 
glfwSetKeyCallback(window, keyCallback); 

shaderProgram = new ShaderProgram((char*)"shaders/vshader.glsl", NULL, (char*)"shaders/fshader.glsl"); 

:これは私の初期化コードである

printf("Loading vertex shader...\n"); 
vertexShader=loadShader(GL_VERTEX_SHADER,vertexShaderFile); 

loadShader方法(この行はエラーをスロー)で:

GLuint shader=glCreateShader(shaderType); 

また、私は質問があります。 OpenGL 3.3でプロジェクトを行う必要がありますが、glGetString(GL_VERSION)でバージョンを確認すると、4.1というバージョンが得られます。今問題がありますか?

+0

これはやや混乱します。あなたの質問を編集できますか? (私はすべてが原因でエラーが発生するのかどうかは十分にはわかりません) –

+0

glCreateShader関数を呼び出すと、エラーが発生します。 –

+1

熟考... –

答えて

0

エラーはメモリの1つです。返り値glCreateShader()を確認してください。 This「は取得するために残されたトークンが存在しない場合はnullポインタが返されます..」、と言うThisは言う:

  • ポインタが初期化されていなかった可能性があります。
  • 配列の境界を超えてしまったため、ポインタが誤って上書きされている可能性があります。
  • ポインタが誤ってキャストされ、書き込まれたオブジェクトの一部である可能性があります。
  • 上記のいずれかが、現在このポインタまたはそのポインタの近くにある別のポインタを破損している可能性があり、このポインタを使用すると、このポインタが破損する可能性があります。
+0

何ですか?無関係な質問への回答からテキストをコピーしました。 'glCreateShader()'はポインタを返したり、引数としてポインタを取ったりしません。 –

+0

'glCreateShader'がNULLでした。 'glCreateShader()'を呼び出した結果ではありません。 –

0

問題が見つかりました。私の場合は、XCodeのプロジェクト構成が間違っていました。 私は2 libGlew dylibsを持っていました。私はlibGLEWmx.1.13.0.dylibを削除する場合

libraries

は、すべてが仕事を始めました。

+1

MacOS Xでは、GLEWはまったく必要ないはずです。 Apple *に固有の拡張機能*が必要な場合を除いて、GLEWを削除することを強くお勧めします。 – datenwolf

+0

問題はそれが大学のプロジェクトであり、私たちはそれを使わなければならないということです。私が自分のプロジェクトをやったのであれば、おそらくアップルの拡張機能を使うだろう。 –

+1

あなたは私を誤解していると思う。 MacOS Xでは、拡張機能をまったく使用する必要はありません。最新のOpenGLのものを使用するには、MacOS XではGLEWは必要ありません。*あなたがいくつかの拡張機能を使いたい場合を除きます。だからあなたの最善の行動は、あなたのプロジェクトからGLEWを落とすことです。クロスプラットフォームの場合はMacOS Xビルドから省略してください。 – datenwolf

関連する問題