TextureResourceクラスの全ソースコードです。
package <パッケージ名>; import java.util.Iterator; import java.util.Vector; import java.io.IOException; import java.io.InputStream; import <パッケージ名>.DrawDevice; import <パッケージ名>.Texture; import <パッケージ名>.Picture; // テクスチャリソース public class TextureResource { // テクスチャタイプ public enum TEXTURE_TYPE { CHARA, MENU, } // コンストラクタ public TextureResource( AppResource appRes, DrawDevice drawDevice ) { m_AppRes = appRes; m_DrawDevice = drawDevice; m_LoadTexInfoVec = new Vector< TextureInfo >(); } // ロード public Texture Load( String fileName, TEXTURE_TYPE type ) { TextureInfo info = new TextureInfo( fileName, type ); Texture tex = _GetTexture( info ); // すでに読み込まれていたらそれを返す if( tex == null ) { // 新しく作ってそれを返す // ファイルパス作成 String filePath = String.format( "%s/%s.png", _GetDirectory( type ), fileName ); InputStream inputStream = m_AppRes.Load( filePath ); if( inputStream == null ) return null; Picture picture = new Picture(); { if( picture.Load( m_DrawDevice, inputStream )) { // ロードに成功! tex = picture; info.SetTexture( tex ); m_LoadTexInfoVec.add( info ); } else { // ロードに失敗... } // ストリームを閉じる try { inputStream.close(); } catch( IOException e ) { e.printStackTrace(); } } } return tex; } // 削除 public void Delete( TEXTURE_TYPE type ) { for( Iterator< TextureInfo > it = m_LoadTexInfoVec.iterator(); it.hasNext(); ) { TextureInfo info = it.next(); if( info.TypeEqual( type )) { info.GetTexture().Release(); it.remove(); } } } // ロード済みテクスチャ情報 private class TextureInfo { // コンストラクタ public TextureInfo( String fileName, TEXTURE_TYPE type ) { m_FileName = fileName; m_Type = type; m_Tex = null; } // テクスチャ設定 public void SetTexture( Texture tex ) { m_Tex = tex; } public Texture GetTexture() { return m_Tex; } // 比較 public boolean TypeEqual( TEXTURE_TYPE type ) { return m_Type.equals( type ); } public boolean Equal( TextureInfo rhs ) { return ( m_FileName.equals( rhs.m_FileName )) && ( m_Type.equals( rhs.m_Type )); } private String m_FileName; private TEXTURE_TYPE m_Type; private Texture m_Tex; } // 読み込み済みテクスチャ取得 private Texture _GetTexture( TextureInfo texInfo ) { for( Iterator< TextureInfo > it = m_LoadTexInfoVec.iterator(); it.hasNext(); ) { TextureInfo info = it.next(); if( texInfo.Equal( info )) return info.GetTexture(); } return null; } // タイプに応じたディレクトリ取得 private String _GetDirectory( TEXTURE_TYPE type ) { switch( type ) { case CHARA: return "model/chara"; case MENU: return "model/menu"; default: return ""; } } private AppResource m_AppRes; private DrawDevice m_DrawDevice; private Vector< TextureInfo > m_LoadTexInfoVec; }