【问题标题】:openGL volume rendering and display update in different thread不同线程中的openGL体绘制和显示更新
【发布时间】:2012-09-18 19:56:39
【问题描述】:
我正在使用 openGL 和“freeglut”库进行体积渲染和显示。在主线程中我初始化了openGL窗口,然后逐帧获取体数据,获取一个体数据后进行体绘制。这很好用,但需要很多时间。我是否可以在主线程中继续初始化openGL窗口,并在另一个线程中进行体积渲染和显示?我检查了wglMakeCurrent,它不会更新在主线程中初始化的窗口。
【问题讨论】:
标签:
multithreading
opengl
rendering
volume
【解决方案1】:
多线程 OpenGL 操作是一个讨厌的野兽。但是,您可以(我强烈建议)将像素缓冲区对象映射到程序的地址空间中。并且该地址空间区域对所有线程都是可见的。因此,您可以从另一个线程更新体积数据(或者,就像我目前正在处理的程序一样,在另一个 GPU 上),然后向主线程发出信号以根据 PBO 中的新数据更新纹理。您还可以使用 glTexSubImage3D 从 PBO 仅更新体积的子部分。