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