问题描述
- Opengl MFC多线程如何在原窗口进行绘图
-
由于OPENGL绘图占用时间较长(32ms),不得不新开一个线程进行绘图,但我发现我现在的程序每次都要新建窗口。请问,怎么在原窗口上绘图啊?
解决方案
glutCreateWindow()从名字上看不是你注释的设置窗口标题,而是创建一个新窗口。
看你线程中的代码应该是从一个控制台项目中拷贝过来的,因为没用过opengl所以不能给你明确的解决办法,但估计opengl应该有个设置绘图窗口的函数,你在线程中调用这个函数就可以了。
建议还是仔细看过库的详细用法再动手开发,否则也是知其然不知其所以然。
解决方案三:
这个nene的教程上面应该有的啊,就是旋转立方体的那个
解决方案四:
原窗口,那你还是要在主线程上画图,那你线程中发送消息过去通知主线程画图。
解决方案五:
已经解决了,这是我的线程函数(类似于单片机程序,很熟悉)
int OpenGLThread(LPVOID lpv)//线程run函数
{
//获得线程创建时对话框传入的参数,可以通过这里传递给opengl一些控制参数
COpenGLVS20122Dlg* pTaskMain = (COpenGLVS20122Dlg *) lpv;
pTaskMain->MySetPixelFormat(::GetDC(pTaskMain->m_hWnd)); // 设置当前的绘图像素格式
pTaskMain->hdc = ::GetDC(pTaskMain->m_hWnd); // 获得绘图描述表
pTaskMain->hglrc = wglCreateContext(pTaskMain->hdc); // 创建绘图描述表
wglMakeCurrent(pTaskMain->hdc, pTaskMain->hglrc); // 使绘图描述表为当前调用现程的当前绘图描述表
//pTaskMain->OnCreate(pTaskMain->lpCreateStruct);
pTaskMain->InitGL();
while (true)
{
pTaskMain->GLDraw();
}
}
这样就OK了