我一直在 Delphi VCL 自定义控件中包装核心 OpenGL 功能。目前,我正在使用TTimer
在此控件中创建的一个循环。我强烈认为使用计时器是完全错误的,因为绘图可能会重叠并有延迟。相反,我想把这个绘图循环放在一个线程中。请参阅我最初的问题,其中包含一些闪烁的问题 - 我将责任归咎于TTimer
我正在使用的问题。
问题
在线程内部使用 OpenGL 是否安全?我应该注意什么?我计划从这个线程的内部和外部进行 OpenGL API 调用。它本质上是一个连续的循环,一旦完成绘图,它将立即重新开始绘图。目前,使用定时器,它取决于等待定时器的时间间隔达到。因此,例如,如果 Timer 的间隔设置为 100 毫秒,而绘图只需要 20 毫秒,那么将有 80 毫秒的等待时间,直到它再次绘图。使用线程将消除这种延迟。我应该如何从这个线程内部进行这样的调用?
背景
我基于所有 API 调用的原始示例项目是使用应用程序的主线程,实际上完全没有使用 VCL。显示图像的窗口是使用纯 Windows API 调用动态创建的,并且在应用程序主线程的连续循环中重复绘制。这就是为什么我相信使用线程可以解决我的许多问题——特别是闪烁。