[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Java3Djp:01211] Re: テクスチャーの張り替え時に関する問題
◆◇ ◆◇ ◆◇ MagicalCastβ(ベータ版) ◆◇ ◆◇ ◆◇
┌──┐ ┌──┐
│\/│ DNSの新MLシステム誕生です!│\/│
└──┘ └──┘
これまでの簡単・快適そのままで高機能に
いえいえもっと高速に。βテストにご協力下さい
※ fmlでもmajordomoでもありません
◆◇ ◆◇ ◆◇ http://mx7.dns-ml.co.jp/ ◆◇ ◆◇ ◆◇
こんにちは.藤原です.
問題に対する対処法がわかりましたので報告します.
# 詳しい経緯は,以前の投稿を参照してください.m(__)m
はじめに以下のように *1枚の* テクスチャーを複数のプリミティブに指定し,
これを繰り返し実行していましたが,この方法だとメモリー消費が増加しつづけ,
最終的に OutOfMemoryError となります.
Texture2D tex1 = TextureLoader#getTexture();
Sphere#getAppearance()#setTexture(tex1); // 1つめの球
Sphere#getAppearance()#setTexture(tex1); // 2つめの球
これを防ぐためには,以下のようにします.
Texture2D tex1 = TextureLoader#getTexture();
Texture2D tex2 = (Texture2D)tex1.cloneNodeComponent();
Sphere#getAppearance()#setTexture(tex1); // 1つめの球
Sphere#getAppearance()#setTexture(tex2); // 2つめの球
わかってしまえば,どうということはないのですが・・(泣)
# 対処法はわかったのですが,はじめの方法だと
何故消費メモリーが増加しつづけるのでしょう?
(補)
メモリー増加を防ぐという点だけに着目すれば
Texture2D tex1 = TextureLoader#getTexture();
Texture2D tex2 = TextureLoader#getTexture();
Sphere#getAppearance()#setTexture(tex1); // 1つめの球
Sphere#getAppearance()#setTexture(tex2); // 2つめの球
という方法も考えられますが,
TextureLoader#getTexture()
に高いコストがかかるため,実行速度の面で問題があります.
--
----------------
Fujiwara Isao (藤原 功)