kowさんは天ざる大好き

創作に絶望すると、世界が反転した日記

ゲームデータの隠蔽

yaneSDK4Dのときにはまったのが、ゲームデータの隠蔽だ。
結局これのせいで、プログラムは泥沼になった。

yaneSDK4Dからは、基本的にパス付きZIPに対応しているので(yanesdk4dではこの部分にバグがあって読み出しに失敗する。yanesdk.netではちゃんと直っている)、それで固めてしまえばOKである。
zipのフォーマットもごちゃごちゃしているが、それはそれらしく解凍すればよい。


ただ、これだけでは済まなかった。
zipから解凍していくとアプリの掴むメモリがどんどん増えていく。
zipからファイルを読み出すときに、展開先メモリを確保する必要がある。
音楽データになると数MBの容量だ。
この展開先メモリの確保がどんどんとメモリを掴んでいくらしいのだ。
D言語ではでかい配列を確保したら、deleteすべきだ、ということだが、deleteしても症状の改善には至らない。
なぜだ!


zipから展開したファイルをそのままストーリムでテンポラリファイルに書き出す?
テンポラリファイルに書き出すことで隠蔽性が低下するのだけれど、これに関してはそれほど問題と見なさない。
しかし、重い重いといわれている去人で、ファイルに書き出すのはやりたくない。
では、他に案は?


そこで一つ、ある仮定をしてみた。
画像なり、音なりはSDLライブラリでロードしたあとは、こちらが渡したメモリは使っていないだろう。
画像はサーフェイスのデータとしてナマの状態になっているだろうし、音データも同様ではないか?
そこで、SDLライブラリに渡す目的でロードされるリソースファイルに限り、zipから展開するメモリプールを使用してみることにした。


というD言語から数年。
yanesdk.netではどうだろうか....