-
Notifications
You must be signed in to change notification settings - Fork 23
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[PreviewSystem] IRenderFilter.Instantiate
などがランダムでPlayerLoopの内外で呼び出される
#409
Comments
こちらの環境では再現できてません(ProxyPipelineなどの中にMeshを参照するテストコードを追加などしてみてもだめっぽい) Mac特有の事情の可能性もあるので、とりあえず発生時点でのスタックトレースなどをお願いします。 |
スタックトレース的には変化がありません 少し今試した感じ、エディタをいじってるだけでは発生確率が低いですが、シーンウィンドウの視点移動をしていたりすると(PlayerLoopをトリガさせていると?)よく発生するように思えます
|
今試したところ、windowsでも再現しました。
Windowsで確認するために使ったコードです。GUIDとfileIDをRead Write mesh offなメッシュにしてください。(この例ではあのんちゃんになってます)
|
こちらはなくても、シーン上の動作を下にしたIRenderFilterの更新がある場合に発生することがありそうです(on macos with RemoveMesh in Boxのpreviewで確認) |
再現できました。どうやらUnityのデフォルトSynchronizationContextがPlayerLoop扱いになるため、TaskThrottleが起動するとPlayerLoopに移ってしまうようです。NDMF専用のSynchronizationContextで対応します。 |
e70e43b で確認しました。
IRenderFilter.Instantiate
などがランダムでPlayerLoopの内外で呼び出されてしまいます。PlayerLoopの中で呼び出されるとRead/Write offなメッシュのアクセスがエラーになってしまうので、これが発生するか否かがランダムだとデバッグ時に微妙に困ります。
PlayerLoopのなかかどうかは
_Z18IsInsidePlayerLoopv
を呼び出せば確認できますがDllImportでは呼び出せないため様々なハックが必要となってしまいます。(正攻法は不明)一応EditorApplication.updateなどは外であることが確定しています。
unity 2022.3.22f1 arm64でのみ動く確認用コードはありますが他環境だと確実に壊れますため汎用性がないです。
https://gist.github.com/anatawa12/f730f08940ef965cadcf25388c0afb1c
The text was updated successfully, but these errors were encountered: