Пример #1
0
 public void FrameEnd()
 {
     vbo.SetData(vertices, vertexCount);
     vertexCount = 0;
 }
Пример #2
0
        //Code for baking an asteroid cube into a mesh
        void CreateBufferObject()
        {
            verts   = new List <VertexPositionNormalDiffuseTexture>();
            indices = new List <ushort>();
            //Gather a list of all materials
            List <Material> mats = new List <Material>();

            if (field.AllowMultipleMaterials)
            {
                foreach (var ast in field.Cube)
                {
                    var f = (ModelFile)ast.Drawable.LoadFile(sys.ResourceManager);
                    f.Initialize(sys.ResourceManager);
                    var l0 = f.Levels[0];
                    for (int i = l0.StartMesh; i < l0.StartMesh + l0.MeshCount; i++)
                    {
                        var  m   = l0.Mesh.Meshes[i].Material;
                        bool add = true;
                        foreach (var mat in mats)
                        {
                            if (m.Name == mat.Name)
                            {
                                add = false;
                                break;
                            }
                        }
                        if (add)
                        {
                            mats.Add(m);
                        }
                    }
                }
            }
            else
            {
                var f = (ModelFile)field.Cube[0].Drawable.LoadFile(sys.ResourceManager);
                f.Initialize(sys.ResourceManager);
                var msh = f.Levels[0];
                mats.Add(msh.Mesh.Meshes[msh.StartMesh].Material);
            }
            //Create the draw calls
            foreach (var mat in mats)
            {
                var start = indices.Count;
                foreach (var ast in field.Cube)
                {
                    AddAsteroidToBuffer(ast, mat, mats.Count == 1);
                }
                var count = indices.Count - start;
                cubeDrawCalls.Add(new DrawCall()
                {
                    Material = mat, StartIndex = start, Count = count
                });
            }
            cube_vbo = new VertexBuffer(typeof(VertexPositionNormalDiffuseTexture), verts.Count);
            cube_ibo = new ElementBuffer(indices.Count);
            cube_ibo.SetData(indices.ToArray());
            cube_vbo.SetData(verts.ToArray());
            cube_vbo.SetElementBuffer(cube_ibo);
            verts   = null;
            indices = null;
        }
Пример #3
0
 public void SetData()
 {
     vbo.SetData(verts, currentVerts);
 }