がりらぼ

WindowsRuntimeの応援ブログ

XNAでテクスチャをDisposeするとLoadできなくなる謎

XNAでTexture2DをLoadし、いらなくなったときにDisposeするものだと思っていたのですが、
どうもTextureをDisposeしちゃうと再びロードできなくなるという謎の怪奇現象。
ロードできてないままDrawするとSprite.Endで一度破棄したTexture使ってんじゃねえよって怒られます。
いろいろ調べた結果、どうやらDisposeしないほうがいいらしい。
たぶん普通にDisposeしちゃうとプログラムが終わるまでロードできないんじゃないかな。間違ってたらごめんなさい。
だからここはガベージコレクションさんに任せたほうが無難。
ロードしたリソースがゲーム終わるまで開放できないとかメモリ管理大丈夫かよっとか思ったりもしたけど、やっぱりGCさんは優秀なんですね。

Microsoftさんによるとテクスチャにはマネージリソースとアンマネージリソースがあるらしく、
後者はGCで管理できるところだけ開放。前者はGC管轄以外も開放するとのこと。
そしてそれはDisposeメゾッドにtrueかfalseを引数で入れればできるらしい。
ならばfalse入れればいいんじゃね?と思い、入れるもアクセス権限エラー。
真面目にわかりませんね。またわかったら書きます。
とりあえず動いてよかった。