Skip to content

Commit

Permalink
sorting
Browse files Browse the repository at this point in the history
  • Loading branch information
notgiven688 committed Dec 18, 2024
1 parent 87c7e24 commit b3705a6
Showing 1 changed file with 17 additions and 26 deletions.
43 changes: 17 additions & 26 deletions src/Jitter2/Collision/DynamicTree.cs
Original file line number Diff line number Diff line change
Expand Up @@ -126,15 +126,15 @@ public struct Node
private int nodePointer = -1;
private int root = NullNode;

private Action<Parallel.Batch> updateBoundingBoxes;
private readonly Action<Parallel.Batch> scanMoved;
private readonly Action<Parallel.Batch> scanOverlaps;
private readonly Action<Parallel.Batch> updateBoundingBoxes;

/// <summary>
/// Gets the root of the dynamic tree.
/// </summary>
public int Root => root;

private readonly Action<Parallel.Batch> scanOverlapsPre;
private readonly Action<Parallel.Batch> scanOverlapsPost;

public Func<IDynamicTreeProxy, IDynamicTreeProxy, bool> Filter { get; set; }

Expand All @@ -144,25 +144,19 @@ public struct Node
/// <param name="filter">A collision filter function, used in Jitter to exclude collisions between Shapes belonging to the same body. The collision is filtered out if the function returns false.</param>
public DynamicTree(Func<IDynamicTreeProxy, IDynamicTreeProxy, bool> filter)
{
scanOverlapsPre = batch =>
{
ScanForMovedProxies(batch);
//ScanForOverlaps(batch.BatchIndex, false);
};

scanOverlapsPost = batch => { ScanForOverlaps(batch.BatchIndex, true); };

scanMoved = ScanForMovedProxies;
scanOverlaps = batch => { ScanForOverlaps(batch.BatchIndex, true); };
updateBoundingBoxes = UpdateBoundingBoxesCallback;

Filter = filter;
}

public enum Timings
{
ScanOverlapsPre,
UpdateProxies,
ScanOverlapsPost,
UpdateBoundingBoxes,
ScanMoved,
UpdateProxies,
ScanOverlaps,
Last
}

Expand Down Expand Up @@ -196,20 +190,18 @@ void SetTime(Timings type)

CheckBagCount(multiThread);

SetTime(Timings.ScanOverlapsPre);

SetTime(Timings.UpdateBoundingBoxes);

if (multiThread)
{
proxies.ParallelForBatch(256, updateBoundingBoxes);
SetTime(Timings.UpdateBoundingBoxes);

const int taskThreshold = 24;
int numTasks = Math.Clamp(proxies.ActiveCount / taskThreshold, 1, ThreadPool.Instance.ThreadCount);
Parallel.ForBatch(0, proxies.ActiveCount, numTasks, scanMoved);

Parallel.ForBatch(0, proxies.ActiveCount, numTasks, scanOverlapsPre);

SetTime(Timings.ScanOverlapsPre);
SetTime(Timings.ScanMoved);

updatedProxies = 0;

Expand All @@ -227,19 +219,18 @@ void SetTime(Timings type)

SetTime(Timings.UpdateProxies);

Parallel.ForBatch(0, proxies.ActiveCount, numTasks, scanOverlapsPost);
Parallel.ForBatch(0, proxies.ActiveCount, numTasks, scanOverlaps);

SetTime(Timings.ScanOverlapsPost);
SetTime(Timings.ScanOverlaps);
}
else
{
var batch = new Parallel.Batch(0, proxies.ActiveCount);

UpdateBoundingBoxesCallback(batch);
SetTime(Timings.UpdateBoundingBoxes);

scanOverlapsPre(batch);
SetTime(Timings.ScanOverlapsPre);
scanMoved(batch);
SetTime(Timings.ScanMoved);

var sl = lists[0];
for (int i = 0; i < sl.Count; i++)
Expand All @@ -250,8 +241,8 @@ void SetTime(Timings type)

SetTime(Timings.UpdateProxies);

scanOverlapsPost(new Parallel.Batch(0, proxies.ActiveCount));
SetTime(Timings.ScanOverlapsPost);
scanOverlaps(new Parallel.Batch(0, proxies.ActiveCount));
SetTime(Timings.ScanOverlaps);
}
}

Expand Down

0 comments on commit b3705a6

Please sign in to comment.