[スポンサードリンク]
2014-09-11 09:25:20
【PSM+MonoGame】SpriteBatch.Endで出る「OutOfMemoryException」
  1. 開発
  2. MonoGame
  3. PSMobile
SpriteBatch.BeginとEndの中でDrawを呼んでいるかと思いますが、マップチップを描画したりするときに、大量にSpriteを登録すると「OutOfMemoryException」が発生することがあります。


SpriteBatchの内部では2000個として配列が確保されていたのですが、32*32のマップチップで960*544を埋めるだけで510個、マップチップの配置具合によっては10階層まで描画されるので510*10=5100個! ということでオーバーしてしまっていたようでした。
(そんなに描画するほうが悪いのですが、テストプログラムだったので・・・)

はて、どうしたものかと悩んでいたら、Nearealさん「SpriteBatchによる描画の並列化」という記事で「複数のSpriteBatchを用意して」という話がありました。
(実際は、複数のSpriteBatchを用意、並列化してパフォーマンス向上という高レベルなお話です・・)


なるほど、SpriteBatchを複数作ればよかったのかという結論になりました。
実装的にも簡単です。

実際使う場合には、まずは「batch1」でDrawしつつ、Drawした回数を数えておいて、
回数が一定数を超えたら「batch2」を使うようにする・・という仕組みにすればOKかと思います。


とはいえ速度的には、1個のSpriteBatchにまとめたほうが早いということだったので
できるだけ1個にまとめておきたいところですね。

【関連記事】

[スポンサードリンク]
コメントする


コメント
まだコメントはありません。