最近用Qt做东西,要用到共享列表。
大影像数据的贴屏程序。主线程负责把贴图往屏幕上贴,子线程负责准备贴图数据,这就需要共享列表。
qt有封装好的类QGLWidget
TestForCom::TestForCom(QWidget *parent, Qt::WFlags flags)
: QMainWindow(parent, flags)
{
// ComGLWidget继承自QGLWidget, TestForCom继承自QMainWindow;
m_glWidget = new ComGLWidget(QGLFormat(QGL::StereoBuffers), this, NULL);
// 创建一个QGLPixelBuffer,并且与m_glWidget共享列表,大小可以随意给。
g_pQGLPixelBuffer = new QGLPixelBuffer(256, 256, QGLFormat(QGL::StereoBuffers), m_glWidget);
setCentralWidget(m_glWidget);
}
这样创建出的m_glWidget和g_pQGLPixelBuffer是共享列表的。
只需要在m_glWidget的类的paintGL()函数加上一句makeCurrent(),然后在子线程的run函数里加上一句g_pQGLPixelBuffer->makeCurrent()
这样在线程里用glTexImage2D更新装载数据,主线程只负责贴图。glTexImage2D是比较耗时的,因为是把数据从内存写到显存。
主线程的贴图是显存到显存。