Direct3D全屏(CreateDevice返回D3DERR_INVALIDCALL)

时间:2016-09-21 07:39:20

标签: directx fullscreen direct3d

我想使用MFC Direct3D全屏。

我制作了一个自定义静态类。这个类初始化direct3d。

我成功进入了窗口模式。但全屏模式失败。

CreateDevice函数返回D3DERR_INVALIDCALL(-2005530516)。

如何解决?

初始

// Create the D3D object.
if( NULL == ( m_pD3D = Direct3DCreate9( D3D_SDK_VERSION ) ) )
    return E_FAIL;

D3DPRESENT_PARAMETERS d3dpp;
ZeroMemory( &d3dpp, sizeof( d3dpp ) );
d3dpp.Windowed = FALSE;
d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
d3dpp.BackBufferFormat = D3DFMT_X8R8G8B8;
d3dpp.BackBufferWidth = 1920;
d3dpp.BackBufferHeight = 1080;
d3dpp.EnableAutoDepthStencil = TRUE;
d3dpp.AutoDepthStencilFormat = D3DFMT_D16;
d3dpp.hDeviceWindow = m_hWnd;

HRESULT temp;
// Create the D3DDevice
if( FAILED( temp = m_pD3D->CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, AfxGetMainWnd()->m_hWnd,
                                  D3DCREATE_SOFTWARE_VERTEXPROCESSING,
                                  &d3dpp, &m_pd3dDevice ) ) )
{
    return E_FAIL;
}

// Turn on the zbuffer
m_pd3dDevice->SetRenderState( D3DRS_ZENABLE, TRUE );

m_pd3dDevice->SetRenderState( D3DRS_AMBIENT, 0xffffffff );

1 个答案:

答案 0 :(得分:0)

尝试将m_hWnd传递给CreateDevice而不是AfxGetMainWindow。 或者d3dpp.hDeviceWindow = AfxGetMainWindow。 也许你的m_hWnd无效。