Пример #1
0
        private static Direct3D.VertexElement ConvertElement(VertexElementDesc element, ref short loc)
        {
            Direct3D.DeclarationMethod declMethod = SlimDX.Direct3D9.DeclarationMethod.Default;
            Direct3D.DeclarationUsage  declUsage;
            Direct3D.DeclarationType   declType;

            int size = VertexLayout.SizeOf(element.DataType);

            switch (element.DataType)
            {
            case VertexElementDataType.Float1:
                declType = SlimDX.Direct3D9.DeclarationType.Float1;
                break;

            case VertexElementDataType.Float2:
                declType = SlimDX.Direct3D9.DeclarationType.Float2;
                break;

            case VertexElementDataType.Float3:
                declType = SlimDX.Direct3D9.DeclarationType.Float3;
                break;

            case VertexElementDataType.Float4:
                declType = SlimDX.Direct3D9.DeclarationType.Float4;
                break;

            case VertexElementDataType.Int:
                declType = SlimDX.Direct3D9.DeclarationType.Color;
                break;

            default:
                throw new NotImplementedException(
                          element.DataType.ToString() + " not implemented.");
            }

            switch (element.ElementType)
            {
            case VertexElement.Position:
                declUsage = SlimDX.Direct3D9.DeclarationUsage.Position;
                break;

            case VertexElement.Texture:
                declUsage = SlimDX.Direct3D9.DeclarationUsage.TextureCoordinate;
                break;

            case VertexElement.Normal:
                declUsage = SlimDX.Direct3D9.DeclarationUsage.Normal;
                break;

            case VertexElement.Tangent:
                declUsage = SlimDX.Direct3D9.DeclarationUsage.Tangent;
                break;

            case VertexElement.DiffuseColor:
                declUsage = SlimDX.Direct3D9.DeclarationUsage.Color;
                break;

            case VertexElement.Bitangent:
                declUsage = SlimDX.Direct3D9.DeclarationUsage.Binormal;
                break;

            default:
                throw new NotImplementedException(
                          element.ElementType.ToString() + " not implemented.");
            }

            loc += (short)size;

            return(new Direct3D.VertexElement(0, (short)(loc - size), declType, declMethod, declUsage, 0));
        }