使用glGenBuffers()进行访问冲突,并以正确的顺序初始化GLEW

时间:2017-11-27 05:37:48

标签: c++ opengl sfml

我已经读过,在设置GLEW时,必须在创建窗口上下文后对其进行初始化。我已经在下面这样做了,但问题是我仍然通过glGenBuffers()之类的调用获得访问冲突。错误检查也未设置。是由于GLEW初始化的放置/我如何创建RenderWindow?将代码放入main()函数而不使用该类就可以了。

Engine() : sf::RenderWindow(){
        // setup the SFML renderwindow
        string windowTitle = "OpenGL";

        sf::ContextSettings contextSettings;
        contextSettings.antialiasingLevel = 4;
        contextSettings.depthBits = 64;

        sf::RenderWindow::create(sf::VideoMode(800, 600), windowTitle, sf::Style::Resize | sf::Style::Close, contextSettings);

        // setup GLEW
        glewExperimental = GL_TRUE;
        GLenum err = glewInit();
        if(err != GLEW_OK){
            printf("ERROR: GLEW failed to initialize.\n");
            exit(1);
        }
        glViewport(0, 0, sf::RenderWindow::getSize().x, sf::RenderWindow::getSize().y);
        ...
}

2 个答案:

答案 0 :(得分:0)

我想尝试不使用glewExperimental = GL_TRUE;。当您在Core配置文件中创建OpenGL上下文并希望将其与glew一起使用时,这将特别使用。与您的情况一样,您将保留默认情况下在库上创建的上下文类型。默认情况下,这个上下文主要由库的创建窗口函数创建,大多数情况下都是兼容的上下文。如果这不起作用,那么请参阅如何使用您正在使用的库创建上下文,在核心配置文件中创建上下文并放置glewExperimental = GL_TRUE;

像glut具有创建具有特定版本和Core配置文件的上下文的功能,您必须具有执行此操作的功能。使用说明4.1版本在核心配置文件中专门创建上下文并使用

 glewExperimental = GL_TRUE;
   GLenum err = glewInit();
   if(err != GLEW_OK){
   printf("ERROR: GLEW failed to initialize.\n");
   exit(1);
} 

其他只需删除对glewExperimental = GL_TRUE;的调用,然后查看

答案 1 :(得分:0)

我怀疑create方法只创建窗口类,但不创建/显示窗口。这可能是问题所在。确保在glewInit调用

之前显示该窗口