コード例 #1
0
        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();
        }