Performing OpenGL Drawing from within a Thread

时间秒杀一切 提交于 2020-01-01 12:31:09

问题


I've been wrapping the core OpenGL functionality within a Delphi VCL custom control. Currently, I am doing a loop using a TTimer created within this control. I strongly feel using a timer is completely wrong, as drawing could both overlap and have delays. Instead, I would like to put this drawing loop within a thread. Please refer to my original question with some issues of flickering - which I'm putting the blame on the TTimer which I'm using.

Question

Is OpenGL safe to use inside of a thread? What should I be aware of? I plan on making OpenGL API calls from both inside and outside of this thread. It will essentially be a continuous loop, where as soon as it's finished drawing, it will immediately start drawing again. Currently, using a Timer, it depends on waiting for the Timer's interval to be reached. So, for example, if the Timer's interval is set to 100 msec, and the drawing only takes 20 msec, then there will be 80 msec of waiting until it draws again. Using a thread will eliminate this delay. How should I make such calls from inside this thread?

Background

The original sample project which I based all of my API calls off of was using the application's main thread, and in fact used absolutely no VCL at all. The Window which displayed the image was dynamically created using pure Windows API calls, and the drawing was repeated from within a continuous loop in the application's main thread. This is why I believe using a Thread will solve many of my issues - specifically the flickering.


回答1:


One OpenGL context can only be current (active) in one given thread. So either you have to unbind/rebind the current context correctly in your threads, or you have to use two context sharing data. I strongly recommend to restructure your design to only use a single thread doing OpenGL call. More background can be found at http://www.equalizergraphics.com/documentation/parallelOpenGLFAQ.html.



来源:https://stackoverflow.com/questions/10746616/performing-opengl-drawing-from-within-a-thread

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!