我使用openGL和“freeglut”库进行体积渲染和显示。在主线程中,我初始化openGL窗口,然后逐帧获取体积数据,体积渲染在获取一个体数据后完成。这很好用,但需要很长时间。是否有可能继续在主线程中初始化openGL窗口,并在另一个线程中进行体积渲染和显示?我检查了wglMakeCurrent,它没有更新主线程中初始化的窗口。
答案 0 :(得分:5)
多线程OpenGL操作是一个讨厌的野兽。但是,您可以,这是我强烈建议的,将像素缓冲区对象映射到程序的地址空间。并且所有线程都可以看到该地址空间区域。因此,您可以从另一个线程更新卷数据(或者,就像我正在处理的程序,在另一个GPU上),然后通知主线程从PBO中的新数据更新纹理。您还可以使用glTexSubImage3D仅从PBO更新卷的子部分。