2016-07-15 16 views
0

Ich habe ein Projekt in OpenGL und ich versuche, Shader zu laden. Ich benutze dafür GLuint shader=glCreateShader(shaderType);. Das Problem ist, wenn es versucht, diese Linie zu laufen, bekomme ich EXC_BAD_ACCESS (Code = 1, Adresse = 0x0) Fehler (in XCode).glCreateShader verursacht EXC_BAD_ACCESS

Ich habe ein paar Antworten gefunden, die ich vielleicht nicht glfw oder glew initialisiert habe. Aber es scheint, es funktioniert gut. Dies ist mein Code für die Initialisierung:

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); 

in initOpenGLProgram():

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

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

in neuen ShaderProgram:

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

und in loadShader Verfahren (diese Linie wirft einen Fehler):

GLuint shader=glCreateShader(shaderType); 

Auch ich habe eine Frage. Ich muss mein Projekt in OpenGL 3.3 machen, aber wenn ich Version mit glGetString(GL_VERSION) überprüfe, bekomme ich 4.1 Version. Wird es jetzt ein Problem geben?

+0

Dies ist etwas verwirrend. Könnten Sie Ihre Frage bitte bearbeiten? (Ich bin mir nicht ganz sicher, was alles den Fehler verursacht.) –

+0

Der Aufruf der glCreateShader-Funktion verursacht den Fehler. –

+1

Nachdenken ... –

Antwort

0

Der Fehler ist einer der Speicher. Überprüfen Sie den Rückgabewert von glCreateShader(). This sagt: „Ein Null-Zeiger zurückgegeben, wenn es keine Token abrufen links ..“ This sagt:

  • Der Zeiger konnte nie initialisiert wurde.
  • Der Zeiger könnte versehentlich überschrieben worden sein, weil Sie die Grenzen eines Arrays überschritten haben.
  • Der Zeiger könnte Teil eines Objekts sein, das falsch gegossen und dann in geschrieben wurde.
  • Irgendwelche der oben genannten könnten einen anderen Zeiger beschädigt haben, der jetzt auf oder in der Nähe von diesem Zeiger zeigt, und mit diesem einen korrumpiert diesen (und so weiter).
+0

Was?Sie haben Text von Antworten auf nicht verwandte Fragen kopiert. 'glCreateShader()' gibt nicht einmal einen Zeiger zurück oder nimmt einen Zeiger als Argument. –

+0

'glCreateShader' war NULL. Nicht das Ergebnis von 'glCreateShader()'. –

0

Ich habe ein Problem gefunden. In meinem Fall war es eine schlechte Projektkonfiguration in XCode. Ich hatte 2 libGlew Dylibs verknüpft.

libraries

Als ich libGLEWmx.1.13.0.dylib alles entfernt zu arbeiten begann.

+1

In MacOS X sollten Sie GLEW überhaupt nicht benötigen. Ich schlage vor, dass Sie GLEW entfernen, außer wenn Sie * spezifische Erweiterungen * benötigen. – datenwolf

+0

Das Problem ist, dass es ein Universitätsprojekt ist, und wir müssen es benutzen. Wenn ich mein eigenes Projekt hätte, würde ich wahrscheinlich Apple-Erweiterungen verwenden –

+1

Ich denke, du hast mich missverstanden. In MacOS X müssen Sie keine Erweiterungen verwenden. Sie brauchen GLEW in MacOS X nicht, um Dinge aus dem modernen OpenGL zu verwenden, * es sei denn, Sie möchten einige Erweiterungen verwenden. Ihre beste Vorgehensweise besteht also darin, GLEW aus Ihrem Projekt zu entfernen. oder falls Sie plattformübergreifend sind, lassen Sie es von MacOS X Builds weg. – datenwolf

Verwandte Themen