private void OnDeviceCheck() { if (_device != null) { return; } _size = _window.Size; _d3dpp = CreatePresentParams(_window.Handle); _monitorId = _window.MonitorId; var adapterId = _window.AdapterId; using (var d3d = new Direct3D9()) { D3DCAPS9 caps; d3d.GetDeviceCaps(adapterId, D3DDEVTYPE.D3DDEVTYPE_HAL, out caps).CheckError(); var flags = D3DCREATE.D3DCREATE_NOWINDOWCHANGES | D3DCREATE.D3DCREATE_FPU_PRESERVE;// CreateFlags.MultiThreaded; if ((caps.DevCaps & D3DDEVCAPS.D3DDEVCAPS_HWTRANSFORMANDLIGHT) != 0) { flags |= D3DCREATE.D3DCREATE_HARDWARE_VERTEXPROCESSING; } else { flags |= D3DCREATE.D3DCREATE_SOFTWARE_VERTEXPROCESSING; } Logger.Debug("Direct3D: create Device, threadId={0}", Thread.CurrentThread.ManagedThreadId); _device = d3d.CreateDevice( adapterId, D3DDEVTYPE.D3DDEVTYPE_HAL, _window.Handle, flags, _d3dpp); } //TODO: check //_device.DeviceResizing += (s, e) => e.Cancel = true; //_device.DeviceReset += Device_OnDeviceReset; OnDeviceInit(); }