我可以从opengl的显示器调用我的回调函数吗?

时间:2013-01-25 18:07:03

标签: c++ c multithreading opengl callback

我正在尝试从

调用回调函数
 void display(void){

    my_draw(&here_is_the_actual_drawing);

 }

 void here_is_the_actual_drawing(){

    glVertex2f(x,y);

 }

在主要的opengl循环调用中显示..比如

 glutDisplayFunc(display); 

我的问题是我们可以这样做吗?我在我的代码中尝试编译但卡住.. [my_draw将创建一个调用here_is_the_actual_drawing的线程----确定没有线程只是回调]

1 个答案:

答案 0 :(得分:0)

  

my_draw将创建一个调用here_is_the_actual_drawing的线程----确定没有线程只回调]

你不能只是只是从任何线程调用OpenGL命令。 OpenGL需要一个上下文,每个OpenGL上下文一次只能在一个线程中激活。完全可以在线程之间迁移上下文。但是,这要求您完全控制上下文创建和管理。

通过使用像(免费)GLUT,GLFW或SDL这样的简单框架,您无法控制上下文管理。但从技术上讲,这是可能的。

但并非所有可能的事情都有意义。通常将所有OpenGL操作保持为单个线程,确切地说是主GUI线程,是最佳解决方案。多线程OpenGL仅在极少数情况下很有用,即使只是在非常有限的情况下也是如此。

BTDT(实际上我目前的项目大量使用多线程OpenGL)