【发布时间】:2011-06-19 12:56:27
【问题描述】:
我正在尝试使用 libx11 创建一个多线程 opengl 应用程序 - 每个窗口有一个单独的线程和一个管理器线程。
我在管理线程中有一个事件循环:
while(true)
while(XQLength(mPlatformData->display)){
XNextEvent(mPlatformData->display, &event);
std::cout << "event" << std::endl;
}
}
对于单线程应用程序来说,这是一个很棒的事件循环,但是在这种多线程设置中会发生奇怪的事情。
当我创建一个窗口时,我需要禁用事件队列,否则 GLXMakeCurrent 将挂起 - 我的整个线程停止,并且什么也不做。
我在网上找不到太多关于多线程 X11 应用程序的信息,我应该以不同的方式处理我的事件吗?
【问题讨论】:
-
我猜 X11 和 OpenGL 是线程不安全的。
-
如果我使用一个上下文/线程,GL 是线程安全的。而且根据 X11 文档,如果我先调用 XInitThreads() 应该是安全的,我做什么。
标签: multithreading opengl thread-safety x11