fna-workbench

fna-workbench Git Source Tree


Root/src/Content/ContentReaders/VertexDeclarationReader.cs

#region License
/* FNA - XNA4 Reimplementation for Desktop Platforms
 * Copyright 2009-2016 Ethan Lee and the MonoGame Team
 *
 * Released under the Microsoft Public License.
 * See LICENSE for details.
 */
#endregion
 
#region Using Statements
using Microsoft.Xna.Framework.Graphics;
#endregion
 
namespace Microsoft.Xna.Framework.Content
{
    internal class VertexDeclarationReader : ContentTypeReader<VertexDeclaration>
    {
        #region Protected Read Method
 
        protected internal override VertexDeclaration Read(
            ContentReader reader,
            VertexDeclaration existingInstance
        ) {
            int vertexStride = reader.ReadInt32();
            int elementCount = reader.ReadInt32();
            VertexElement[] elements = new VertexElement[elementCount];
            for (int i = 0; i < elementCount; i += 1)
            {
                int offset = reader.ReadInt32();
                VertexElementFormat elementFormat = (VertexElementFormat) reader.ReadInt32();
                VertexElementUsage elementUsage = (VertexElementUsage) reader.ReadInt32();
                int usageIndex = reader.ReadInt32();
                elements[i] = new VertexElement(
                    offset,
                    elementFormat,
                    elementUsage,
                    usageIndex
                );
            }
 
            /* TODO: This process generates alot of duplicate VertexDeclarations
             * which in turn complicates other systems trying to share GPU resources
             * like DX11 vertex input layouts.
             *
             * We should consider caching vertex declarations here and returning
             * previously created declarations when they are in our cache.
             */
            return new VertexDeclaration(vertexStride, elements);
        }
 
        #endregion
    }
}

Archive Download this file

Branches

Number of commits:
Page rendered in 0.13804s using 11 queries.