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