public void LoadStoryboard(string dir, OsuFile osu) { ClearLayer(); List <Element> backEle = null; List <Element> foreEle = null; Stopwatch sw = new Stopwatch(); Console.WriteLine(@"Parsing.."); sw.Start(); string osbFile = Path.Combine(dir, osu.OsbFileName); if (osu.Events.ElementGroup != null) { var osb = osu.Events.ElementGroup; sw.Restart(); osb.Expand(); Console.WriteLine($@"Osu's osb expanded done in {sw.ElapsedMilliseconds} ms"); FillLayerList(ref backEle, ref foreEle, osb); } if (File.Exists(osbFile)) { sw.Restart(); var osb = ElementGroup.Parse(osbFile); Console.WriteLine($@"Parse osb done in {sw.ElapsedMilliseconds} ms"); sw.Restart(); osb.Expand(); Console.WriteLine($@"Osb expanded done in {sw.ElapsedMilliseconds} ms"); FillLayerList(ref backEle, ref foreEle, osb); } sw.Stop(); Directory = dir; if (backEle == null && foreEle == null) { return; } StoryboardTiming.Reset(); if (foreEle != null) { backEle?.AddRange(foreEle); } HwndRenderBase.AddLayers(new CustomLayer[] { new StoryboardLayer(HwndRenderBase.RenderTarget, backEle ?? foreEle, StoryboardTiming), new FpsLayer(HwndRenderBase.RenderTarget), }); StoryboardTiming.Start(); }