void RenderLimb(int limbIdx, bool overlay = false) { _renderer.RdpMtxStack.Push(); if (_curAnim != null) { _renderer.RdpMtxStack.Load(CalcMatrix(_renderer.RdpMtxStack.Top(), limbIdx)); if (overlay) { GL.Begin(PrimitiveType.Points); GL.Vertex3(0, 0, 0); GL.End(); if (_limbs[limbIdx].Child != 0xFF) { Vector3 childPos = GetLimbPos(_limbs[limbIdx].Child); GL.Begin(PrimitiveType.Lines); GL.Vertex3(0, 0, 0); GL.Vertex3(childPos); GL.End(); } } else { var node = treeView_hierarchy.SelectedNode; _renderer.SetHightlightEnabled(node?.Tag?.Equals(_limbs[limbIdx]) ?? false); if (_limbDlists[limbIdx] != null) { _renderer.RenderDList(_limbDlists[limbIdx]); } } } if (_limbs[limbIdx].Child != 0xFF) { RenderLimb(_limbs[limbIdx].Child, overlay); } _renderer.RdpMtxStack.Pop(); if (_limbs[limbIdx].Sibling != 0xFF) { RenderLimb(_limbs[limbIdx].Sibling, overlay); } }
void RenderCallback(Matrix4 proj, Matrix4 view) { _renderer.RenderStart(proj, view); if (_dlistError != null) { toolStripStatusErrorLabel.Text = _dlistError; return; } foreach (var routine in _routines) { _renderer.ModelMtxStack.Push(Matrix4.CreateTranslation(routine.X, routine.Y, routine.Z)); _renderer.RenderDList(routine.Dlist); _renderer.ModelMtxStack.Pop(); } toolStripStatusErrorLabel.Text = _renderer.RenderFailed() ? $"RENDER ERROR AT 0x{_renderer.RenderErrorAddr:X8}! ({_renderer.ErrorMsg})" : ""; }