Я использую Qt для создания 3D-программы с GLEW.
У меня проблема, когда я вызываю glewInit () из Widget создания во время выполнения.
Я создаю унаследованный класс MyRender на основе QOpenGLWidget . Затем реализовано initializeGL () с
GLenum err;
if( err = glewInit() )
{
printf( "error because: %s\n", glewGetErrorString( err ) );
exit(123);
}
Обычно я использую класс MyRender через Qt Designer и продвигаю QOpenGLWidget до MyRender . Тогда у меня будет MyRender Object с момента запуска программы. Нет проблем.
Однако, когда я создаю 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-bit. Qt 5.11 GLEW 2.1.0
EDIT:
Я проверяю свой код с
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 );
Контекст будет нулевым и приведет glewInit () к ошибке.