我正在尝试在全屏中创建一个DirectX设备(直到我被戴上Doign的时间点之前),但是该设备无法创建,并且我会获得无效的调用HR失败。

这是我的代码:

    md3dPP.BackBufferWidth            = 1280; 
md3dPP.BackBufferHeight           = 720;
md3dPP.BackBufferFormat           = D3DFMT_UNKNOWN;
md3dPP.BackBufferCount            = 1;
md3dPP.MultiSampleType            = D3DMULTISAMPLE_NONE;
md3dPP.MultiSampleQuality         = 0;
md3dPP.SwapEffect                 = D3DSWAPEFFECT_DISCARD; 
md3dPP.hDeviceWindow              = mhMainWnd;
md3dPP.Windowed                   = false;
md3dPP.EnableAutoDepthStencil     = true; 
md3dPP.AutoDepthStencilFormat     = D3DFMT_D24S8;
md3dPP.Flags                      = 0;
md3dPP.FullScreen_RefreshRateInHz = D3DPRESENT_RATE_DEFAULT;
md3dPP.PresentationInterval       = D3DPRESENT_INTERVAL_IMMEDIATE;


HR(md3dObject->CreateDevice(
    D3DADAPTER_DEFAULT, // primary adapter
    mDevType,           // device type
    mhMainWnd,          // window associated with device
    devBehaviorFlags,   // vertex processing
    &md3dPP,            // present parameters
    &m_pd3dDevice));    // return created device

请注意“ MD3DPP.WINDOWED = false;',如果这是正确的,则设备以窗口模式创建。

我的印象是我在某些默认值中犯了一个错误,但不知道在哪里看。是否有一种方法可以获取更详细的报告,说明为什么设备创建以外的D3Derr_invalidCall失败了?

有帮助吗?

解决方案

您需要为 BackBufferFormat 因为只有窗户的应用程序允许该值 D3DFMT_UNKNOWN. 。选择设备支持的一个(您可以使用 checkdeviceformat()).

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top