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

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

2010-03-04 10:10 489 查看
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);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: