public void Execute() { //Gather PassMeshBatch for (int Index = 0; Index < CullingData.ViewMeshBatchs.Length; Index++) { if (CullingData.ViewMeshBatchs[Index] != 0) { FMeshBatch MeshBatch = MeshBatchs[Index]; if (MeshBatch.Priority >= MeshPassDesctiption.RenderQueueMin && MeshBatch.Priority <= MeshPassDesctiption.RenderQueueMax) { FPassMeshBatchV2 PassMeshBatch = new FPassMeshBatchV2(FMeshBatch.MatchForDynamicInstance(ref MeshBatch), Index); PassMeshBatchs.Add(PassMeshBatch); } } } //Sort PassMeshBatch PassMeshBatchs.Sort(); //Build MeshDrawCommand FPassMeshBatchV2 CachePassMeshBatch = new FPassMeshBatchV2(-1, -1); for (int i = 0; i < PassMeshBatchs.Length; i++) { FPassMeshBatchV2 PassMeshBatch = PassMeshBatchs[i]; Indexs[i] = PassMeshBatch.MeshBatchIndex; FMeshBatch MeshBatch = MeshBatchs[PassMeshBatch.MeshBatchIndex]; if (!PassMeshBatch.Equals(CachePassMeshBatch)) { CachePassMeshBatch = PassMeshBatch; CountOffsets.Add(new int2(0, i)); MeshDrawCommands.Add(new FMeshDrawCommandV2(MeshBatch.Mesh.Id, MeshBatch.Material.Id, MeshBatch.SubmeshIndex)); } int2 CountOffset = CountOffsets[CountOffsets.Length - 1]; CountOffsets[CountOffsets.Length - 1] = CountOffset + new int2(1, 0); } }
public void Execute() { FPassMeshBatchV2 CachePassMeshBatch = new FPassMeshBatchV2(-1, -1); for (int i = 0; i < PassMeshBatchs.Length; i++) { FPassMeshBatchV2 PassMeshBatch = PassMeshBatchs[i]; Indexs[i] = PassMeshBatch.MeshBatchIndex; FMeshBatch MeshBatch = MeshBatchs[PassMeshBatch.MeshBatchIndex]; if (!PassMeshBatch.Equals(CachePassMeshBatch)) { CachePassMeshBatch = PassMeshBatch; CountOffsets.Add(new int2(0, i)); MeshDrawCommands.Add(new FMeshDrawCommandV2(MeshBatch.Mesh.Id, MeshBatch.Material.Id, MeshBatch.SubmeshIndex)); } int2 CountOffset = CountOffsets[CountOffsets.Length - 1]; CountOffsets[CountOffsets.Length - 1] = CountOffset + new int2(1, 0); } }