0

我正在尝试从

 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 ---- 好的,所以没有线程只是回调]

4

1 回答 1

0

my_draw 将创建一个线程来调用 here_is_the_actual_drawing ---- 好的,所以没有线程只是回调]

您不能简单地任何线程调用 OpenGL 命令。OpenGL 需要一个上下文,每个 OpenGL 上下文一次只能在一个线程中处于活动状态。在线程之间迁移上下文是完全可能的。但是,这要求您完全控制上下文创建和管理。

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

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

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

于 2013-01-26T01:15:58.550 回答