一开始是在主线程中用到了OpenGL画图,后来把OpenGL放在一个分线程里就画不出图了 25
是不是我加OpenGL的方法和分线程不融合,我是用的MFC编的一个基于对话框的程序。现在问题已经解决了,是在线程中加了一个消息响应函数,来触发OpenGL绘图程序,不过还...
是不是我加OpenGL的方法和分线程不融合,我是用的MFC编的一个基于对话框的程序。
现在问题已经解决了,是在线程中加了一个消息响应函数,来触发OpenGL绘图程序,不过还是很感谢你的回答。 展开
现在问题已经解决了,是在线程中加了一个消息响应函数,来触发OpenGL绘图程序,不过还是很感谢你的回答。 展开
1个回答
2008-12-01
展开全部
你在你的分线程里调用
wglMakeCurrent来把HDC和当前可用的HGLRC连接起来,记住,OPENGL的HGLRC同一时间只能在一个线程内使用,也就是说它是线程安全的,当然你这个线程结束前必须调用wglMakeCurrent (NULL, NULL)
如果在你的版本中这样做也不成功的话
建议你在进入线程的时候用
wglCreateContext (hdc);
wglMakeCurrent (hdc, hglrc);
线程退出前用
wglMakeCurrent (NULL, NULL) ;
wglDeleteContext (hglrc);
这样一般都没问题
=================================================
如果你是动态在你的线程里面创建这个控件的话就没问题
如果你是用消息线程创建的话就不行了,你无法在你自己创建的线程里使用
其实如果不是非常的需要,不推荐用线程,可以的话,建议用Timer来解决
=================================================
原因我上面说了,OPENGL是线程安全的,它的渲染上下文是无法在多个线程里同时使用的;另:要开发OPENGL程序,如果你用MFC框架的话建议你先了解一下MFC;如果是纯SDK开发的话就需要着重研究OPENGL对运行环境的需求。可能你的VS版本高,有提供TIMER控件,这个是定时器来的,每间隔一段你定义好的时间它发送出一个WM_TIMER消息到你的窗口;如果你还不清楚TIMER的话建议你先去了解一下WINDOWS的消息机制;记住,OPENGL不是给初学编程的玩的;没有一定的基础,就算你写出了代码,你也不知道它为什么都是这样工作的;而且多线程编程是一个难点,不但要解决同步问题,调试起来也非常困难,经常会遇到些莫名其妙的问题。就像你这个问题一样,这问题是由于你对OPENGL运行要求不清楚导致的。
wglMakeCurrent来把HDC和当前可用的HGLRC连接起来,记住,OPENGL的HGLRC同一时间只能在一个线程内使用,也就是说它是线程安全的,当然你这个线程结束前必须调用wglMakeCurrent (NULL, NULL)
如果在你的版本中这样做也不成功的话
建议你在进入线程的时候用
wglCreateContext (hdc);
wglMakeCurrent (hdc, hglrc);
线程退出前用
wglMakeCurrent (NULL, NULL) ;
wglDeleteContext (hglrc);
这样一般都没问题
=================================================
如果你是动态在你的线程里面创建这个控件的话就没问题
如果你是用消息线程创建的话就不行了,你无法在你自己创建的线程里使用
其实如果不是非常的需要,不推荐用线程,可以的话,建议用Timer来解决
=================================================
原因我上面说了,OPENGL是线程安全的,它的渲染上下文是无法在多个线程里同时使用的;另:要开发OPENGL程序,如果你用MFC框架的话建议你先了解一下MFC;如果是纯SDK开发的话就需要着重研究OPENGL对运行环境的需求。可能你的VS版本高,有提供TIMER控件,这个是定时器来的,每间隔一段你定义好的时间它发送出一个WM_TIMER消息到你的窗口;如果你还不清楚TIMER的话建议你先去了解一下WINDOWS的消息机制;记住,OPENGL不是给初学编程的玩的;没有一定的基础,就算你写出了代码,你也不知道它为什么都是这样工作的;而且多线程编程是一个难点,不但要解决同步问题,调试起来也非常困难,经常会遇到些莫名其妙的问题。就像你这个问题一样,这问题是由于你对OPENGL运行要求不清楚导致的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询