您的位置:首页 > 编程语言 > Qt开发

Qt下如何用OpenGL的共享列表wglShareLists函数

2012-03-29 16:41 260 查看
最近用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是比较耗时的,因为是把数据从内存写到显存。

主线程的贴图是显存到显存。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: