如何在处理过程中更新 OpenGL 中的显示?
Posted
技术标签:
【中文标题】如何在处理过程中更新 OpenGL 中的显示?【英文标题】:How to update display in OpenGL during processing? 【发布时间】:2011-04-01 04:14:33 【问题描述】:自从我上次使用 OpenGL 已经一年多了,所以我对这个话题很生疏。
我有一张图像,我正在对其进行一些处理,具体来说是颜色聚类,我想在每次循环迭代后更新图像,这样我就可以看到发生的变化,而不是在处理结束时看到完成。
这是目前正在发生的事情。显示原始图像,从键盘回调函数执行颜色聚类函数,处理图像并在程序控制离开颜色聚类函数时显示更新的图像。
我尝试在每次聚类算法迭代后调用 glutPostRedisplay(),并尝试在其中使用带有 glutPostRedisplay() 的 glutIdleFunc 回调。在这两种情况下,它都不会调用显示回调,直到图像完成处理。
如何在处理图像时让它更新图像(即调用显示回调)?
【问题讨论】:
【参考方案1】:为了解决这个问题,我在每次迭代结束时明确调用了我的显示回调函数,而不是让 glut 决定何时调用显示回调的最佳时间。在伪代码中,解决方案如下所示。
colourClustering()
loop
image processing code
display() // Previously I tried using glutPostRedisplay() here.
...
display()
drawing code
glutSwapBuffers()
...
main()
....
glutDisplayFunc(display);
....
但是,这感觉像是一种变通方法,而不是真正的解决方案。
【讨论】:
【参考方案2】:您需要确保已绘制最新版本的图像(使用它来纹理完整视口四边形似乎是最简单的方法),然后添加对 glutSwapBuffers()
的调用(或等效的,如果不是 double-缓冲)在您的主 GLUT 循环中。
【讨论】:
【参考方案3】:我知道它的老问题,但调用 glFinish();让它立即出现在我面前。
【讨论】:
以上是关于如何在处理过程中更新 OpenGL 中的显示?的主要内容,如果未能解决你的问题,请参考以下文章