/// <summary> /// Initializes a new instance of the <see cref="GorgonBaseBuffer"/> class. /// </summary> /// <param name="graphics">The graphics.</param> /// <param name="name">The name.</param> /// <param name="settings">The settings.</param> protected GorgonBaseBuffer(GorgonGraphics graphics, string name, IBufferSettings settings) : base(graphics, name) { _viewCache = new GorgonViewCache(this); Settings = settings; D3DUsage = (D3D.ResourceUsage)settings.Usage; // Determine access rights. switch (settings.Usage) { case BufferUsage.Dynamic: D3DCPUAccessFlags = D3D.CpuAccessFlags.Write; break; case BufferUsage.Immutable: D3DCPUAccessFlags = D3D.CpuAccessFlags.None; break; case BufferUsage.Staging: D3DCPUAccessFlags = D3D.CpuAccessFlags.Write | D3D.CpuAccessFlags.Read; break; default: D3DCPUAccessFlags = D3D.CpuAccessFlags.None; break; } }
/// <summary> /// Function to clean up the resource object. /// </summary> protected override void CleanUpResource() { if (D3DResource == null) { return; } if (_viewCache != null) { _viewCache.Dispose(); _viewCache = null; } if (IsRenderTarget) { GorgonRenderStatistics.RenderTargetCount--; GorgonRenderStatistics.RenderTargetSize -= D3DBuffer.Description.SizeInBytes; } switch (BufferType) { case BufferType.Constant: GorgonRenderStatistics.ConstantBufferCount--; GorgonRenderStatistics.ConstantBufferSize -= D3DBuffer.Description.SizeInBytes; break; case BufferType.Index: GorgonRenderStatistics.IndexBufferCount--; GorgonRenderStatistics.IndexBufferSize -= D3DBuffer.Description.SizeInBytes; break; case BufferType.Vertex: GorgonRenderStatistics.VertexBufferCount--; GorgonRenderStatistics.VertexBufferSize -= D3DBuffer.Description.SizeInBytes; break; case BufferType.Structured: GorgonRenderStatistics.StructuredBufferCount--; GorgonRenderStatistics.StructuredBufferSize -= D3DBuffer.Description.SizeInBytes; break; default: GorgonRenderStatistics.BufferCount--; GorgonRenderStatistics.BufferSize -= D3DBuffer.Description.SizeInBytes; break; } D3DResource.Dispose(); D3DResource = null; D3DBuffer = null; Gorgon.Log.Print("Destroyed {0} Buffer '{1}'.", LoggingLevel.Verbose, BufferType, Name); }