Jer*_*dge 4 delphi opengl multithreading custom-controls delphi-xe2
我一直在Delphi VCL自定义控件中包装核心OpenGL功能.目前,我正在使用TTimer
此控件中创建的循环.我强烈认为使用计时器是完全错误的,因为绘图可能重叠并且有延迟.相反,我想把这个绘图循环放在一个线程中.请参考我的原始问题以及一些闪烁问题 - 我将责任归咎于TTimer
我正在使用的问题.
题
OpenGL在线程内是否可以安全使用?我应该注意什么?我打算从这个线程的内部和外部进行OpenGL API调用.它基本上是一个连续的循环,一旦完成绘制,它将立即开始绘制.目前,使用定时器,它取决于等待达到定时器的间隔.因此,例如,如果Timer的间隔设置为100毫秒,并且绘图仅需要20毫秒,那么将等待80毫秒,直到它再次绘制.使用线程将消除此延迟.我应该如何从这个线程中进行这样的调用?
背景
这是我根据我所有的API调用关闭的使用应用程序的主线程,实际上使用绝对没有VCL在所有的原始样本项目.显示图像的窗口是使用纯Windows API调用动态创建的,并且从应用程序主线程中的连续循环内重复绘制.这就是为什么我相信使用Thread会解决我的许多问题 - 特别是闪烁.
一个OpenGL上下文只能在一个给定的线程中是当前的(活动的).因此,您必须在线程中正确解除绑定/重新绑定当前上下文,或者必须使用两个上下文共享数据.我强烈建议将您的设计重组为仅使用单个线程进行OpenGL调用.更多背景信息可以在http://www.equalizergraphics.com/documentation/parallelOpenGLFAQ.html找到.