public static void Render(RendererBase sceneElement, RenderEventArgs arg) { if (sceneElement != null) { mat4 parentCascadeModelMatrix = arg.ModelMatrixStack.Peek(); sceneElement.cascadeModelMatrix = sceneElement.GetModelMatrix(parentCascadeModelMatrix); var renderable = sceneElement as IRenderable; ThreeFlags flags = (renderable != null) ? renderable.EnableRendering : ThreeFlags.None; bool before = (renderable != null) && ((flags & ThreeFlags.BeforeChildren) == ThreeFlags.BeforeChildren); bool children = (renderable == null) || ((flags & ThreeFlags.Children) == ThreeFlags.Children); bool after = (renderable != null) && ((flags & ThreeFlags.AfterChildren) == ThreeFlags.AfterChildren); if (before) { renderable.RenderBeforeChildren(arg); } if (children) { arg.ModelMatrixStack.Push(sceneElement.cascadeModelMatrix); foreach (var item in sceneElement.Children) { RenderAction.Render(item, arg); } arg.ModelMatrixStack.Pop(); } if (after) { renderable.RenderAfterChildren(arg); } } }
private void RenderForPicking(SceneNodeBase sceneElement, LegacyPickingEventArgs arg, ref uint currentName) { if (sceneElement != null) { var pickable = sceneElement as ILegacyPickable; ThreeFlags flags = (pickable != null) ? (pickable.EnableLegacyPicking) : ThreeFlags.None; bool before = (pickable != null) && ((flags & ThreeFlags.BeforeChildren) == ThreeFlags.BeforeChildren); bool children = (pickable == null) || ((flags & ThreeFlags.Children) == ThreeFlags.Children); if (before) { // Load and map the name. GL.Instance.LoadName(currentName); arg.hitMap[currentName] = sceneElement; pickable.RenderBeforeChildrenForLegacyPicking(arg); // Increment the name. currentName++; } if (children) { foreach (var item in sceneElement.Children) { this.RenderForPicking(item, arg, ref currentName); } } } }
/// <summary> /// /// </summary> /// <param name="sceneNodeBase"></param> /// <param name="arg"></param> public static void Render(SceneNodeBase sceneNodeBase, RenderEventArgs arg) { if (sceneNodeBase != null) { var node = sceneNodeBase as IRenderable; ThreeFlags flags = (node != null) ? node.EnableRendering : ThreeFlags.None; bool before = (node != null) && ((flags & ThreeFlags.BeforeChildren) == ThreeFlags.BeforeChildren); bool children = (node == null) || ((flags & ThreeFlags.Children) == ThreeFlags.Children); bool after = (node != null) && ((flags & ThreeFlags.AfterChildren) == ThreeFlags.AfterChildren); if (before) { node.RenderBeforeChildren(arg); } if (children) { foreach (var item in sceneNodeBase.Children) { Render(item, arg); } } if (after) { node.RenderAfterChildren(arg); } } }
private static void Render(GLControl control, GUIRenderEventArgs arg) { if (control != null) { var renderable = control as IGUIRenderable; ThreeFlags flags = (renderable != null) ? renderable.EnableGUIRendering : ThreeFlags.None; bool before = (renderable != null) && ((flags & ThreeFlags.BeforeChildren) == ThreeFlags.BeforeChildren); bool children = (renderable == null) || ((flags & ThreeFlags.Children) == ThreeFlags.Children); bool after = (renderable != null) && ((flags & ThreeFlags.AfterChildren) == ThreeFlags.AfterChildren); if (before) { renderable.RenderGUIBeforeChildren(arg); } if (children) { foreach (var item in control.Children) { GUIRenderAction.Render(item, arg); } } if (after) { renderable.RenderGUIAfterChildren(arg); } } }
private void RenderForPicking(RendererBase sceneElement, LegacyPickEventArgs arg, ref uint currentName) { var pickable = sceneElement as ILegacyPickable; if (pickable != null) { mat4 parentCascadeModelMatrix = arg.ModelMatrixStack.Peek(); sceneElement.cascadeModelMatrix = sceneElement.GetModelMatrix(parentCascadeModelMatrix); ThreeFlags flags = pickable.EnableLegacyPicking; if ((flags & ThreeFlags.BeforeChildren) == ThreeFlags.BeforeChildren) { // Load and map the name. GL.Instance.LoadName(currentName); arg.hitMap[currentName] = sceneElement; pickable.RenderBeforeChildrenForLegacyPicking(arg); // Increment the name. currentName++; } if ((flags & ThreeFlags.Children) == ThreeFlags.Children) { arg.ModelMatrixStack.Push(sceneElement.cascadeModelMatrix); foreach (var item in sceneElement.Children) { this.RenderForPicking(item, arg, ref currentName); } arg.ModelMatrixStack.Pop(); } //if ((flags & ThreeFlags.AfterChildren) == ThreeFlags.AfterChildren) //{ // // Load and map the name. // GL.Instance.LoadName(currentName); // arg.hitMap[currentName] = sceneElement; // pickable.RenderAfterChildrenForLegacyPicking(arg); // // Increment the name. // currentName++; //} } }
private static void RenderAmbientColor(SceneNodeBase sceneNodeBase, BlinnPhongAmbientEventArgs arg) { if (sceneNodeBase != null) { var node = sceneNodeBase as IBlinnPhong; ThreeFlags flags = (node != null) ? node.EnableRendering : ThreeFlags.None; bool before = (node != null) && ((flags & ThreeFlags.BeforeChildren) == ThreeFlags.BeforeChildren); bool children = (node == null) || ((flags & ThreeFlags.Children) == ThreeFlags.Children); bool after = (node != null) && ((flags & ThreeFlags.AfterChildren) == ThreeFlags.AfterChildren); if (before || after) { node.RenderAmbientColor(arg); } if (children) { foreach (var item in sceneNodeBase.Children) { RenderAmbientColor(item, arg); } } } }