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
都有效。 display
struct在格式字段中有rgb565。
似乎很重要:" DX Caps Viewer"显示没有硬件适配器和只有一个软件,格式为rgb565。
看起来每个参数都在CreateDevice中,我希望它必须为参考设备返回D3D_OK,为什么不呢?
UPD1:现在我知道,这个不幸的XP在某个虚拟机上运行。这就是为什么只有一个软件适配器,我猜。
答案 0 :(得分:0)
您没有在CreateDevice函数中指定任何顶点处理方法。尝试将其设置为D3DCREATE_SOFTWARE_VERTEXPROCESSING,您必须设置其中一个顶点处理方法,这是强制性地对DirectX SDK文档进行编码。
D3DCREATE_HARDWARE_VERTEXPROCESSING,D3DCREATE_MIXED_VERTEXPROCESSING, 和D3DCREATE_SOFTWARE_VERTEXPROCESSING是互斥的标志。 必须至少指定其中一个顶点处理标志 调用CreateDevice。