1 /*---------------------------------------------------------------------------* 2 Project: Horizon 3 File: demo_Utility.h 4 5 Copyright (C)2009-2012 Nintendo Co., Ltd. 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 $Rev: 46365 $ 14 *---------------------------------------------------------------------------*/ 15 16 #ifndef DEMO_UTILITY_H_ 17 #define DEMO_UTILITY_H_ 18 19 #include <cstdio> 20 #include <cstdlib> 21 22 #include <nn/types.h> 23 #include <nn/assert.h> 24 #include <nn/util/util_NonCopyable.h> 25 26 #include <nn/fnd/fnd_ExpHeap.h> 27 28 #include <nn/os/os_MemoryTypes.h> 29 30 #include <nn/gx.h> 31 #include <GLES2/gl2.h> 32 #include <GLES2/gl2ext.h> 33 34 #include <nn/gx/CTR/gx_CTR.h> 35 #include <nn/gx/CTR/gx_Lcd.h> 36 37 #include <nn/math.h> 38 39 #include <nn/applet.h> 40 41 namespace demo 42 { 43 /* Please see man pages for details 44 45 46 47 */ 48 49 const f32 DISPLAY0_ASPECT = static_cast<f32>(nn::gx::CTR::DISPLAY0_HEIGHT) / static_cast<f32>(nn::gx::CTR::DISPLAY0_WIDTH); 50 const f32 DISPLAY1_ASPECT = static_cast<f32>(nn::gx::CTR::DISPLAY1_HEIGHT) / static_cast<f32>(nn::gx::CTR::DISPLAY1_WIDTH); 51 52 /* Please see man pages for details 53 54 55 56 */ 57 58 void PrintGLError(const GLenum errorCode); 59 60 /* Please see man pages for details 61 62 63 64 */ 65 66 #define DEMO_ASSERT_GL_ERROR() \ 67 { \ 68 GLenum errorCode = glGetError(); \ 69 if ( errorCode != GL_NO_ERROR ) \ 70 { \ 71 demo::PrintGLError(errorCode); \ 72 NN_TPANIC_("\n"); \ 73 } \ 74 } 75 76 #define DEMO_FORCE_LINK_APPLET_LIB() \ 77 { \ 78 volatile bool initialized; \ 79 initialized = nn::applet::IsInitialized(); \ 80 } 81 82 /* Please see man pages for details 83 84 85 86 */ 87 88 enum 89 { 90 // Vertex uniform 91 VERTEX_UNIFORM_PROJECTION = 0, 92 VERTEX_UNIFORM_MODELVIEW, 93 // Fragment uniform 94 FRAGMENT_UNIFORM_ALPHA_TEST, 95 // Fragment uniform : Texture samplerType 96 FRAGMENT_UNIFORM_TEXTURE0_SAMPLER_TYPE, 97 FRAGMENT_UNIFORM_TEXTURE1_SAMPLER_TYPE, 98 FRAGMENT_UNIFORM_TEXTURE2_SAMPLER_TYPE, 99 FRAGMENT_UNIFORM_TEXTURE3_SAMPLER_TYPE, 100 // LightEnv 101 FRAGMENT_UNIFORM_LIGHT_ENV_CONFIG, 102 FRAGMENT_UNIFORM_LIGHT_ENV_CLAMP_HIGHLIGHTS, 103 FRAGMENT_UNIFORM_LIGHT_ENV_LUT_ENABLED_REFL, 104 // D0 105 FRAGMENT_UNIFORM_LIGHT_ENV_LUT_ENABLED_D0, 106 FRAGMENT_UNIFORM_LIGHT_ENV_LUT_INPUT_D0, 107 FRAGMENT_UNIFORM_LIGHT_ENV_ABS_LUT_INPUT_D0, 108 // D1 109 FRAGMENT_UNIFORM_LIGHT_ENV_LUT_ENABLED_D1, 110 FRAGMENT_UNIFORM_LIGHT_ENV_LUT_INPUT_D1, 111 FRAGMENT_UNIFORM_LIGHT_ENV_ABS_LUT_INPUT_D1, 112 // Fragment uniform : Fragment lighting 113 FRAGMENT_UNIFORM_FRAGMENT_LIGHTING_ENABLED, 114 FRAGMENT_UNIFORM_FRAGMENT_LIGHTING_AMBIENT, 115 // Fragment uniform : Fragment light0 116 FRAGMENT_UNIFORM_FRAGMENT_LIGHT_SOURCE0_ENABLED, 117 FRAGMENT_UNIFORM_FRAGMENT_LIGHT_SOURCE0_AMBIENT, 118 FRAGMENT_UNIFORM_FRAGMENT_LIGHT_SOURCE0_DIFFUSE, 119 FRAGMENT_UNIFORM_FRAGMENT_LIGHT_SOURCE0_SPECULAR0, 120 FRAGMENT_UNIFORM_FRAGMENT_LIGHT_SOURCE0_SPECULAR1, 121 FRAGMENT_UNIFORM_FRAGMENT_LIGHT_SOURCE0_POSITION, 122 FRAGMENT_UNIFORM_FRAGMENT_LIGHT_SOURCE0_GEOM_FACTOR0, 123 FRAGMENT_UNIFORM_FRAGMENT_LIGHT_SOURCE0_GEOM_FACTOR1, 124 FRAGMENT_UNIFORM_FRAGMENT_LIGHT_SOURCE0_TWO_SIDE_DIFFUSE, 125 // Fragment uniform : Fragment light1 126 FRAGMENT_UNIFORM_FRAGMENT_LIGHT_SOURCE1_ENABLED, 127 FRAGMENT_UNIFORM_FRAGMENT_LIGHT_SOURCE1_AMBIENT, 128 FRAGMENT_UNIFORM_FRAGMENT_LIGHT_SOURCE1_DIFFUSE, 129 FRAGMENT_UNIFORM_FRAGMENT_LIGHT_SOURCE1_SPECULAR0, 130 FRAGMENT_UNIFORM_FRAGMENT_LIGHT_SOURCE1_SPECULAR1, 131 FRAGMENT_UNIFORM_FRAGMENT_LIGHT_SOURCE1_POSITION, 132 FRAGMENT_UNIFORM_FRAGMENT_LIGHT_SOURCE1_GEOM_FACTOR0, 133 FRAGMENT_UNIFORM_FRAGMENT_LIGHT_SOURCE1_GEOM_FACTOR1, 134 FRAGMENT_UNIFORM_FRAGMENT_LIGHT_SOURCE1_TWO_SIDE_DIFFUSE, 135 // Fragment uniform : Fragment light2 136 FRAGMENT_UNIFORM_FRAGMENT_LIGHT_SOURCE2_ENABLED, 137 FRAGMENT_UNIFORM_FRAGMENT_LIGHT_SOURCE2_AMBIENT, 138 FRAGMENT_UNIFORM_FRAGMENT_LIGHT_SOURCE2_DIFFUSE, 139 FRAGMENT_UNIFORM_FRAGMENT_LIGHT_SOURCE2_SPECULAR0, 140 FRAGMENT_UNIFORM_FRAGMENT_LIGHT_SOURCE2_SPECULAR1, 141 FRAGMENT_UNIFORM_FRAGMENT_LIGHT_SOURCE2_POSITION, 142 FRAGMENT_UNIFORM_FRAGMENT_LIGHT_SOURCE2_GEOM_FACTOR0, 143 FRAGMENT_UNIFORM_FRAGMENT_LIGHT_SOURCE2_GEOM_FACTOR1, 144 FRAGMENT_UNIFORM_FRAGMENT_LIGHT_SOURCE2_TWO_SIDE_DIFFUSE, 145 // Fragment uniform : Fragment light3 146 FRAGMENT_UNIFORM_FRAGMENT_LIGHT_SOURCE3_ENABLED, 147 FRAGMENT_UNIFORM_FRAGMENT_LIGHT_SOURCE3_AMBIENT, 148 FRAGMENT_UNIFORM_FRAGMENT_LIGHT_SOURCE3_DIFFUSE, 149 FRAGMENT_UNIFORM_FRAGMENT_LIGHT_SOURCE3_SPECULAR0, 150 FRAGMENT_UNIFORM_FRAGMENT_LIGHT_SOURCE3_SPECULAR1, 151 FRAGMENT_UNIFORM_FRAGMENT_LIGHT_SOURCE3_POSITION, 152 FRAGMENT_UNIFORM_FRAGMENT_LIGHT_SOURCE3_GEOM_FACTOR0, 153 FRAGMENT_UNIFORM_FRAGMENT_LIGHT_SOURCE3_GEOM_FACTOR1, 154 FRAGMENT_UNIFORM_FRAGMENT_LIGHT_SOURCE3_TWO_SIDE_DIFFUSE, 155 // Fragment uniform : Material 156 FRAGMENT_UNIFORM_FRAGMENT_MATERIAL_AMBIENT, 157 FRAGMENT_UNIFORM_FRAGMENT_MATERIAL_DIFFUSE, 158 FRAGMENT_UNIFORM_FRAGMENT_MATERIAL_SPECULAR0, 159 FRAGMENT_UNIFORM_FRAGMENT_MATERIAL_SPECULAR1, 160 FRAGMENT_UNIFORM_FRAGMENT_MATERIAL_SAMPLER_D0, 161 FRAGMENT_UNIFORM_FRAGMENT_MATERIAL_SAMPLER_D1, 162 // Fragment uniform : Texture combiner0 163 FRAGMENT_UNIFORM_TEXENV0_SRC_RGB, 164 FRAGMENT_UNIFORM_TEXENV0_SRC_ALPHA, 165 FRAGMENT_UNIFORM_TEXENV0_OPERAND_RGB, 166 FRAGMENT_UNIFORM_TEXENV0_OPERAND_ALPHA, 167 FRAGMENT_UNIFORM_TEXENV0_COMBINE_RGB, 168 FRAGMENT_UNIFORM_TEXENV0_COMBINE_ALPHA, 169 FRAGMENT_UNIFORM_TEXENV0_CONST_RGBA, 170 // Fragment uniform : Texture combiner1 171 FRAGMENT_UNIFORM_TEXENV1_SRC_RGB, 172 FRAGMENT_UNIFORM_TEXENV1_SRC_ALPHA, 173 FRAGMENT_UNIFORM_TEXENV1_OPERAND_RGB, 174 FRAGMENT_UNIFORM_TEXENV1_OPERAND_ALPHA, 175 FRAGMENT_UNIFORM_TEXENV1_COMBINE_RGB, 176 FRAGMENT_UNIFORM_TEXENV1_COMBINE_ALPHA, 177 FRAGMENT_UNIFORM_TEXENV1_CONST_RGBA, 178 // Fragment uniform : Texture combiner2 179 FRAGMENT_UNIFORM_TEXENV2_SRC_RGB, 180 FRAGMENT_UNIFORM_TEXENV2_SRC_ALPHA, 181 FRAGMENT_UNIFORM_TEXENV2_OPERAND_RGB, 182 FRAGMENT_UNIFORM_TEXENV2_OPERAND_ALPHA, 183 FRAGMENT_UNIFORM_TEXENV2_COMBINE_RGB, 184 FRAGMENT_UNIFORM_TEXENV2_COMBINE_ALPHA, 185 FRAGMENT_UNIFORM_TEXENV2_CONST_RGBA, 186 // Max uniform locations num 187 MAX_UNIFORM_LOCATIONS_NUM 188 }; 189 190 /* Please see man pages for details 191 192 193 194 */ 195 extern s32 s_UniformLocations[MAX_UNIFORM_LOCATIONS_NUM]; 196 197 /* Please see man pages for details 198 199 200 201 */ 202 void InitializeUniforms(const GLuint programId); 203 204 /* Please see man pages for details 205 206 207 208 */ 209 void GetRandomColor(f32& red, f32& green, f32& blue); 210 } 211 212 #endif 213