ppy / osu

rhythm is just a *click* away!
https://osu.ppy.sh
MIT License
15.26k stars 2.27k forks source link

`UnmaskedTournamentBeatmapPanel` causes crash in tournament client #24589

Closed ILW8 closed 1 year ago

ILW8 commented 1 year ago

Type

Crash to desktop

Bug description

UnmaskedTournamentBeatmapPanel (introduced in https://github.com/ppy/osu/pull/24565) is causing the lazer tournament client to crash with the following stack trace:

System.InvalidOperationException: Can not have border effects/edge effects if masking is disabled.
   at osu.Framework.Graphics.Containers.CompositeDrawable.CompositeDrawableDrawNode.ApplyState()
   at osu.Framework.Graphics.Drawable.GenerateDrawNodeSubtree(UInt64 frame, Int32 treeIndex, Boolean forceNewDrawNode)
   at osu.Framework.Graphics.Containers.CompositeDrawable.GenerateDrawNodeSubtree(UInt64 frame, Int32 treeIndex, Boolean forceNewDrawNode)
   at osu.Framework.Graphics.Containers.CompositeDrawable.addFromComposite(UInt64 frame, Int32 treeIndex, Boolean forceNewDrawNode, Int32& j, CompositeDrawable parentComposite, List`1 target)
   at osu.Framework.Graphics.Containers.CompositeDrawable.GenerateDrawNodeSubtree(UInt64 frame, Int32 treeIndex, Boolean forceNewDrawNode)
   at osu.Framework.Graphics.Containers.CompositeDrawable.addFromComposite(UInt64 frame, Int32 treeIndex, Boolean forceNewDrawNode, Int32& j, CompositeDrawable parentComposite, List`1 target)
   at osu.Framework.Graphics.Containers.CompositeDrawable.GenerateDrawNodeSubtree(UInt64 frame, Int32 treeIndex, Boolean forceNewDrawNode)
   at osu.Framework.Graphics.Containers.CompositeDrawable.addFromComposite(UInt64 frame, Int32 treeIndex, Boolean forceNewDrawNode, Int32& j, CompositeDrawable parentComposite, List`1 target)
   at osu.Framework.Graphics.Containers.CompositeDrawable.GenerateDrawNodeSubtree(UInt64 frame, Int32 treeIndex, Boolean forceNewDrawNode)
   at osu.Framework.Graphics.Containers.CompositeDrawable.addFromComposite(UInt64 frame, Int32 treeIndex, Boolean forceNewDrawNode, Int32& j, CompositeDrawable parentComposite, List`1 target)
   at osu.Framework.Graphics.Containers.CompositeDrawable.GenerateDrawNodeSubtree(UInt64 frame, Int32 treeIndex, Boolean forceNewDrawNode)
   at osu.Framework.Graphics.Containers.CompositeDrawable.addFromComposite(UInt64 frame, Int32 treeIndex, Boolean forceNewDrawNode, Int32& j, CompositeDrawable parentComposite, List`1 target)
   at osu.Framework.Graphics.Containers.CompositeDrawable.GenerateDrawNodeSubtree(UInt64 frame, Int32 treeIndex, Boolean forceNewDrawNode)
   at osu.Framework.Graphics.Containers.CompositeDrawable.addFromComposite(UInt64 frame, Int32 treeIndex, Boolean forceNewDrawNode, Int32& j, CompositeDrawable parentComposite, List`1 target)
   at osu.Framework.Graphics.Containers.CompositeDrawable.GenerateDrawNodeSubtree(UInt64 frame, Int32 treeIndex, Boolean forceNewDrawNode)
   at osu.Framework.Graphics.Containers.CompositeDrawable.addFromComposite(UInt64 frame, Int32 treeIndex, Boolean forceNewDrawNode, Int32& j, CompositeDrawable parentComposite, List`1 target)
   at osu.Framework.Graphics.Containers.CompositeDrawable.GenerateDrawNodeSubtree(UInt64 frame, Int32 treeIndex, Boolean forceNewDrawNode)
   at osu.Framework.Graphics.Containers.CompositeDrawable.addFromComposite(UInt64 frame, Int32 treeIndex, Boolean forceNewDrawNode, Int32& j, CompositeDrawable parentComposite, List`1 target)
   at osu.Framework.Graphics.Containers.CompositeDrawable.GenerateDrawNodeSubtree(UInt64 frame, Int32 treeIndex, Boolean forceNewDrawNode)
   at osu.Framework.Graphics.Containers.CompositeDrawable.addFromComposite(UInt64 frame, Int32 treeIndex, Boolean forceNewDrawNode, Int32& j, CompositeDrawable parentComposite, List`1 target)
   at osu.Framework.Graphics.Containers.CompositeDrawable.GenerateDrawNodeSubtree(UInt64 frame, Int32 treeIndex, Boolean forceNewDrawNode)
   at osu.Framework.Graphics.Containers.CompositeDrawable.addFromComposite(UInt64 frame, Int32 treeIndex, Boolean forceNewDrawNode, Int32& j, CompositeDrawable parentComposite, List`1 target)
   at osu.Framework.Graphics.Containers.CompositeDrawable.GenerateDrawNodeSubtree(UInt64 frame, Int32 treeIndex, Boolean forceNewDrawNode)
   at osu.Framework.Graphics.Containers.CompositeDrawable.addFromComposite(UInt64 frame, Int32 treeIndex, Boolean forceNewDrawNode, Int32& j, CompositeDrawable parentComposite, List`1 target)
   at osu.Framework.Graphics.Containers.CompositeDrawable.GenerateDrawNodeSubtree(UInt64 frame, Int32 treeIndex, Boolean forceNewDrawNode)
   at osu.Framework.Graphics.Containers.CompositeDrawable.addFromComposite(UInt64 frame, Int32 treeIndex, Boolean forceNewDrawNode, Int32& j, CompositeDrawable parentComposite, List`1 target)
   at osu.Framework.Graphics.Containers.CompositeDrawable.GenerateDrawNodeSubtree(UInt64 frame, Int32 treeIndex, Boolean forceNewDrawNode)
   at osu.Framework.Graphics.Containers.CompositeDrawable.addFromComposite(UInt64 frame, Int32 treeIndex, Boolean forceNewDrawNode, Int32& j, CompositeDrawable parentComposite, List`1 target)
   at osu.Framework.Graphics.Containers.CompositeDrawable.GenerateDrawNodeSubtree(UInt64 frame, Int32 treeIndex, Boolean forceNewDrawNode)
   at osu.Framework.Graphics.Containers.CompositeDrawable.addFromComposite(UInt64 frame, Int32 treeIndex, Boolean forceNewDrawNode, Int32& j, CompositeDrawable parentComposite, List`1 target)
   at osu.Framework.Graphics.Containers.CompositeDrawable.GenerateDrawNodeSubtree(UInt64 frame, Int32 treeIndex, Boolean forceNewDrawNode)
   at osu.Framework.Graphics.Containers.CompositeDrawable.addFromComposite(UInt64 frame, Int32 treeIndex, Boolean forceNewDrawNode, Int32& j, CompositeDrawable parentComposite, List`1 target)
   at osu.Framework.Graphics.Containers.CompositeDrawable.GenerateDrawNodeSubtree(UInt64 frame, Int32 treeIndex, Boolean forceNewDrawNode)
   at osu.Framework.Graphics.Containers.CompositeDrawable.addFromComposite(UInt64 frame, Int32 treeIndex, Boolean forceNewDrawNode, Int32& j, CompositeDrawable parentComposite, List`1 target)
   at osu.Framework.Graphics.Containers.CompositeDrawable.GenerateDrawNodeSubtree(UInt64 frame, Int32 treeIndex, Boolean forceNewDrawNode)
   at osu.Framework.Graphics.Containers.CompositeDrawable.addFromComposite(UInt64 frame, Int32 treeIndex, Boolean forceNewDrawNode, Int32& j, CompositeDrawable parentComposite, List`1 target)
   at osu.Framework.Graphics.Containers.CompositeDrawable.GenerateDrawNodeSubtree(UInt64 frame, Int32 treeIndex, Boolean forceNewDrawNode)
   at osu.Framework.Graphics.Containers.CompositeDrawable.addFromComposite(UInt64 frame, Int32 treeIndex, Boolean forceNewDrawNode, Int32& j, CompositeDrawable parentComposite, List`1 target)
   at osu.Framework.Graphics.Containers.CompositeDrawable.GenerateDrawNodeSubtree(UInt64 frame, Int32 treeIndex, Boolean forceNewDrawNode)
   at osu.Framework.Graphics.Containers.CompositeDrawable.addFromComposite(UInt64 frame, Int32 treeIndex, Boolean forceNewDrawNode, Int32& j, CompositeDrawable parentComposite, List`1 target)
   at osu.Framework.Graphics.Containers.CompositeDrawable.GenerateDrawNodeSubtree(UInt64 frame, Int32 treeIndex, Boolean forceNewDrawNode)
   at osu.Framework.Graphics.Containers.CompositeDrawable.addFromComposite(UInt64 frame, Int32 treeIndex, Boolean forceNewDrawNode, Int32& j, CompositeDrawable parentComposite, List`1 target)
   at osu.Framework.Graphics.Containers.CompositeDrawable.GenerateDrawNodeSubtree(UInt64 frame, Int32 treeIndex, Boolean forceNewDrawNode)
   at osu.Framework.Graphics.Containers.CompositeDrawable.addFromComposite(UInt64 frame, Int32 treeIndex, Boolean forceNewDrawNode, Int32& j, CompositeDrawable parentComposite, List`1 target)
   at osu.Framework.Graphics.Containers.CompositeDrawable.GenerateDrawNodeSubtree(UInt64 frame, Int32 treeIndex, Boolean forceNewDrawNode)
   at osu.Framework.Platform.GameHost.UpdateFrame()
   at osu.Framework.Threading.GameThread.processFrame()
--- End of stack trace from previous location ---
   at osu.Framework.Platform.GameHost.<>c__DisplayClass139_0.<abortExecutionFromException>b__0()
   at osu.Framework.Threading.ScheduledDelegate.InvokeTask()
   at osu.Framework.Threading.ScheduledDelegate.RunTaskInternal()
   at osu.Framework.Threading.Scheduler.Update()
   at osu.Framework.Threading.GameThread.processFrame()
   at osu.Framework.Threading.GameThread.RunSingleFrame()
   at osu.Framework.Platform.ThreadRunner.RunMainLoop()
   at osu.Framework.Platform.GameHost.windowUpdate()
   at osu.Framework.Platform.SDL2Window.RunFrame()
   at osu.Framework.Platform.SDL2Window.RunMainLoop()
   at osu.Framework.Platform.SDL2Window.Run()
   at osu.Framework.Platform.GameHost.Run(Game game)
   at osu.Desktop.Program.Main(String[] args) in /Users/daohe/RiderProjects/osu/osu.Desktop/Program.cs:line 118

I've attached a bracket.json as well as an ipc.txt in this .zip for reproducing, if necessary. Steps to reproduce:

Screenshots or videos

https://github.com/ppy/osu/assets/1176059/306b09dc-fa0f-4013-b1bf-9a7313f782dc

Version

master at revision 4ee7fbd9b0c539824727a7a06a3f80e69a44f571

Logs

network.log performance.log runtime.log

peppy commented 1 year ago

Ouch.

Are you fine with using a previous release until this is fixed?

ILW8 commented 1 year ago

Yes, was specifically running off of master to test out latest changes (and catch potential issues)