/// <summary>
/// 遍历以<paramref name="lastVertexId"/>为最后一个顶点的图元,
/// 瞄准每个图元的索引(例如1个三角形有3个索引)中的最后一个索引,
/// 将此索引在<see cref="IndexBuffer"/>中的索引(位置)收集起来。
/// </summary>
/// <param name="arg"></param>
/// <param name="lastVertexId"></param>
/// <returns></returns>
private List <RecognizedPrimitiveInfo> GetLastIndexIdList(PickingEventArgs arg, uint lastVertexId)
{
var indexBuffer = this.Renderer.PickingRenderUnit.VertexArrayObject.IndexBuffer;
PrimitiveRecognizer recognizer = PrimitiveRecognizerFactory.Create(
(arg.GeometryType.Contains(GeometryType.Point) &&
indexBuffer.Mode.ToGeometryType() == GeometryType.Line) ?
DrawMode.Points : indexBuffer.Mode);
PrimitiveRestartState glState = GetPrimitiveRestartState();
var buffer = indexBuffer as OneIndexBuffer;
IntPtr pointer = buffer.MapBuffer(MapBufferAccess.ReadOnly);
List <RecognizedPrimitiveInfo> primitiveInfoList = null;
if (glState == null)
{
primitiveInfoList = recognizer.Recognize(lastVertexId, pointer, indexBuffer as OneIndexBuffer);
}
else
{
primitiveInfoList = recognizer.Recognize(lastVertexId, pointer, indexBuffer as OneIndexBuffer, glState.RestartIndex);
}
buffer.UnmapBuffer();
return(primitiveInfoList);
}