我正在尝试从
调用回调函数 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的线程----确定没有线程只是回调]
答案 0 :(得分:0)
my_draw将创建一个调用here_is_the_actual_drawing的线程----确定没有线程只回调]
你不能只是只是从任何线程调用OpenGL命令。 OpenGL需要一个上下文,每个OpenGL上下文一次只能在一个线程中激活。完全可以在线程之间迁移上下文。但是,这要求您完全控制上下文创建和管理。
通过使用像(免费)GLUT,GLFW或SDL这样的简单框架,您无法控制上下文管理。但从技术上讲,这是可能的。
但并非所有可能的事情都有意义。通常将所有OpenGL操作保持为单个线程,确切地说是主GUI线程,是最佳解决方案。多线程OpenGL仅在极少数情况下很有用,即使只是在非常有限的情况下也是如此。
BTDT(实际上我目前的项目大量使用多线程OpenGL)