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