DirectX9 CreateDevice失败,D3DERR\u不可用

DirectX9 CreateDevice失败,D3DERR\u不可用,directx,directx-9,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 = disp

有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_pD3D
display
均有效<代码>显示结构的格式字段中有rgb565

似乎很重要:“DX Caps查看器”没有显示硬件适配器,只有一个软件,格式为rgb565

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


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

您没有在CreateDevice函数中指定任何顶点处理方法。请尝试将其设置为D3DCREATE_SOFTWARE_VERTEXPROCESSING,您必须设置其中一个顶点处理方法,这是DirectX SDK文档中的必填项

D3DCREATE_HARDWARE_VERTEXPROCESSING、D3DCREATE_MIXED_VERTEXPROCESSING、, 和D3DCREATE_SOFTWARE_VERTEXPROCESSING是互斥的标志。 在以下情况下,必须至少指定其中一个顶点处理标志: 正在调用CreateDevice


哦,不。实际上我设置了这个标志:D3DCREATE_HARDWARE_VERTEXPROCESSING用于hal设备,D3DCREATE_SOFTWARE_VERTEXPROCESSING用于参考一。我只是忘记了这一部分,当从不同的方法收集线条时。最后一个标志是D3DCREATE_FPU_PRESERVE | D3DCREATE_多线程| D3DCREATE_SOFTWARE_VERTEXPROCESSING。也许太多了?你什么意思?我是否应该认为根本没有解决办法?