我遇到一个问题,OpenGL在多个线程中调用有时会导致段错误,我无法弄清楚我做错了什么。我没有在线程之间共享上下文或其他任何内容。
invalid CoreGraphics connection
Segmentation fault: 11
实际的CGL结果代码是
kCGLBadConnection - Invalid connection to Core Graphics.
这里的最终用例是使用libuv异步呈现图像(在CPU上进行一些处理,然后将数据上传到GPU进行渲染),但是我编写了一个简单的测试用例来复制这个问题。 / p>
答案 0 :(得分:0)
调用glReadPixels时,需要绑定到线程的有效OpenGL上下文。 View::resize
的CGL变体在结束时取消绑定OpenGL上下文,因此调用glReadPixels时不会激活OpenGL上下文。我认为这可能是你问题的部分原因。
答案 1 :(得分:0)
似乎崩溃的原因是多个线程同时尝试在CGLChoosePixelFormat(或GLX中的XOpenDisplay / glXChooseVisual)中打开显示连接。在主线程中打开单个连接,然后在实例化新线程(每个线程创建自己的上下文)时使用此连接似乎解决了这个问题。