openGL createWindow不会执行直到应用程序代码结束

时间:2012-10-27 01:26:16

标签: opengl

我有一个程序,允许用户通过对话框选择图像,并显示图像。菜单与右键单击图像相关联,当用户选择群集时,系统会提示用户在控制台输入群集之间的最小距离。
显示窗口是通过调用viewer()方法创建的,该方法创建一个窗口并为其设置GLUT属性 我想在控制台上提示用户输入时,用加载的图像销毁原始窗口,因为很多时候,控制台窗口妨碍了图像显示窗口。

用户在控制台输入值后,我希望窗口再次显示。但问题是虽然我在读入输入后调用viewer()函数,但在下一个函数调用Clustering()完成执行之前,窗口不再出现。如果我没有销毁第一个窗口并移动我的控制台窗口,但是随着聚类算法的执行,我能够看到对图像的更改。

我的问题是,为什么忽略对createWindow的显式调用以及正在执行的下一个命令。我尝试使用glFinish,但它没有帮助:-(有人可以给我一个解决方案吗?

我的伪代码看起来像这样:

Clustering()
{
    loop
    {
        image processing code
    }
    display()  ;
}

...

display()
{
    drawing code
    glutSwapBuffers()
}

void viewer() {

   glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE);
   glutInitWindowSize(width, height);
   glutInitWindowPosition(100, 100);

   win = glutCreateWindow("Image"); 

   glutCreateMenu(menu);
   glutAddMenuEntry("Load Image", 1);
   glutAddMenuEntry("Clustering", 3);
   glutAddMenuEntry("QUIT", 99);
   glutAttachMenu(GLUT_RIGHT_BUTTON);
   glutDisplayFunc(display);
   glutReshapeFunc(reshape);
   glutMouseFunc(mouse);
}

void menu(int id) {

glutSwapBuffers();

switch (id){
    case 1://Open image
                    ...........
        break;  

    case 3://Clustering
        glutDestroyWindow(win);
        cout << "Please enter in the minimum distance between regions - a value between 1 and " << max_distance << ": \n";
        cin >> distance;

        Viewer();
        Clustering();
        break;

    case 99:
        exit(0);
}
glutPostRedisplay();
}

main()
{
    ....
    viewer();
    glutMainLoop();
}

哦,顺便说一句,我已经检查了How to update display in OpenGL during processing?

虽然问题非常相似,但实际问题略有不同。

1 个答案:

答案 0 :(得分:0)

我认为事情不会像你想象的那样发挥作用。例如glutDestroyWindow也会破坏OpenGL上下文(这是GLUT的限制,而不是OpenGL,它允许在没有窗口的情况下使用OpenGL上下文,就好了)。因此,如果您经常创建和销毁窗口,您还必须重新加载所有图像,纹理等。

说真的,如果你像往常一样重新调整了GLUT的限制,那么就该放弃GLUT并使用“真正的”工具包了。像Qt或wxWidgets或GTK +。