public void Execute(int index) { int VisibleState = 1; FMeshBatch MeshBatch = MeshBatchs[index]; if (MeshBatch.Visible) { for (int i = 0; i < 6; i++) { float3 normal = ViewFrustum[i].normal; float distance = ViewFrustum[i].distance; float dist = math.dot(normal, MeshBatch.BoundBox.center) + distance; float radius = math.dot(math.abs(normal), MeshBatch.BoundBox.extents); if (dist + radius < 0) { VisibleState = 0; } } } else { VisibleState = 0; } ViewMeshBatchs[index] = VisibleState; }
public void Execute(int Index) { if (CullingData.ViewMeshBatchs[Index] != 0) { FMeshBatch MeshBatch = MeshBatchs[Index]; FMeshDrawCommand MeshDrawCommand = new FMeshDrawCommand(MeshBatch.Mesh.Id, MeshBatch.Material.Id, MeshBatch.SubmeshIndex, FMeshBatch.MatchForDynamicInstance(ref MeshBatch)); FPassMeshBatch PassMeshBatch = new FPassMeshBatch(Index); MeshDrawCommandsMap.Add(MeshDrawCommand, PassMeshBatch); } }
public void Execute() { for (int Index = 0; Index < CullingData.ViewMeshBatchs.Length; Index++) { if (CullingData.ViewMeshBatchs[Index] != 0) { FMeshBatch MeshBatch = MeshBatchs[Index]; FPassMeshBatchV2 PassMeshBatch = new FPassMeshBatchV2(FMeshBatch.MatchForDynamicInstance(ref MeshBatch), Index); PassMeshBatchs.Add(PassMeshBatch); } } }
public bool Execute(int index) { FMeshBatch MeshBatch = MeshBatchs[index]; for (int i = 0; i < 6; i++) { float3 normal = ViewFrustum[i].normal; float distance = ViewFrustum[i].distance; float dist = math.dot(normal, MeshBatch.BoundBox.center) + distance; float radius = math.dot(math.abs(normal), MeshBatch.BoundBox.extents); if (dist + radius < 0) { return(false); } } return(true); }
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); } }