问题是这样的:
前几天我遇到的:
我编译好的程序在某台机子出现经常性崩溃的错误。具体就是点击一下鼠标转动3维视图就经常出错,错误窗口显示是
AppName: MyProgram.exe AppVer: 1.2.1.0 ModName: nvoglnt.dll
ModVer: 6.14.11.7813 Offset: 00121fad
显卡为NVIDIA GeForce 9400 GT.
现在定位到Ondraw中的wglMakeCurrent(m_pDC->GetSafeHdc(), NULL)这句话出错,如果我不用这句话就没问题,但我程序一定要用多文档。
请问是我的程序调用有问题还是opengl多文档程序在新型的Nvidia上都有类似问题?
请问如何改正?
多谢!
前几天我遇到的:
我编译好的程序在某台机子出现经常性崩溃的错误。具体就是点击一下鼠标转动3维视图就经常出错,错误窗口显示是
AppName: MyProgram.exe AppVer: 1.2.1.0 ModName: nvoglnt.dll
ModVer: 6.14.11.7813 Offset: 00121fad
显卡为NVIDIA GeForce 9400 GT.
现在定位到Ondraw中的wglMakeCurrent(m_pDC->GetSafeHdc(), NULL)这句话出错,如果我不用这句话就没问题,但我程序一定要用多文档。
请问是我的程序调用有问题还是opengl多文档程序在新型的Nvidia上都有类似问题?
请问如何改正?
多谢!
句柄是不是取来了?
if(!m_pDC)
{
AfxMessageBox(_T("Error DC"));
return FALSE;
}
::wglMakeCurrent(m_pDC->GetSafeHdc(), NULL);
结果发现崩溃前没有弹出对话框
{
在每次开始绘制时:
HGLRC hglrc_old = wglGetCurrentContext ();
HDC hdc_old = wglGetCurrentDC ();
HDC hdc = 当前DC;
HGLRC hglrc = wglCreateContext (hdc); if ( !hglrc || !wglMakeCurrent (hdc, hglrc) )
{
errorcode = glGetError ();
printf ( "wglMakeCurrent failed: %d %s\n", errorcode, gluErrorString(errorcode) );
return;
}
// 执行绘制代码绘制完场景后:
wglMakeCurrent ( hdc_old, hglrc_old );
wglDeleteContext ( hglrc );
}
或者每次开始绘制前,将RC和DC设为本视图类的RC和DC,绘制完成后将RC和DC都设为NULL。为每个视图类创建一个RC,程序中实际只有一个RC,但多视图需要切换RC和对应的DC。
{
wglMakeCurrent(m_pDC->m_hDC,m_hRC);//使 RC 与当前 DC 相关联
myDrawScene( ); //具体的绘图函数,在 RC 中绘制
SwapBuffers(m_pDC->m_hDC);//把 RC 中所绘传到当前的 DC 上,从而
//在屏幕上显示
wglMakeCurrent(m_pDC->m_hDC,NULL);//释放 RC,以便其它 DC 进行绘图}
{
HGLRC hglrc_old = wglGetCurrentContext();
HDC hdc_old = wglGetCurrentDC();
HGLRC hglrc = wglCreateContext(m_pDC->GetSafeHdc());
if ( !wglMakeCurrent(m_pDC->GetSafeHdc(), hglrc) )
{
AfxMessageBox(_T("Error: wglMakeCurrent."));
return;
}
::SwapBuffers( m_pDC->GetSafeHdc() ); //CutOpenGLRenderContext(); //cut RC
wglMakeCurrent(hdc_old, hglrc_old);
wglDeleteContext(hglrc);
}