本文整理汇总了C#中BufferPool.TakeFromPoolIndex方法的典型用法代码示例。如果您正苦于以下问题:C# BufferPool.TakeFromPoolIndex方法的具体用法?C# BufferPool.TakeFromPoolIndex怎么用?C# BufferPool.TakeFromPoolIndex使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类BufferPool
的用法示例。
在下文中一共展示了BufferPool.TakeFromPoolIndex方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: CreateBinnedResources
public static unsafe void CreateBinnedResources(BufferPool<int> bufferPool, int maximumSubtreeCount, out int[] buffer, out MemoryRegion region, out BinnedResources resources)
{
int nodeCount = maximumSubtreeCount - 1;
//Note alignment. Probably won't provide any actual benefit- if the CLR doesn't provide aligned memory by default,
//it's highly unlikely that anything is built to expect or benefit from aligned memory (at the software level, anyway).
//(And I don't think the vector types are aligned.)
int bytesRequired =
16 * (3 + 3 + 1) + sizeof(BoundingBox) * (maximumSubtreeCount + 3 * nodeCount + 3 * MaximumBinCount) +
16 * (6 + 3 + 8) + sizeof(int) * (maximumSubtreeCount * 6 + nodeCount * 3 + MaximumBinCount * 8) +
16 * (1) + sizeof(Vector3) * maximumSubtreeCount +
16 * (1) + sizeof(SubtreeHeapEntry) * maximumSubtreeCount +
16 * (1) + sizeof(Node) * nodeCount;
//Divide by 4 due to int.
//We're using int buffers because they are the most commonly requested resource type, so the resource stands a higher chance of being reused.
int poolIndex = BufferPool<int>.GetPoolIndex(bytesRequired / 4);
buffer = bufferPool.TakeFromPoolIndex(poolIndex);
region = new MemoryRegion(buffer);
resources.BoundingBoxes = (BoundingBox*)region.Allocate(sizeof(BoundingBox) * maximumSubtreeCount);
resources.LeafCounts = (int*)region.Allocate(sizeof(int) * maximumSubtreeCount);
resources.IndexMap = (int*)region.Allocate(sizeof(int) * maximumSubtreeCount);
resources.Centroids = (Vector3*)region.Allocate(sizeof(Vector3) * maximumSubtreeCount);
resources.SubtreeHeapEntries = (SubtreeHeapEntry*)region.Allocate(sizeof(SubtreeHeapEntry) * maximumSubtreeCount);
resources.StagingNodes = (Node*)region.Allocate(sizeof(Node) * nodeCount);
resources.SubtreeBinIndicesX = (int*)region.Allocate(sizeof(int) * maximumSubtreeCount);
resources.SubtreeBinIndicesY = (int*)region.Allocate(sizeof(int) * maximumSubtreeCount);
resources.SubtreeBinIndicesZ = (int*)region.Allocate(sizeof(int) * maximumSubtreeCount);
resources.TempIndexMap = (int*)region.Allocate(sizeof(int) * maximumSubtreeCount);
resources.ALeafCountsX = (int*)region.Allocate(sizeof(int) * nodeCount);
resources.ALeafCountsY = (int*)region.Allocate(sizeof(int) * nodeCount);
resources.ALeafCountsZ = (int*)region.Allocate(sizeof(int) * nodeCount);
resources.AMergedX = (BoundingBox*)region.Allocate(sizeof(BoundingBox) * nodeCount);
resources.AMergedY = (BoundingBox*)region.Allocate(sizeof(BoundingBox) * nodeCount);
resources.AMergedZ = (BoundingBox*)region.Allocate(sizeof(BoundingBox) * nodeCount);
resources.BinBoundingBoxesX = (BoundingBox*)region.Allocate(sizeof(BoundingBox) * MaximumBinCount);
resources.BinBoundingBoxesY = (BoundingBox*)region.Allocate(sizeof(BoundingBox) * MaximumBinCount);
resources.BinBoundingBoxesZ = (BoundingBox*)region.Allocate(sizeof(BoundingBox) * MaximumBinCount);
resources.BinLeafCountsX = (int*)region.Allocate(sizeof(int) * MaximumBinCount);
resources.BinLeafCountsY = (int*)region.Allocate(sizeof(int) * MaximumBinCount);
resources.BinLeafCountsZ = (int*)region.Allocate(sizeof(int) * MaximumBinCount);
resources.BinSubtreeCountsX = (int*)region.Allocate(sizeof(int) * MaximumBinCount);
resources.BinSubtreeCountsY = (int*)region.Allocate(sizeof(int) * MaximumBinCount);
resources.BinSubtreeCountsZ = (int*)region.Allocate(sizeof(int) * MaximumBinCount);
resources.BinStartIndices = (int*)region.Allocate(sizeof(int) * MaximumBinCount);
resources.BinSubtreeCountsSecondPass = (int*)region.Allocate(sizeof(int) * MaximumBinCount);
}