我使用 Qt 用 GLEW 创建一个 3D 程序。当我从运行时创建 Widget调用glewInit () 时遇到问题。我创建了一个基于QOpenGLWidget的继承类MyRender。然后,用
GLenum err;
if( err = glewInit() )
{
printf( "error because: %s\n", glewGetErrorString( err ) );
exit(123);
}
通常,我通过 Qt Designer使用类MyRender并将QOpenGLWidget 提升为MyRender。然后我将在程序启动后拥有MyRender对象。没有问题。
但是,当我在运行时创建MyRender时。例如;
MyRender * myrender = new MyRender ( this );
调用glewInit()时程序会崩溃
Missing GL version // glewInit() problem
然而,在帖子中,人们使用 GLUT 或 SDL 来创建上下文。由于我只使用 GLEW,我怎么能以与QOpenglWidget相同的方式制作上下文
glutInitDisplayMode(GLUT_RGB); //use GLUT
或者
sf::Window App(sf::VideoMode(400, 400, 32), "Window"); //use SDL
或者
glfwMakeContextCurrent // use glfw
因为我一个都没用。我只使用 QOpenGLWidget 和 glew。我试过了
myrender->makeCurrent(); // fail
myrender->initializeGL(); // fail
打电话之前
glewInit()
但是,问题仍然存在。
关于我的机器:我使用的是 Windows 10 64 位。Qt 5.11 GLEW 2.1.0
编辑:
我用
void initializeGL()
{
echo("inside initializeGL");
QOpenGLContext* current = this->context();
if( current == nullptr )
{
printf("current context is null\n");
exit(123);
}
else
{
printf("current context is good\n");
}
GLenum err = glewInit(); // error here
...
}
如果我使用 Qt Designer 将 openGLWidget 提升为MyRender。上下文没问题;但是,如果我在运行时创建MyRender
MyRender* myrender = new MyRender( this );
上下文将为 null 并导致glewInit () 错误。