2016-07-15 134 views
0

我在OpenGL中有一个项目,我试图加载着色器。我使用GLuint shader=glCreateShader(shaderType);。问题是,当它试图运行这条线时,我得到EXC_BAD_ACCESS(code = 1,address = 0x0)错误(在XCode中)。glCreateShader导致EXC_BAD_ACCESS

我发现了一些答案,我可能没有初始化glfw或glew。但它似乎工作得很好。这是我的初始化代码:

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

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

在新ShaderProgram

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

这有点混乱。你能编辑你的问题吗? (我不完全确定是什么导致了错误。) – 2016-07-15 21:41:42

+0

调用glCreateShader函数会导致错误。 –

+1

正在考虑...... – 2016-07-15 21:50:24

回答

0

错误是内存之一。检查返回值glCreateShader()This说,“如果没有令牌留下来检索一个空指针返回。” This说:

  • 指针可能从来未初始化。
  • 由于您超出了数组的范围,指针可能会被意外写入。
  • 指针可能是不正确铸造并写入的对象的一部分。
  • 以上任何一种情况都可能破坏了一个不同的指针,该指针现在指向或接近此指针,并使用该指针破坏此指针(依此类推)。
+0

什么?您将文本从答案复制到不相关的问题。 'glCreateShader()'甚至不返回一个指针,或者将一个指针作为参数。 –

+0

'glCreateShader'为NULL。不是调用'glCreateShader()'的结果。 –

0

我发现了一个问题。在我的情况下,这是XCode中的一个糟糕的项目配置。 我有2 libGlew dylibs链接。

libraries

当我删除libGLEWmx.1.13.0.dylib一切都开始工作。

+1

在MacOS X中,你根本不需要GLEW。我强烈建议您删除GLEW,除非您需要* Apple特有的扩展*。 – datenwolf

+0

问题是这是一个大学项目,我们必须使用它。如果我做了自己的项目,我可能会使用苹果扩展 –

+1

我想你误解了我。在MacOS X中,您不必使用扩展。你不需要MacOS X中的GLEW来使用现代OpenGL中的东西*,除非*你想使用一些扩展。所以你最好的行动是从你的项目中删除GLEW;或者如果你跨平台的话,可以从MacOS X版本中省略它。 – datenwolf

相关问题