GLUT:在循环中渲染多个Windows

时间:2014-08-08 19:37:23

标签: opengl

我正在尝试在主函数的循环中渲染多个GLUT窗口。 在进入循环之前,我使用以下代码来定义窗口属性。

glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA);
glutInitWindowPosition(100,100);
glutInitWindowSize(640,480);
int windows1 = glutCreateWindow("GlutWindow 1");
int windows2 = glutCreateWindow("GlutWindow 2");

但我后来发现,在我的循环中,当我打电话

glutDisplayFunc (display1);
glutReshapeFunc (reshape1);

glutDisplayFunc(display2);
glutReshapeFunc(reshape2);

它只会在windoew2函数中渲染display2中的形状。

我还尝试通过将下面的所有代码放在循环中来渲染循环中的两个图像

int windows1 = glutCreateWindow("GlutWindow 1");
glutDisplayFunc (display1);
glutReshapeFunc (reshape1);

int windows2 = glutCreateWindow("GlutWindow 2");
glutDisplayFunc(display2);
glutReshapeFunc(reshape2);

它会渲染2个窗口内容,但会一次又一次地创建windows1和2。

那么如何让GLUT在这种情况下渲染两个窗口?是否有任何函数让glutDisplayFunc(display1)“聪明地”知道它应该在windows1中呈现?

1 个答案:

答案 0 :(得分:0)

glutDisplayFunc和朋友为当前窗口设置回调。您可以使用glutSetWindow()更改当前窗口:

  

glutSetWindow设置当前窗口; glutGetWindow返回当前窗口的标识符。如果没有窗口或先前当前窗口被销毁,则glutGetWindow返回零。 glutSetWindow不会更改窗口使用的图层;这是使用glutUseLayer完成的。

所以:

glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA);
glutInitWindowPosition(100,100);
glutInitWindowSize(640,480);
int windows1 = glutCreateWindow("GlutWindow 1");
int windows2 = glutCreateWindow("GlutWindow 2");

...

glutSetWindow(windows1);
glutDisplayFunc (display1);
glutReshapeFunc (reshape1);

glutSetWindow(windows2);
glutDisplayFunc(display2);
glutReshapeFunc(reshape2);