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