Example #1
0
        /// <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;
            }
        }
Example #2
0
        /// <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);
        }