1 /*---------------------------------------------------------------------------*
2   Project:  NintendoWare
3   File:     lyt_TextureContainer.h
4 
5   Copyright (C)2009-2010 Nintendo Co., Ltd./HAL Laboratory, Inc.  All rights reserved.
6 
7   These coded instructions, statements, and computer programs contain
8   proprietary information of Nintendo of America Inc. and/or Nintendo
9   Company Ltd., and are protected by Federal copyright law.  They may
10   not be disclosed to third parties or copied or duplicated in any form,
11   in whole or in part, without the prior written consent of Nintendo.
12 
13   $Revision: 27716 $
14  *---------------------------------------------------------------------------*/
15 
16 #ifndef NW_LYT_TEXTURECONTAINER_H_
17 #define NW_LYT_TEXTURECONTAINER_H_
18 
19 #include <nw/ut/ut_LinkList.h>
20 
21 #include <nw/lyt/lyt_Types.h>
22 
23 namespace nw
24 {
25 namespace lyt
26 {
27 
28 //---------------------------------------------------------------------------
29 //! :private
30 //!
31 //! @brief テクスチャを保持するクラスです。
32 //!
33 //! @sa TextureContainer
34 //!
35 //! @since 2009/09/18 初版。
36 //---------------------------------------------------------------------------
37 class TextureRefLink
38 {
39 public:
40     //! テクスチャリソース名の最大です。
41     static const int TEXIMAGE_FILENAME_MAX = 127;
42 
43     //----------------------------------------
44     //! @name コンストラクタ/デストラクタ
45     //@{
46 
47     //! @brief コンストラクタです。
48     TextureRefLink();
49 
50 
51     //! @brief デストラクタです。
52     //!
53     //! @details
54     //! OpenGL のテクスチャオブジェクトを破棄します。
55     //!
56     //! @since 2009/09/18 初版。
57     //!
58     ~TextureRefLink();
59 
60     // @}
61 
62     //----------------------------------------
63     //! @name 設定/取得
64     //@{
65 
66     //! @brief テクスチャ情報を設定します。
67     //!
68     //! @param resourceName  テクスチャを特定する名前です。
69     //! @param texInfo  テクスチャ情報です。
70     //!
71     //! @since 2009/09/18 初版。
72     //!
73     void Set(
74         const char* resourceName,
75         const TextureInfo& texInfo);
76 
77     //! @brief テクスチャのリソース名を取得します。
78     //!
79     //! @return テクスチャのリソース名を返します。
80     //!
81     //! @since 2009/09/18 初版。
82     //!
GetResourceName()83     const char* GetResourceName() const
84     {
85         return m_Name;
86     }
87 
88     //! @brief テクスチャ情報を取得します。
89     //!
90     //! @return テクスチャ情報を返します。
91     //!
92     //! @since 2009/09/18 初版。
93     //!
GetTextureInfo()94     const TextureInfo GetTextureInfo()
95     {
96         return m_TexInfo;
97     }
98 
99     // @}
100 
101     //! :private
102     //! @brief リンク情報です。
103     ut::LinkListNode m_Link;
104 
105 protected:
106     //! @details :private
107     char m_Name[TEXIMAGE_FILENAME_MAX + 1];
108 
109     //! @details :private
110     TextureInfo m_TexInfo;
111 };
112 
113 //---------------------------------------------------------------------------
114 //! :category リソースアクセサ
115 //!
116 //! @brief テクスチャを保持するクラスです。
117 //!
118 //! @details
119 //! ResourceAccessor の実装で OpenGL のテクスチャオブジェクトを保持するのに
120 //! 利用されます。
121 //!
122 //! @sa ResourceAccessor
123 //!
124 //! @since 2010/01/26 初版。
125 //---------------------------------------------------------------------------
126 class TextureContainer : public ut::LinkList<TextureRefLink, offsetof(TextureRefLink, m_Link)>
127 {
128 public:
129     //----------------------------------------
130     //! @name コンストラクタ/デストラクタ
131     //@{
132 
133     //! @brief デストラクタです。
134     //!
135     //! @details
136     //! 登録されているすべてのテクスチャを破棄します。
137     //!
138     //! @since 2010/01/26 初版。
139     //!
140     ~TextureContainer();
141 
142     //@}
143 
144     //----------------------------------------
145     //! @name 登録/破棄
146     //@{
147 
148     //! @brief 登録を抹消します。
149     //!
150     //! @details
151     //! 登録されているすべてのテクスチャを破棄します。
152     //!
153     //! @since 2010/01/26 初版。
154     //!
155     void Finalize();
156 
157     //! @brief テクスチャ情報を登録します。
158     //!
159     //! @param name  テクスチャの名前です。
160     //! @param textureInfo  テクスチャ情報です。
161     //!
162     //! @return 登録キーを返します。キーは登録の抹消に使用します。
163     //!
164     //! @since 2010/01/26 初版。
165     //!
166     TextureKey RegistTexture(const char* name, const TextureInfo& textureInfo);
167 
168     //! @brief テクスチャの登録を抹消します。
169     //!
170     //! @param key  登録時に取得した登録キーを指定します。
171     //!
172     //! @since 2010/01/26 初版。
173     //!
174     void UnregistTexture(TextureKey key);
175 
176     //@}
177 
178     //----------------------------------------
179     //! @name 検索
180     //@{
181 
182     //! @brief テクスチャ情報を検索します。
183     //!
184     //! @param name テクスチャのリソース名です。
185     //!
186     //! @return
187     //! テクスチャ情報を返します。
188     //!
189     //! @since 2010/01/26 初版。
190     //!
191     const TextureInfo FindTextureByName(const char* name);
192 
193     //! @brief テクスチャ情報を検索します。
194     //!
195     //! @param key テクスチャの登録キーです。
196     //!
197     //! @return
198     //! テクスチャ情報を返します。
199     //!
200     //! @since 2010/11/30 初版。
201     //!
202     const TextureInfo FindTextureByKey(TextureKey key);
203 
204     //@}
205 };
206 
207 } // namespace nw::lyt
208 } // namespace nw
209 
210 #endif // NW_LYT_TEXTURECONTAINER_H_
211