Exemplo n.º 1
0
        public VertexElementSet(VertexElement[] elements)
        {
            Stride = (int)elements[elements.Length - 1].Offset +
                     (int)elements[elements.Length - 1].Format * sizeof(float);

            Elements = elements;

#if !D3D_DISABLED
            Direct3D9.Direct3D9Renderer renderer = RendererManager.CurrentRenderer as Direct3D9.Direct3D9Renderer;

            if (renderer != null)
            {
                SharpDX.Direct3D9.VertexElement[] d3d9Elements = new SharpDX.Direct3D9.VertexElement[elements.Length + 1];
                for (int i = 0; i < elements.Length; i++)
                {
                    d3d9Elements[i].Offset = (short)elements[i].Offset;

                    if (elements[i].Format == VertexElementFormat.Float)
                    {
                        d3d9Elements[i].Type = SharpDX.Direct3D9.DeclarationType.Float1;
                    }
                    else if (elements[i].Format == VertexElementFormat.Float2)
                    {
                        d3d9Elements[i].Type = SharpDX.Direct3D9.DeclarationType.Float2;
                    }
                    else if (elements[i].Format == VertexElementFormat.Float3)
                    {
                        d3d9Elements[i].Type = SharpDX.Direct3D9.DeclarationType.Float3;
                    }
                    else if (elements[i].Format == VertexElementFormat.Float4)
                    {
                        d3d9Elements[i].Type = SharpDX.Direct3D9.DeclarationType.Float4;
                    }

                    if (elements[i].Usage == VertexElementUsage.Position)
                    {
                        d3d9Elements[i].Usage = SharpDX.Direct3D9.DeclarationUsage.Position;
                    }
                    else if (elements[i].Usage == VertexElementUsage.TexCoord)
                    {
                        d3d9Elements[i].Usage = SharpDX.Direct3D9.DeclarationUsage.TextureCoordinate;
                    }
                    else if (elements[i].Usage == VertexElementUsage.Normal)
                    {
                        d3d9Elements[i].Usage = SharpDX.Direct3D9.DeclarationUsage.Normal;
                    }
                    else if (elements[i].Usage == VertexElementUsage.Color)
                    {
                        d3d9Elements[i].Usage = SharpDX.Direct3D9.DeclarationUsage.Color;
                    }

                    d3d9Elements[i].Stream     = 0;
                    d3d9Elements[i].UsageIndex = (byte)elements[i].UsageIndex;
                    d3d9Elements[i].Method     = SharpDX.Direct3D9.DeclarationMethod.Default;
                }
                d3d9Elements[d3d9Elements.Length - 1] = SharpDX.Direct3D9.VertexElement.VertexDeclarationEnd;
                D3D9Declaration = new SharpDX.Direct3D9.VertexDeclaration(renderer.Direct3D9Device, d3d9Elements);
            }
#endif
        }
Exemplo n.º 2
0
        public VertexDeclaration( IGraphicsDevice graphicsDevice, VertexElement [] elements )
        {
            this.elements = elements.GetEnumerator ();
            SharpDX.Direct3D9.Device device = graphicsDevice.Handle as SharpDX.Direct3D9.Device;

            SharpDX.Direct3D9.VertexElement [] convedElements = new SharpDX.Direct3D9.VertexElement [ elements.Length + 1 ];
            for ( int i = 0, offset = 0; i < elements.Length; ++i )
            {
                convedElements [ i ] = new SharpDX.Direct3D9.VertexElement ( 0, ( short ) offset,
                    ConvertType ( elements [ i ].Size ), SharpDX.Direct3D9.DeclarationMethod.Default,
                    ConvertType ( elements [ i ].Type ), ( byte ) elements [ i ].UsageIndex );
                offset += ElementSizeToRealSize ( elements [ i ].Size );
            }
            convedElements [ elements.Length ] = SharpDX.Direct3D9.VertexElement.VertexDeclarationEnd;

            vertexDeclaration = new SharpDX.Direct3D9.VertexDeclaration ( device, convedElements );
        }