DirectX9 CreateDevice失败,D3DERR_NOTAVAILABLE

时间:2014-01-15 15:05:58

标签: directx directx-9

dx9设备有初始化代码

D3DDISPLAYMODE display;
m_pD3D->GetAdapterDisplayMode(D3DADAPTER_DEFAULT, &display);

ZeroMemory(&m_d3dpp, sizeof(m_d3dpp));
m_d3dpp.Windowed = false;
m_d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
m_d3dpp.BackBufferFormat = display.Format;
m_d3dpp.EnableAutoDepthStencil = false;
m_d3dpp.MultiSampleType = D3DMULTISAMPLE_NONE;
/*BackBufferHeight and BackBufferWidth also set from elsewhere*/
DWORD flags = D3DCREATE_FPU_PRESERVE|D3DCREATE_MULTITHREADED;
m_pD3D->CreateDevice(D3DADAPTER_DEFAULT, m_Devtype, hWnd, flags, &m_d3dpp, &m_pd3dDevice)

事实是,这适用于m_Devtype = D3DDEVTYPE_HAL和m_Devtype = D3DDEVTYPE_REF。

但是在某些特定的计算机上(winXP,sp3,最后安装了dx),CreateDevice为D3DDEVTYPE_HAL返回D3DERR_INVALIDCALL,为D3DDEVTYPE_REF返回D3DERR_NOTAVAILABLE。 m_pD3Ddisplay都有效。 display struct在格式字段中有rgb565。

似乎很重要:" DX Caps Viewer"显示没有硬件适配器和只有一个软件,格式为rgb565。

看起来每个参数都在CreateDevice中,我希望它必须为参考设备返回D3D_OK,为什么不呢?

UPD1:现在我知道,这个不幸的XP在某个虚拟机上运行。这就是为什么只有一个软件适配器,我猜。

1 个答案:

答案 0 :(得分:0)

您没有在CreateDevice函数中指定任何顶点处理方法。尝试将其设置为D3DCREATE_SOFTWARE_VERTEXPROCESSING,您必须设置其中一个顶点处理方法,这是强制性地对DirectX SDK文档进行编码。

  

D3DCREATE_HARDWARE_VERTEXPROCESSING,D3DCREATE_MIXED_VERTEXPROCESSING,   和D3DCREATE_SOFTWARE_VERTEXPROCESSING是互斥的标志。   必须至少指定其中一个顶点处理标志   调用CreateDevice。