private void RenderForPicking(RendererBase sceneElement, PickEventArgs arg)
{
if (sceneElement != null)
{
mat4 parentCascadeModelMatrix = arg.ModelMatrixStack.Peek();
sceneElement.cascadeModelMatrix = sceneElement.GetModelMatrix(parentCascadeModelMatrix);
var pickable = sceneElement as IPickable;
TwoFlags flags = (pickable != null) ? pickable.EnablePicking : TwoFlags.None;
bool before = (pickable != null) && ((flags & TwoFlags.BeforeChildren) == TwoFlags.BeforeChildren);
bool children = (pickable == null) || ((flags & TwoFlags.Children) == TwoFlags.Children);
if (before)
{
pickable.PickingBaseId += arg.RenderedVertexCount;
pickable.RenderForPicking(arg);
arg.RenderedVertexCount += pickable.GetVertexCount();
}
if (children)
{
arg.ModelMatrixStack.Push(sceneElement.cascadeModelMatrix);
foreach (var item in sceneElement.Children)
{
this.RenderForPicking(item, arg);
}
arg.ModelMatrixStack.Pop();
}
}
}