예제 #1
0
        public override void Remove(ModelDisplayObject displayObject)
        {
            ModelDisplayObjectBatch batch = displayObject.BatchInformation.Batch;

            batch.Remove(displayObject, this);
            //If it's an empty batch, just throw it away.
            if (batch.DisplayObjects.Count == 0)
            {
                batches.Remove(batch);
            }
        }
예제 #2
0
 /// <summary>
 /// Collects the local space vertex data of the model.
 /// </summary>
 /// <param name="vertices">List of vertices to be filled with the model vertices.</param>
 /// <param name="indices">List of indices to be filled with the model indices.</param>
 /// <param name="batch">Batch that the display object is being added to.</param>
 /// <param name="baseVertexBufferIndex">Index in the batch's vertex buffer where this display object's vertices start.</param>
 /// <param name="baseIndexBufferIndex">Index in the batch's index buffer where this display object's vertices start.</param>
 /// <param name="batchListIndex">Index in the batch's display object list where this display object will be inserted.</param>
 public void GetVertexData(List <VertexPositionNormalTexture> vertices, List <ushort> indices,
                           ModelDisplayObjectBatch batch, ushort baseVertexBufferIndex, int baseIndexBufferIndex, int batchListIndex)
 {
     BatchInformation.Batch = batch;
     BatchInformation.BaseVertexBufferIndex = baseVertexBufferIndex;
     BatchInformation.BaseIndexBufferIndex  = baseIndexBufferIndex;
     BatchInformation.BatchListIndex        = batchListIndex;
     GetMeshData(vertices, indices);
     //Modify the indices.
     for (int i = 0; i < indices.Count; i++)
     {
         indices[i] += baseVertexBufferIndex;
     }
     BatchInformation.VertexCount = vertices.Count;
     BatchInformation.IndexCount  = indices.Count;
 }
예제 #3
0
        public override void Add(ModelDisplayObject displayObject)
        {
            foreach (ModelDisplayObjectBatch batch in batches)
            {
                if (batch.Add(displayObject, this))
                {
                    return;
                }
            }
            //If we made it here, that means there was no batch that could handle the display object.
            //This could be because the batches were full, or it could be that this
            //display object is just really large (like a terrain) and violated the
            //primitive count limit.

            //So throw the object in a new batch.
            //This will also allow a display object that is too large (like a 512x512 terrain) to be added to a batch,
            //so long as it is alone.

            var batchToAdd = new ModelDisplayObjectBatch(Game.GraphicsDevice);

            batches.Add(batchToAdd);
            batchToAdd.Add(displayObject, this);
        }