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: 23638 $
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 private:
106     char m_Name[TEXIMAGE_FILENAME_MAX + 1];
107     TextureInfo m_TexInfo;
108 };
109 
110 //---------------------------------------------------------------------------
111 //! :category リソースアクセサ
112 //!
113 //! @brief テクスチャを保持するクラスです。
114 //!
115 //! @details
116 //! ResourceAccessor の実装で OpenGL のテクスチャオブジェクトを保持するのに
117 //! 利用されます。
118 //!
119 //! @sa ResourceAccessor
120 //!
121 //! @since 2010/01/26 初版。
122 //---------------------------------------------------------------------------
123 class TextureContainer : public ut::LinkList<TextureRefLink, offsetof(TextureRefLink, m_Link)>
124 {
125 public:
126     //----------------------------------------
127     //! @name コンストラクタ/デストラクタ
128     //@{
129 
130     //! @brief デストラクタです。
131     //!
132     //! @details
133     //! 登録されているすべてのテクスチャを破棄します。
134     //!
135     //! @since 2010/01/26 初版。
136     //!
137     ~TextureContainer();
138 
139     //@}
140 
141     //----------------------------------------
142     //! @name 登録/破棄
143     //@{
144 
145     //! @brief 登録を抹消します。
146     //!
147     //! @details
148     //! 登録されているすべてのテクスチャを破棄します。
149     //!
150     //! @since 2010/01/26 初版。
151     //!
152     void Finalize();
153 
154     //! @brief テクスチャ情報を登録します。
155     //!
156     //! @param name  テクスチャの名前です。
157     //! @param textureInfo  テクスチャ情報です。
158     //!
159     //! @return 登録キーを返します。キーは登録の抹消に使用します。
160     //!
161     //! @since 2010/01/26 初版。
162     //!
163     TextureKey RegistTexture(const char* name, const TextureInfo& textureInfo);
164 
165     //! @brief テクスチャの登録を抹消します。
166     //!
167     //! @param key  登録時に取得した登録キーを指定します。
168     //!
169     //! @since 2010/01/26 初版。
170     //!
171     void UnregistTexture(TextureKey key);
172 
173     //@}
174 
175     //----------------------------------------
176     //! @name 検索
177     //@{
178 
179     //! @brief テクスチャ情報を検索します。
180     //!
181     //! @param name テクスチャのリソース名です。
182     //!
183     //! @return
184     //! テクスチャ情報を返します。
185     //!
186     //! @since 2010/01/26 初版。
187     //!
188     const TextureInfo FindTextureByName(const char* name);
189 
190     //@}
191 };
192 
193 } // namespace nw::lyt
194 } // namespace nw
195 
196 #endif // NW_LYT_TEXTURECONTAINER_H_
197