2010年9月6日月曜日

PV3D : QuadrantRenderEngineのメモリリーク

FLARToolKitでは、Papervision3Dに入っているレンダリングエンジンのうち、LazyRenderEngineを使っているのですが、とある理由から、QuadrantRenderEngineを使ってやりたいという話になり、組み込んでみたわけですが……何気にメモリリークしている事が判明orz

使っていると、延々とメモリを食い続けるというね……
正直PV3Dから原因を突き止めるには時間が無く、別の手段も検討しつつウェブを巡っていたのですが、公式フォーラムに原因が載っていた……ついでに解決策も……誰か反映しておいてくれよ……マジで。

ということで、直し方を説明。
おかしいのは、org.papervision3d.materialsパッケージ内の BitmapMaterial.as です。

修正箇所は下記。

まずは、59行目。

-- 編集前 --
59 : public var uvMatrices:Dictionary = new Dictionary();
-- 編集後 --
59 : public var uvMatrices:Dictionary = new Dictionary(true);

続いて 97行目付近。

-- 編集前 --
97 : public function resetMapping():void
98 : {
99 :     uvMatrices = new Dictionary();
100: }
-- 編集後 --
97 : public function resetMapping():void
98 : {
99 :     for ( var obj:* in uvMatrices ) {
100:         uvMatrices[obj] = null;
101:     }
102: }

最後が 733行目付近。

-- 編集前 --
733: public function resetUVS():void
734: {
735:     uvMatrices = new Dictionary();
736: }
-- 編集後 --
735: public function resetUVS():void
736: {
737:     for ( var obj:* in uvMatrices ) {
738:         uvMatrices[obj] = null;
739:     }
740: }

このあたりを直せばいいらしい。

FLARToolKit内に含まれるPV3Dにはこの修正を入れておいたけれど……本家で直してパッケージ出して欲しいわ……

0 件のコメント: