我已经读过,在设置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);
...
}
答案 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调用
之前显示该窗口