【问题标题】:GLEW OpenGL Access violation when using glGenVertexArrays使用 glGenVertexArrays 时 GLEW OpenGL 访问冲突
【发布时间】:2013-12-24 21:21:20
【问题描述】:

就我而言..这个问题是通过更新显卡驱动解决的。


我在 stackoverflow 和互联网上搜索并找到了有同样问题的人。但是,答案并没有解决我的问题。

我正在使用 SDL2 和 GLEW。当我运行应用程序时,执行此函数时收到“访问冲突”错误:

glGenVertexArrays(1, &VertexArrayID); 

我的代码:

bool Game::initSDL(char* title, int xpos, int ypos, int width, int height, int flags) {
if(SDL_Init(SDL_INIT_EVERYTHING)>=0) {
    Uint32 flags = SDL_WINDOW_SHOWN|SDL_WINDOW_OPENGL;
    SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION,4);
    SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 0);
    SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
    SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 24);

    mainWindow = SDL_CreateWindow(title, xpos, ypos, width, height, flags);
    mainGLContext = SDL_GL_CreateContext(mainWindow);

    SDL_GL_SetSwapInterval(1);

    // Initialize GLEW
    glewExperimental = true; // Needed for core profile
    GLenum err = glewInit();
    if (GLEW_OK != err)
    {
        /* Problem: glewInit failed, something is seriously wrong. */
        fprintf(stderr, "Error: %s\n", glewGetErrorString(err));

    }
    // Dark blue background
    glClearColor(0.0f, 0.0f, 0.4f, 0.0f);

    GLuint VertexArrayID;
    glGenVertexArrays(1, &VertexArrayID); 
    glBindVertexArray(VertexArrayID);

} else {
    return false;
}
return true;
}

【问题讨论】:

  • 尝试先将 VertexArrayID 设置为 0 GLuint VertexArrayID = 0;
  • @jamolnng:这是毫无意义的操作
  • 感谢您的评论。不幸的是,它仍然不起作用(同样的错误)。
  • @user3125591:检查你是否真的得到了 3.x 上下文,并且`glGenVertexArrays` 实际上是一个非NULL 指针。
  • @derhass 值得一试,有时它是最简单的事情,尤其是如果某些东西没有初始化,即使它是一个整数。

标签: opengl sdl glew


【解决方案1】:

尝试在 glewInit() 之前添加这个 glewExperimental = GL_TRUE;。

glewExperimental = GL_TRUE;
glewInit();

【讨论】:

  • 不幸的是同样的结果。
  • 尝试注释掉这两个 SDL_GL_SetAttribute(SDL_GL_CONTEXT_*, *) 方法,看看会发生什么
  • 我刚刚遇到了与 user3125591 相同的问题,我使用 glewExperimental = GL_TRUE 修复程序解决了它。谢谢 !我在 openglbook.com/chapter-2-vertices-and-shapes.html 上关注教程,我遇到了问题。
  • 我只能支持这个,我有完全相同的问题,并且为我解决了它。
  • 如果这对您不起作用,并且您正在使用 GLFW,请确保在 glfwInit 之后调用 glewInit。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-06-22
  • 1970-01-01
  • 2012-06-21
  • 1970-01-01
  • 2021-06-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多