Это не для стабильного кода выпуска, мне просто нужно получить устройство D3D9 с окном, созданное в приложении C ++, из HWND на моем ПК разработчика для проверки чего-либо ... оно может использоваться по умолчанию при множестве опций.
Я пытался взломать его из старого класса D3D8, который у меня был, но я получаю D3DERR_INVALIDCALL.
В основном у меня есть это сейчас:
HWND mHWnd = ...;
LPDIRECT3D9 mpD3D = Direct3DCreate9(D3D_SDK_VERSION);
D3DPRESENT_PARAMETERS md3dpp;
ZeroMemory( &md3dpp, sizeof(D3DPRESENT_PARAMETERS) );
md3dpp.Windowed = true;
md3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
md3dpp.BackBufferCount = 1;
md3dpp.EnableAutoDepthStencil = 0;
md3dpp.hDeviceWindow = mHWnd;
md3dpp.BackBufferWidth = 0;
md3dpp.BackBufferHeight = 0;
md3dpp.FullScreen_RefreshRateInHz = 0;
md3dpp.PresentationInterval = D3DPRESENT_INTERVAL_IMMEDIATE;
md3dpp.BackBufferFormat = D3DFMT_X8R8G8B8;
md3dpp.MultiSampleType = D3DMULTISAMPLE_NONE;
md3dpp.MultiSampleQuality = 0;
LPDIRECT3DDEVICE9 mpD3DDevice=0;
HRESULT hr = mpD3D->CreateDevice(D3DADAPTER_DEFAULT,D3DDEVTYPE_HAL,mHWnd,0,&md3dpp,&mpD3DDevice);
Я полагаю, что некоторые варианты D3DPRESENT_PARAMETERS
могут быть виноваты - меня не волнуют обратные буферы z-буферов, трафаретов или AA, с любым старым простым устройством все в порядке.
Вставил ли я несколько несовместимых флагов?