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