1 /*---------------------------------------------------------------------------*
2   Project:  NintendoWare
3   File:     lyt_ResourceAccessor.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: 23662 $
14  *---------------------------------------------------------------------------*/
15 
16 #ifndef NW_LYT_RESOURCEACCESSOR_H_
17 #define NW_LYT_RESOURCEACCESSOR_H_
18 
19 #include <nw/lyt/lyt_Types.h>
20 
21 namespace nw
22 {
23 namespace font
24 {
25 
26 class Font;
27 
28 }
29 
30 namespace lyt
31 {
32 
33 //! @name リソースアクセサ
34 //@{
35 
36 //---------------------------------------------------------------------------
37 //! @brief リソースのタイプを表します。
38 //!
39 //! @sa res::RESOURCETYPE_LAYOUT
40 //! @sa res::RESOURCETYPE_ANIMATION
41 //! @sa res::RESOURCETYPE_TEXTURE
42 //! @sa res::RESOURCETYPE_FONT
43 //! @sa res::RESOURCETYPE_ARCHIVEFONT
44 //!
45 //! @since 2009/09/18 初版。
46 //---------------------------------------------------------------------------
47 typedef u32 ResType;
48 
49 //@}
50 
51 //---------------------------------------------------------------------------
52 //! :category リソースアクセサ
53 //!
54 //! @brief リソースにアクセスするための基底クラスです。
55 //!
56 //! @since 2009/09/18 初版。
57 //---------------------------------------------------------------------------
58 class ResourceAccessor
59 {
60     //----------------------------------------
61     //! @name コンストラクタ/デストラクタ
62     //@{
63 
64 protected:
65     //! @brief コンストラクタです。
66     //!
67     //! @since 2009/09/18 初版。
68     //!
69     ResourceAccessor();
70 
71 public:
72     //! @brief デストラクタです。
73     //!
74     //! @details
75     //! 導出クラスでは管理下のフォントとテクスチャの破棄を
76     //! 行わなければなりません。
77     //!
78     //! @date 2010/01/26 フォントとテクスチャの破棄について加筆しました。
79     //! @since 2009/09/18 初版。
80     //!
81     virtual ~ResourceAccessor();
82 
83     //@}
84 
85     //----------------------------------------
86     //! @name 取得
87     //@{
88 
89     //! @brief リソースを取得します。
90     //!
91     //! @param resType リソースの種類です。
92     //! @param name リソースの名前です。
93     //! @param pSize リソースのサイズを受け取る変数へのポインタです。
94     //!              サイズを受け取る必要がない場合は NULL を渡してください。
95     //!
96     //! @return
97     //! リソースの先頭アドレスへのポインタを返します。
98     //! リソースが見つからなかった場合は NULL を返します。
99     //!
100     //! @since 2009/09/18 初版。
101     //!
102     virtual void* GetResource(
103         ResType resType,
104         const char* name,
105         u32* pSize = 0
106     ) = 0;
107 
108     //! @brief フォントを取得します。
109     //!
110     //! @details
111     //! name で指定したフォントリソース名と関連付けられた
112     //! フォントオブジェクトを取得します。
113     //!
114     //! フォントを所有していない場合にはロードを試みます。
115     //!
116     //! 実装には LoadFont() を利用することができます。
117     //!
118     //! @param name フォントリソースの名前です。
119     //!
120     //! @return フォントへのポインタを返します。
121     //! フォントを取得できなかった場合には NULL を返します。
122     //!
123     //! @sa LoadFont
124     //!
125     //! @since 2010/01/26 初版。
126     //! @date 2010/07/16 純粋仮想関数に変更しました。
127     //!
128     virtual font::Font* GetFont(const char* name) = 0;
129 
130     //! @brief テクスチャ情報を取得します。
131     //!
132     //! @details
133     //! name で指定したテクスチャリソース名と関連付けられた
134     //! テクスチャ情報を取得します。
135     //!
136     //! テクスチャを所有していない場合にはロードを試みます。
137     //!
138     //! 実装には LoadTexture() を利用することができます。
139     //!
140     //! @param name テクスチャリソースの名前です。
141     //!
142     //! @return テクスチャ情報を返します。
143     //! テクスチャを所有していない場合にはロードを試みます。
144     //! ロードできなかった場合にはテクスチャオブジェクトには無効な値
145     //! (TextureInfo::INVALID) が設定されます。
146     //!
147     //! @sa LoadTexture
148     //!
149     //! @since 2009/09/18 初版。
150     //! @date 2010/01/26 非バーチャル関数に変更しました。
151     //! @date 2010/06/18 純粋仮想関数に変更しました。
152     //!
153     virtual const TextureInfo GetTexture(const char* name) = 0;
154 
155     //@}
156 
157 protected:
158     //! @brief テクスチャをロードします。
159     //!
160     //! @details
161     //! テクスチャが初めて参照されたときに GetTexture() から呼び出されます。
162     //!
163     //! GetResource() でテクスチャリソースを取得し、
164     //! lyt::LoadTexture() で GL にロードします。
165     //!
166     //! @param name  テクスチャリソースの名前です。
167     //!
168     //! @return テクスチャの情報を返します。
169     //!
170     //! @sa GetTexture
171     //! @sa lyt::LoadTexture
172     //!
173     //! @since 2010/06/18 初版。
174     //!
175     virtual const TextureInfo LoadTexture(const char* name);
176 
177     //! @brief リソースフォントを生成します。
178     //!
179     //! @details
180     //! フォントが初めて参照されたときに GetFont() から呼び出されます。
181     //!
182     //! font::ResFont を生成し GetResource() で取得した
183     //! フォントリソースを設定します。
184     //!
185     //! @param name  フォントリソースの名前です。
186     //!
187     //! @return font::ResFont へのポインタを返します。
188     //!
189     //! @sa GetFont
190     //!
191     //! @since 2010/07/16 初版。
192     //!
193     virtual font::Font* LoadFont(const char* name);
194 };
195 
196 } // namespace nw::lyt
197 } // namespace nw
198 
199 #endif // NW_LYT_RESOURCEACCESSOR_H_
200