OpenGL在VC6.0下 在线程中绘制场景的代码格式

DWORD WINAPI CImageDemoDlg::RenderThreadProc(LPVOID lParam)
{
 CImageDemoDlg *pDlg = (CImageDemoDlg*)lParam;

 pDlg->SetupPixelFormat(pDlg->m_pPaintDC->m_hDC);
 
 pDlg->m_hRC = wglCreateContext(pDlg->m_pPaintDC->m_hDC);     // Try To Get A Rendering Context 
 wglMakeCurrent(pDlg->m_pPaintDC->m_hDC, pDlg->m_hRC);
 
 pDlg->ReshapeGL(pDlg->m_WndRect.Width(), pDlg->m_WndRect.Height());     // Reshape Our GL Window

 pDlg->InitOpenGL();

 while (TRUE)
 {
  if (WaitForSingleObject(pDlg->m_hRenderEvent, INFINITE) == WAIT_OBJECT_0)
  {
   pDlg->Render();
  }
 }

 wglMakeCurrent(NULL, NULL);
 
 if (pDlg->m_hRC)
  wglDeleteContext(pDlg->m_hRC);

 return TRUE;
}

 

这几天都在解决这个问题(在线程中如果直接绘制场景pDlg->Render();那么你将看不到任何效果),在网络上查了下资料,发现可以这样来解决。不过这样处理比较麻烦,因为如果你要添加纹理的话,那么创建纹理LoadTexture();函数也必须在线程函数中调用,比较麻烦。比较下来还不如用TIMER(定时器)来绘制场景:

void CMainWnd::OnTimer(UINT nIDEvent)
{
 // TODO: Add your message handler code here and/or call default
 if (nIDEvent == TIMERRENDER)
 {
  Render();
 }
 CWnd::OnTimer(nIDEvent);
}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值