1 /*---------------------------------------------------------------------------*
2   Project:  NintendoWare
3   File:     demolib.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:$
14  *---------------------------------------------------------------------------*/
15 
16 #ifndef NW_SND_DEMO_DEMOLIB_H_
17 #define NW_SND_DEMO_DEMOLIB_H_
18 
19 #include <GLES2/gl2.h>
20 #include <GLES2/gl2ext.h>
21 #include <nw/font.h>
22 #include <nw/font/font_RectDrawer.h>
23 #include <nw/demo.h>
24 #include <nw/ut.h>
25 
26 #ifdef NW_PLATFORM_CTRWIN
27     #define NW_SND_DEMO_PATH_PREFIX "romfiles/"
28 #else
29     #define NW_SND_DEMO_PATH_PREFIX "rom:/"
30 #endif
31 
32 namespace nw {
33 namespace snd {
34 namespace demolib {
35 
36 class AppBase
37 {
38 public:
39     void Initialize();
40     void Finalize();
41     void Run();
42 
43 protected:
OnInitialize()44     virtual void OnInitialize() {}
OnFinalize()45     virtual void OnFinalize() {}
OnDrawUpLCD(nw::font::TextWriter &)46     virtual void OnDrawUpLCD( nw::font::TextWriter& ) {}
OnDrawDownLCD(nw::font::TextWriter &)47     virtual void OnDrawDownLCD( nw::font::TextWriter& ) {}
OnUpdatePad(nw::demo::Pad &)48     virtual void OnUpdatePad( nw::demo::Pad& ) {}
OnUpdate()49     virtual void OnUpdate() {}
50 
51     virtual void LoadDspComponent();
52 
53 protected:
54     AppBase();
55     void* MemAlloc( size_t size, u8 alignment = 4 );
56     void MemFree( void* memory );
SetDraw(bool enable)57     void SetDraw( bool enable ) { m_IsDraw = enable; }
IsDraw()58     bool IsDraw() const { return m_IsDraw; }
59 
60 private:
61     void InitializeSDK();
62     void FinalizeSDK();
63 
64     bool InitializeFont();
65     void FinalizeFont();
66 
67     void InitializeShaders();
68     void FinalizeShaders();
69 
70     void InitializeDrawStringBuffer();
71     void FinalizeDrawStringBuffer();
72 
73     void InitializeGX();
74     void InitializeDraw( int width, int height );
75     void SetupTextCamera( nw::font::RectDrawer* pDrawer, int width, int height );
76 
77     void DrawStringPreProcess(
78             nw::font::TextWriter& writer,
79             const nw::gfx::FrameBufferObject& frameBufferObject,
80             int width,
81             int height );
82     void DrawStringPostProcess(
83             nw::font::TextWriter& writer,
84             int width,
85             int height );
86 
87     void Draw();
88     void Update();
89     void UpdatePad();
90 
91     nw::font::DispStringBuffer* AllocDispStringBuffer( int charMax );
92 
93     nw::font::ResFont m_Font;
94     nw::font::RectDrawer m_Drawer;
95 
96     void* m_pMemoryForRomFileSystem;
97     void* m_pMemoryForDrawBuffer;
98     nw::font::DispStringBuffer* m_pDrawStringBufferUpperLcd;
99     nw::font::DispStringBuffer* m_pDrawStringBufferLowerLcd;
100 
101     bool m_IsDraw;
102 };
103 
104 class Param
105 {
106 public:
Param(const char * name)107     Param( const char* name ) : m_pName( name ) {}
~Param()108     virtual ~Param() {}
109 
GetName()110     const char* GetName() const { return m_pName; }
111 
112     virtual const char* GetValueString() = 0;
113 
114     virtual f32 GetF32Value() const = 0;
115     virtual int GetIntValue() const = 0;
116     virtual bool GetBoolValue() const = 0;
117 
118     virtual void Incr( int ratio ) = 0;
119     virtual void Decr( int ratio ) = 0;
120     virtual void Reset() = 0;
121 
122 protected:
123     char m_ValueStringBuffer[16];
124 
125 private:
126     const char* m_pName;
127 };
128 
129 class ParamInt : public Param
130 {
131 public:
ParamInt(const char * name,int init,int step,int min,int max)132     ParamInt( const char* name, int init, int step, int min, int max )
133     : Param( name ),
134       m_Init( init ),
135       m_Step( step ),
136       m_Min( min ),
137       m_Max( max ),
138       m_Value( init )
139     {}
140 
GetValueString()141     virtual const char* GetValueString()
142     {
143         std::snprintf( m_ValueStringBuffer, 16, "%7d", m_Value );
144         return m_ValueStringBuffer;
145     }
146 
GetF32Value()147     virtual f32 GetF32Value() const { return (f32)( m_Value ); }
GetIntValue()148     virtual int GetIntValue() const { return m_Value; }
GetBoolValue()149     virtual bool GetBoolValue() const { return ( m_Value != 0 ); }
150 
Incr(int ratio)151     virtual void Incr( int ratio ) { m_Value = nw::ut::Min( m_Value + m_Step * ratio, m_Max); }
Decr(int ratio)152     virtual void Decr( int ratio ) { m_Value = nw::ut::Max( m_Value - m_Step * ratio, m_Min); }
Reset()153     virtual void Reset() { m_Value = m_Init; }
154 
155 private:
156     int m_Init, m_Step, m_Min, m_Max, m_Value;
157 };
158 
159 class ParamF32 : public Param
160 {
161 public:
ParamF32(const char * name,f32 init,f32 step,f32 min,f32 max)162     ParamF32( const char* name, f32 init, f32 step, f32 min, f32 max )
163     : Param( name ),
164       m_Init( init ),
165       m_Step( step ),
166       m_Min( min ),
167       m_Max( max ),
168       m_Value( init )
169     {}
170 
GetValueString()171     virtual const char* GetValueString()
172     {
173         std::snprintf( m_ValueStringBuffer, 16, "% 7.2f", m_Value );
174         return m_ValueStringBuffer;
175     }
176 
GetF32Value()177     virtual f32 GetF32Value() const { return m_Value; }
GetIntValue()178     virtual int GetIntValue() const { return (int)(m_Value); }
GetBoolValue()179     virtual bool GetBoolValue() const { return ( m_Value != 0.0f ); }
180 
Incr(int ratio)181     virtual void Incr( int ratio ) { m_Value = nw::ut::Min( m_Value + m_Step * ratio, m_Max ); }
Decr(int ratio)182     virtual void Decr( int ratio ) { m_Value = nw::ut::Max( m_Value - m_Step * ratio, m_Min ); }
Reset()183     virtual void Reset() { m_Value = m_Init; }
184 
185 private:
186     f32 m_Init, m_Step, m_Min, m_Max, m_Value;
187 };
188 
189 class ParamBool : public Param
190 {
191 public:
ParamBool(const char * name,int init)192     ParamBool( const char* name, int init )
193     : Param( name ),
194       m_Init( init ),
195       m_Value( init )
196     {}
197 
GetValueString()198     virtual const char* GetValueString()
199     {
200         return m_Value ? "     on": "    off";
201     }
202 
GetF32Value()203     virtual f32 GetF32Value() const { return m_Value != 0.0f; }
GetIntValue()204     virtual int GetIntValue() const { return m_Value != 0; }
GetBoolValue()205     virtual bool GetBoolValue() const { return m_Value; }
206 
Incr(int)207     virtual void Incr( int /*ratio*/ ) { m_Value = ! m_Value; }
Decr(int)208     virtual void Decr( int /*ratio*/ ) { m_Value = ! m_Value; }
Reset()209     virtual void Reset() { m_Value = m_Init; }
210 
211 private:
212     bool m_Init, m_Value;
213 };
214 
215 
216 
217 
218 } // namespace nw::snd::demolib
219 } // namespace nw::snd
220 } // namespace nw
221 
222 #endif /* NW_SND_DEMO_DEMOLIB_H_ */
223 
224