不知道大家有没碰到过这样的问题,我在一个窗口中做direct 3d的图像渲染的时候,当我去改变显示分辨率,这个时候我那个窗口就看不见图像了,不过我估计那个图像还是在渲染,只是没显示而已,不知道是不是在初始化3d的时候是不是有什么特别的设置,以下是我初始化3d的代码,请高手帮忙看看:
HRESULT C3DTest::InitD3D()
{
// Create 3D object
if( NULL == ( m_pD3D = Direct3DCreate8( D3D_SDK_VERSION ) ) )
return E_FAIL; // Get display mode
D3DDISPLAYMODE d3ddm;
if( FAILED( m_pD3D->GetAdapterDisplayMode( D3DADAPTER_DEFAULT, &d3ddm ) ) )
return E_FAIL; D3DPRESENT_PARAMETERS d3dpp;
ZeroMemory( &d3dpp, sizeof(d3dpp) );
d3dpp.Windowed = TRUE;
d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
d3dpp.BackBufferFormat = d3ddm.Format;
d3dpp.EnableAutoDepthStencil = TRUE;
d3dpp.AutoDepthStencilFormat = D3DFMT_D16;
//Create D3D device
if( FAILED( m_pD3D->CreateDevice( D3DADAPTER_DEFAULT,
D3DDEVTYPE_HAL,
m_hWnd,
D3DCREATE_SOFTWARE_VERTEXPROCESSING,
&d3dpp,
&m_pDevice ) ) )
{
return E_FAIL;
} m_pDevice->SetRenderState( D3DRS_CULLMODE, D3DCULL_NONE );
//Enable Z buffer
m_pDevice->SetRenderState( D3DRS_ZENABLE, TRUE );
// Turn on D3D lighting
m_pDevice->SetRenderState( D3DRS_LIGHTING, true ); return S_OK;
}
HRESULT C3DTest::InitD3D()
{
// Create 3D object
if( NULL == ( m_pD3D = Direct3DCreate8( D3D_SDK_VERSION ) ) )
return E_FAIL; // Get display mode
D3DDISPLAYMODE d3ddm;
if( FAILED( m_pD3D->GetAdapterDisplayMode( D3DADAPTER_DEFAULT, &d3ddm ) ) )
return E_FAIL; D3DPRESENT_PARAMETERS d3dpp;
ZeroMemory( &d3dpp, sizeof(d3dpp) );
d3dpp.Windowed = TRUE;
d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
d3dpp.BackBufferFormat = d3ddm.Format;
d3dpp.EnableAutoDepthStencil = TRUE;
d3dpp.AutoDepthStencilFormat = D3DFMT_D16;
//Create D3D device
if( FAILED( m_pD3D->CreateDevice( D3DADAPTER_DEFAULT,
D3DDEVTYPE_HAL,
m_hWnd,
D3DCREATE_SOFTWARE_VERTEXPROCESSING,
&d3dpp,
&m_pDevice ) ) )
{
return E_FAIL;
} m_pDevice->SetRenderState( D3DRS_CULLMODE, D3DCULL_NONE );
//Enable Z buffer
m_pDevice->SetRenderState( D3DRS_ZENABLE, TRUE );
// Turn on D3D lighting
m_pDevice->SetRenderState( D3DRS_LIGHTING, true ); return S_OK;
}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货