private bool disposedValue = false; // Для определения избыточных вызовов protected virtual void Dispose(bool disposing) { if (!disposedValue) { if (disposing) { // TODO: освободить управляемое состояние (управляемые объекты). inputLayout.Dispose(); inputSignature.Dispose(); triangleVertexBuffer.Dispose(); vertexShader.Dispose(); pixelShader.Dispose(); renderTargetView.Dispose(); swapChain.Dispose(); d3dDevice.Dispose(); d3dDeviceContext.Dispose(); renderForm.Dispose(); triangleVertexBuffer.Dispose(); } // TODO: освободить неуправляемые ресурсы (неуправляемые объекты) и переопределить ниже метод завершения. // TODO: задать большим полям значение NULL. disposedValue = true; } }
protected internal override void OnDestroyed() { var pipelineStateCache = GetPipelineStateCache(); if (blendState != null) { pipelineStateCache.BlendStateCache.Release(blendState); } if (rasterizerState != null) { pipelineStateCache.RasterizerStateCache.Release(rasterizerState); } if (depthStencilState != null) { pipelineStateCache.DepthStencilStateCache.Release(depthStencilState); } if (vertexShader != null) { pipelineStateCache.VertexShaderCache.Release(vertexShader); } if (pixelShader != null) { pipelineStateCache.PixelShaderCache.Release(pixelShader); } if (geometryShader != null) { pipelineStateCache.GeometryShaderCache.Release(geometryShader); } if (hullShader != null) { pipelineStateCache.HullShaderCache.Release(hullShader); } if (domainShader != null) { pipelineStateCache.DomainShaderCache.Release(domainShader); } if (computeShader != null) { pipelineStateCache.ComputeShaderCache.Release(computeShader); } inputLayout?.Dispose(); base.OnDestroyed(); }