我有一個程序,它允許用戶通過對話框選擇圖像,並顯示圖像。菜單與圖像上的右擊相關聯,並且當用戶選擇羣集時,提示用戶在控制檯處輸入羣集之間的最小距離。
通過調用viewer()
方法創建顯示窗口,該方法創建一個窗口併爲其設置GLUT屬性。
在控制檯提示用戶輸入時,我想用加載的圖像摧毀原始窗口,因爲很多時候,控制檯窗口已經進入了圖像顯示窗口。openGL createWindow將不會執行,直到應用程序代碼結束
用戶在控制檯輸入值後,我希望窗口再次顯示。但問題是,雖然我在輸入內容後調用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?了。
雖然問題是非常相似的,實際的問題略有不同。
首先,'glutCreateWindow'和'glFinish'沒有什麼共同之處。其次,你正在使用什麼版本的GLUT? – glcoder
您是否考慮過使用'glutHideWindow'和'glutShowWindow'來暫時隱藏窗口? – stativ
我正在使用glut3.6。我的意思是我在調用createWindow()方法之前嘗試調用glFinish()。如果我錯了,請原諒我,但我的理解是,glFinish在繼續之前強制所有未決操作被執行。 – msnewbie