[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 (藤原 功)