public MultiMeshContainer(Engine.Serialize.MeshesContainer MC)
        {
            if (MC != null)
            {
                //Transform = Matrix.Scaling(1);

                Hardpoints = MC.HardPoints;
                if (MC.Materials != null && MC.Geometry != null && MC.Geometry.Meshes != null)
                {
                    BSP = MC.Geometry.BSP;
                    LocalAABBMax = MC.Geometry.AABBMax;
                    LocalAABBMin = MC.Geometry.AABBMin;

                    Meshes = new Serialize.MeshLink[MC.Materials.Length];
                    Materials = new MaterialContainer[MC.Materials.Length];
                    for (int i = 0; i < MC.Materials.Length; i++)
                    {
                        Meshes[i] = MC.Geometry.Meshes[i];
                        Materials[i] = new MaterialContainer(MC.Materials[i]);
                    }

                    VertexsCount = MC.Geometry.VertexCount;
                    BytesPerVertex = MC.Geometry.VertexData.Length / VertexsCount;
                    FaceCount = MC.Geometry.IndexData.Length / 12;

                    using (var vertices = new DataStream(BytesPerVertex * VertexsCount, true, true))
                    {
                        vertices.WriteRange<byte>(MC.Geometry.VertexData, 0, MC.Geometry.VertexData.Length);
                        vertices.Position = 0;
                        Vertexs = new Buffer(ModelViewer.Program.device, vertices, BytesPerVertex * VertexsCount, ResourceUsage.Default, BindFlags.VertexBuffer, CpuAccessFlags.None, ResourceOptionFlags.None, 0);
                        binding = new VertexBufferBinding(Vertexs, BytesPerVertex, 0);
                    }

                    using (var indices = new DataStream(4 * FaceCount * 3, true, true))
                    {
                        indices.WriteRange<byte>(MC.Geometry.IndexData, 0, MC.Geometry.IndexData.Length);
                        indices.Position = 0;
                        Indices = new Buffer(ModelViewer.Program.device, indices, 4 * FaceCount * 3, ResourceUsage.Default, BindFlags.IndexBuffer, CpuAccessFlags.None, ResourceOptionFlags.None, 0);
                    }

                    BufferDescription bd = new BufferDescription();
                    bd.SizeInBytes = Marshal.SizeOf(typeof(ShaderConstants));
                    bd.Usage = ResourceUsage.Dynamic;
                    bd.BindFlags = BindFlags.ConstantBuffer;
                    bd.CpuAccessFlags = CpuAccessFlags.Write;
                    bd.OptionFlags = ResourceOptionFlags.None;
                    bd.StructureByteStride = 0;

                    constantsBuffer = new Buffer(ModelViewer.Program.device, bd);
                    constants = new ShaderConstants();
                }
            }
        }
        private void CahseSetTexture(MaterialContainer MC)
        {
            if (DifuseName != MC.Diffuse.Name)
            {
                Program.context.PixelShader.SetShaderResource(0, MC.Diffuse.TextureResource);
                Program.context.PixelShader.SetSampler(0, MC.DiffuseSamplerState);
                DifuseName = MC.Diffuse.Name;
            }

            if (SpecularMapName != MC.SpecularMap.Name)
            {
                Program.context.PixelShader.SetShaderResource(1, MC.SpecularMap.TextureResource);
                Program.context.PixelShader.SetSampler(1, MC.SpecularMapSamplerState);
                SpecularMapName = MC.SpecularMap.Name;
            }

            if (NormalMapName != MC.NormalMap.Name)
            {
                Program.context.PixelShader.SetShaderResource(2, MC.NormalMap.TextureResource);
                Program.context.PixelShader.SetSampler(2, MC.NormalMapSamplerState);
                NormalMapName = MC.NormalMap.Name;
            }

            if (SelfMapName != MC.SelfMap.Name)
            {
                Program.context.PixelShader.SetShaderResource(3, MC.SelfMap.TextureResource);
                Program.context.PixelShader.SetSampler(3, MC.SelfMapSamplerState);
                SelfMapName = MC.SelfMap.Name;
            }

            if (UV2DifuseName != MC.UV2Diffuse.Name)
            {
                Program.context.PixelShader.SetShaderResource(4, MC.UV2Diffuse.TextureResource);
                Program.context.PixelShader.SetSampler(4, MC.UV2DiffuseSamplerState);
                UV2DifuseName = MC.UV2Diffuse.Name;
            }
        }