public void EndD3D() { renderTarget.Dispose(); device.Dispose(); context.Dispose(); renderTarget = null; device = null; context = null; }
public D3D9() { var presentparams = new SharpDX.Direct3D9.PresentParameters { Windowed = true, SwapEffect = SharpDX.Direct3D9.SwapEffect.Discard, DeviceWindowHandle = GetDesktopWindow(), PresentationInterval = SharpDX.Direct3D9.PresentInterval.Default }; const SharpDX.Direct3D9.CreateFlags deviceFlags = SharpDX.Direct3D9.CreateFlags.HardwareVertexProcessing | SharpDX.Direct3D9.CreateFlags.Multithreaded | SharpDX.Direct3D9.CreateFlags.FpuPreserve; direct3d = new SharpDX.Direct3D9.Direct3DEx(); device = new SharpDX.Direct3D9.DeviceEx(direct3d, 0, SharpDX.Direct3D9.DeviceType.Hardware, IntPtr.Zero, deviceFlags, presentparams); }
void StartD3D() { context = new SharpDX.Direct3D9.Direct3DEx(); // Ref: https://docs.microsoft.com/en-us/dotnet/framework/wpf/advanced/wpf-and-direct3d9-interoperation var presentparams = new SharpDX.Direct3D9.PresentParameters { Windowed = true, SwapEffect = SharpDX.Direct3D9.SwapEffect.Discard, //DeviceWindowHandle = GetDesktopWindow(), PresentationInterval = SharpDX.Direct3D9.PresentInterval.Default, BackBufferHeight = 1, BackBufferWidth = 1, BackBufferFormat = SharpDX.Direct3D9.Format.Unknown }; device = new SharpDX.Direct3D9.DeviceEx(context, this.adapterIndex, SharpDX.Direct3D9.DeviceType.Hardware, IntPtr.Zero, SharpDX.Direct3D9.CreateFlags.HardwareVertexProcessing | SharpDX.Direct3D9.CreateFlags.Multithreaded | SharpDX.Direct3D9.CreateFlags.FpuPreserve, presentparams); }
private bool WaitForSharpDXAvailability() { var sharpDxAvailable = false; var retries = 0; while (retries < SharpDxAvailabilityMaxRetries) { using (var direct3DEx = new SharpDX.Direct3D9.Direct3DEx()) { if (direct3DEx.AdapterCount > 0) { sharpDxAvailable = true; break; } } Task.Delay(TimeSpan.FromSeconds(1)); } return(sharpDxAvailable); }