public void FrameEnd() { vbo.SetData(vertices, vertexCount); vertexCount = 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; }
public void SetData() { vbo.SetData(verts, currentVerts); }