private void DisposeDevice() { UnloadContent(); factor?.Dispose(); device.ImmediateContext.OutputMerger.BlendState?.Dispose(); device.ImmediateContext?.Dispose(); depthStencil?.Dispose(); renderTarget?.Dispose(); device?.Dispose(); swapChain?.Dispose(); }
/// <summary> /// Enumerates all the available adapters for the render system. This should /// only be used to identify which adapter to use at startup. /// </summary> /// <returns>List of available adapters</returns> public static ReadOnlyList <IGraphicsAdapter> EnumerateAdapters() { //Create the DXGI Factory DXGI.Factory factory = new DXGI.Factory(); //Create the device DXGI.Adapter adapter = factory.GetAdapter(0); D3D.Device device = new D3D.Device(adapter, D3D.DriverType.Hardware, D3D.DeviceCreationFlags.None); //Enumerate adapters List <IGraphicsAdapter> adapterList = new List <IGraphicsAdapter>(); int adapterCount = factory.GetAdapterCount(); for (int i = 0; i < adapterCount; i++) { adapterList.Add(new D3D10GraphicsAdapter(device, factory, i)); } factory.Dispose(); return(new ReadOnlyList <IGraphicsAdapter>(adapterList)); }
/// <summary> /// Releases unmanaged and - optionally - managed resources /// </summary> /// <param name="disposing"><c>true</c> to release both managed and unmanaged resources; <c>false</c> to release only unmanaged resources.</param> protected override void Dispose(bool disposing) { if (!base.IsDisposed) { if (disposing) { //Clear references Array.Clear(_currentVertexBuffers, 0, _currentVertexBufferCount); Array.Clear(_vertexBindings, 0, _currentVertexBufferCount); _renderTargetManager.ClearAll(); _tracker.ReleaseAllResources(); _graphicsDevice.ClearState(); _graphicsDevice.Dispose(); _factory.Dispose(); } base.Dispose(disposing); #if DEBUG System.Diagnostics.Debug.Write(SlimDX.ObjectTable.ReportLeaks()); #endif } }