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

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



◆◇ ◆◇ ◆◇   MagicalCastβ(ベータ版)  ◆◇ ◆◇ ◆◇
   ┌──┐                                 ┌──┐
   │\/│ DNSの新MLシステム誕生です!│\/│
   └──┘                                 └──┘
     ● 2年以上のサービス実績を活かして自社開発 ●
     ● 本当に必要な機能だけをご用意していきます ●

◆◇ ◆◇ ◆◇   http://mx7.dns-ml.co.jp/  ◆◇ ◆◇ ◆◇

こんにちは,藤原と申します.

サブジェクトにあるとおり,テクスチャーの張り替えを行ってみて非常に気にな
ることがあります.(というか,致命的(`x´))

ライブになっている Sphere のテクスチャーを張り替えると,張り替えるたびに
メモリーの消費量が増加します.最終的には OutOfMemoryError が出て,テクス
チャーの張り替えが行えなくなります.


いろいろ調べてみた所,,,
テクスチャーを張り替えるために TextureLoader に BufferedImage を指定し
て,TextureLoader#getTexture() でテクスチャーを取得しているのですが,こ
こでメモリーの増加が起こっているようです.
TexutureLoader のソースを見てみた所,TextureLoader#getTexture() を呼ぶた
びに内部で ImageComponent2D と,Texuture2D のオブジェクトが生成されてい
ます.


張り替えは,
	Sphere#getAppearance()
	Appearance#setTexture(Texture2D) 
で行っています.


Appearance#setTexture()した後,古いテクスチャー(あるいは ImageComponent
)は自動的に開放されないのでしょうか?

一応の対策として,張り替えのたびに System.gc() を行ってみましたが効果な
しでした.



エラー内容は以下のとおりです.
(申し訳ないのですが,業務上差し支えのある部分のエラーについては削除させ
ていただきました.m(__)m)
======================================================================
java.lang.OutOfMemoryError
	at
javax.media.j3d.ImageComponent2DRetained.set(ImageComponent2DRetained.java,
Compiled Code)
	at javax.media.j3d.ImageComponent2D.<init>(ImageComponent2D.java,
Compiled Code)
	at com.sun.j3d.utils.image.TextureLoader.getTexture(TextureLoader.java,
Compiled Code)
	at TTextureImage.GetTexture(TTextureImage.java, Compiled Code)
	at TSceneGraph.UpdateTexture(TSceneGraph.java, Compiled Code)
======================================================================


解決法をご存知の方,あるいは症状が再現できた方,
よろしくお願いします.





環境
----------------
WindowsNT 4.0 SP5
JDK 1.2.2
Java3D 1.1.2
cygwin20b + bash

-- 
----------------
Fujiwara Isao (藤原 功)