Esempio n. 1
0
        /// <summary>
        /// Draws all meshes from the render cache between <code>startToken</code> and
        /// (but not including) <code>endToken</code>. The render cache contains all meshes
        /// rendered in the previous frame.
        /// </summary>
        public void DrawFromCache(BatchToken startToken, BatchToken endToken)
        {
            MeshSubset subset = SMeshSubset;

            if (!startToken.Equals(endToken))
            {
                PushState();

                for (int i = startToken.BatchID; i <= endToken.BatchID; ++i)
                {
                    var meshBatch = _batchProcessorPrev.GetBatchAt(i);
                    subset.SetTo(); // resets subset

                    if (i == startToken.BatchID)
                    {
                        subset.VertexId    = startToken.VertexID;
                        subset.IndexId     = startToken.IndexID;
                        subset.NumVertices = meshBatch.NumVertices - subset.VertexId;
                        subset.NumIndices  = meshBatch.NumIndices - subset.IndexId;
                    }

                    if (i == endToken.BatchID)
                    {
                        subset.NumVertices = endToken.VertexID - subset.VertexId;
                        subset.NumIndices  = endToken.IndexID - subset.IndexId;
                    }

                    if (subset.NumVertices != 0)
                    {
                        _state.Alpha     = 1.0f;
                        _state.BlendMode = meshBatch.BlendMode;
                        _batchProcessor.AddMesh(meshBatch, _state, subset, true);
                    }
                }
                PopState();
            }
        }