[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Java3Djp:01213] Re: テクスチャーの張り替え時に関する問題



◆◇ ◆◇ ◆◇   MagicalCastβ(ベータ版)  ◆◇ ◆◇ ◆◇
    ┌──┐                                 ┌──┐
    │\/│ DNSの新MLシステム誕生です!│\/│
    └──┘                                 └──┘
        これまでの簡単・快適そのままで高機能に
      いえいえもっと高速に。βテストにご協力下さい
            ※ fmlでもmajordomoでもありません
◆◇ ◆◇ ◆◇   http://mx7.dns-ml.co.jp/  ◆◇ ◆◇ ◆◇


こんにちは、沼倉@xxxxxxxxxxです。
現在、3Dから遠いところにいますが...

> こんにちは.藤原です.
>
> 問題に対する対処法がわかりましたので報告します.
> # 詳しい経緯は,以前の投稿を参照してください.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つめの球
>
> わかってしまえば,どうということはないのですが・・(泣)
> # 対処法はわかったのですが,はじめの方法だと
>   何故消費メモリーが増加しつづけるのでしょう?

どうみても、最初の方法が自然なように思います。cloneNodeComponent()
の説明には”Creates a new Texture2D object”と書いてあるので、
こっちの方法のほうがメモリを食いそうな気がします。
対処法がわかったとはいえ、原因がわからないのは気持ち悪いなあ。

_/_/_/  E-mail : numakura@xxxxxxxxxx  _/_/_/