Esempio n. 1
0
    public void AddRenderer(BatchRenderer _batchRenderer, int _stablePeriod = -1)
    {
        BatchRenderer u = _batchRenderer;

        _Batch        batch;
        List <_Batch> batchList;

        if (m_materialTable.TryGetValue(u.m_meshRenderer.sharedMaterial.name, out batchList))
        {
            int i = batchList.Count - 1;
            while (i >= 0)
            {
                batch = batchList[i];
                if (batch.VertexCount + _batchRenderer.m_meshFilter.sharedMesh.vertexCount < ushort.MaxValue &&
                    batch.UnitCount() < short.MaxValue)
                {
                    batch.AddUnit(u);
                    break;
                }
                --i;
            }
            if (i < 0) // all full, need a new batch
            {
                batch = new _Batch(this, _stablePeriod);
                batch.AddUnit(_batchRenderer);
                batchList.Add(batch);
            }
        }
        else
        {
            batch = new _Batch(this, _stablePeriod);
            batch.AddUnit(u);
            batchList = new List <_Batch>();
            batchList.Add(batch);
            m_materialTable.Add(u.m_meshRenderer.sharedMaterial.name, batchList);
        }
    }
Esempio n. 2
0
    public void RemoveRenderer(BatchRenderer _batchRenderer)
    {
        List <string> toBeRemoved = new List <string>();

        foreach (var pair in m_materialTable)
        {
            List <_Batch> batchList = pair.Value;
            for (int i = 0; i < batchList.Count; i++)
            {
                _Batch batch = batchList[i];
                if (batch != null)
                {
                    if (batch.RemoveUnit(_batchRenderer))
                    {
                        if (batch.UnitCount() == 0)
                        {
                            batch.Destroy();
                            batchList.RemoveAt(i);
                        }
                    }
                }
                else
                {
                    batchList.RemoveAt(i);
                }
            }
            if (pair.Value.Count == 0)
            {
                toBeRemoved.Add(pair.Key);
            }
        }
        foreach (string name in toBeRemoved)
        {
            m_materialTable.Remove(name);
        }
    }
Esempio n. 3
0
 public _State_Stable(_Batch _batch)
 {
     m_batch = _batch;
 }