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);
}
{
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);
}
相关文章推荐
- 通过屏幕鼠标绘制opengl三维场景图形
- 线程的同步异步,以及具体代码实现,使用场景
- 用OpenGL绘制带箭头的直线的代码
- 为什么简单的 opengl 代码却没有绘制出形状
- 三 OpenGL常见平面图形绘制代码
- [置顶]OpenGL11-绘制汉字最高效方法(使用Freetype)(代码已更新)
- Swing代码分析(实践场景-文本框格式调整)
- 【OpenGL学习代码笔记之二】 三维空间中点的绘制
- Qt中使用OpenGL进行三维场景绘制基础
- OpenGL绘制简单场景,实现旋转缩放平移和灯光效果
- 【OpenGL学习代码笔记之一】 基本形状绘制及动画初窥
- 使用OpenGL绘制三维场景
- 用VC6.0与OpenGL实现游戏场景设计
- 用 OpenGL 固定流水线绘制球体的代码例子
- 计算机图形学02一一OpenGL 代码实现绘制一条线
- openGl代码入门笔记[3]:绘制抛物线
- OpenGL绘制简单场景,实现旋转缩放平移和灯光效果
- OpenGL:将绘制场景保存为bmp图片
- openGL代码入门笔记[2]:绘制直线、圆以及椭圆
- [置顶]OpenGL11-绘制汉字最高效方法(使用Freetype)(代码已更新)