1 /*---------------------------------------------------------------------------*
2 Project: Dolphin
3 File: gd-indtex-gc.c
4
5 Copyright 2003 Nintendo. 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 $Log: gd-indtex-gc.c,v $
14 Revision 1.4.44.1 2009/12/08 02:44:59 abe_takehiro
15 Erased warning message
16
17 Revision 1.4 2007/05/24 05:23:30 yasuh-to
18 Fixed description.
19
20 Revision 1.3 2006/02/20 04:13:09 mitu
21 changed include path from dolphin/ to revolution/.
22
23 Revision 1.2 2006/02/13 02:49:31 hirose
24 A fix for TLUT data allocation problem.
25
26 Revision 1.1 2006/02/08 11:19:43 mitu
27 1st version.
28
29
30 3 03/03/05 14:29 Hirose
31 More updates.
32
33 2 03/02/28 17:42 Hirose
34 Updates.
35
36 1 03/02/21 12:12 Hirose
37 Initial ver.
38
39 $NoKeywords: $
40 *---------------------------------------------------------------------------*/
41 /*---------------------------------------------------------------------------*
42 gd-indtex
43 Displaylist demo with indirect texture commands
44 [Main source code for GAMECUBE exectable]
45 *---------------------------------------------------------------------------*/
46
47
48 /*---------------------------------------------------------------------------*
49 Header files
50 *---------------------------------------------------------------------------*/
51 #include <demo.h>
52 #include <math.h>
53 #include <revolution/gd.h>
54
55 #include "gd-indtex.h"
56
57 /*---------------------------------------------------------------------------*
58 Macro definitions
59 *---------------------------------------------------------------------------*/
60 #define PI 3.14159265F
61 #define MAX_Z 0x00ffffff // max value of Z buffer
62
63 #define NUM_CUBES 4
64 #define NUM_TORI 3
65 #define NUM_SPHERES 1
66 #define NUM_GOBJS (NUM_CUBES+NUM_TORI+NUM_SPHERES)
67 #define BOUNDARY 400
68
69 #define Clamp(val,min,max) \
70 ((val) = (((val) < (min)) ? (min) : ((val) > (max)) ? (max) : (val)))
71
72 /*---------------------------------------------------------------------------*
73 Structure definitions
74 *---------------------------------------------------------------------------*/
75 // for Effect/Display List Manager
76 typedef struct
77 {
78 u16 baseViewWd;
79 u16 baseViewHt;
80 u16 copyTexWd;
81 u16 copyTexHt;
82 void* dlPtr;
83 u32 dlSize;
84 } EffectManager;
85
86 // for camera
87 typedef struct
88 {
89 Vec location;
90 Vec up;
91 Vec target;
92 f32 left;
93 f32 top;
94 f32 znear;
95 f32 zfar;
96 } CameraConfig;
97
98 typedef struct
99 {
100 CameraConfig cfg;
101 Mtx view;
102 Mtx44 proj;
103 } MyCameraObj;
104
105 // for cube objects
106 typedef struct
107 {
108 Vec pos;
109 Vec vel;
110 Vec axis;
111 f32 deg;
112 } MyCubeObj;
113
114 // for entire scene control
115 typedef struct
116 {
117 MyCameraObj cam;
118 MyCubeObj cube[NUM_CUBES];
119 s32 torusAngle[3];
120 u32 effectNo;
121 } MySceneCtrlObj;
122
123 /*---------------------------------------------------------------------------*
124 Forward references
125 *---------------------------------------------------------------------------*/
126 void main ( void );
127 static void DrawInit ( MySceneCtrlObj* sc );
128 static void DrawTick ( MySceneCtrlObj* sc );
129 static void AnimTick ( MySceneCtrlObj* sc );
130 static void DrawModels ( MySceneCtrlObj* sc );
131 static void DrawFullScrQuad ( void );
132 static void CopyTextureFromFB ( EffectManager* em );
133 static void SetTextures ( EffectManager* em );
134 static void SetCamera ( MyCameraObj* cam );
135 static void SetScreenSpaceMode ( void );
136 static void SetLight ( void );
137 static void PrepareDL ( void );
138 static void PrintIntro ( void );
139
140 /*---------------------------------------------------------------------------*
141 Model and texture data
142 *---------------------------------------------------------------------------*/
143 // Texture Data
144 u16 EffectTex0TLUT[];
145 u32 EffectTexture0[];
146 u8 EffectTexture1[];
147 u32 EffectTexture2A[];
148 u32 EffectTexture2B[];
149 u32 EffectTexture3[];
150
151
152 // for cube models
153 #define REG_AMBIENT ColorArray[NUM_GOBJS]
154 #define LIGHT_COLOR ColorArray[NUM_GOBJS+1]
155 #define BG_COLOR ColorArray[NUM_GOBJS+2]
156
157 static GXColor ColorArray[NUM_GOBJS+3] ATTRIBUTE_ALIGN(32) =
158 {
159 { 0x60, 0x60, 0xFF, 0xFF }, // CUBES
160 { 0x40, 0xC0, 0x80, 0xE0 },
161 { 0xE0, 0xA0, 0x80, 0xC0 },
162 { 0xFF, 0x60, 0xC0, 0xA0 },
163 { 0xFF, 0xA0, 0xFF, 0x80 }, // TORUS
164 { 0xA0, 0xFF, 0xFF, 0x60 },
165 { 0xFF, 0xFF, 0xA0, 0x40 },
166 { 0xE0, 0xE0, 0xE0, 0x20 }, // SPHERE
167 { 0x40, 0x40, 0x40, 0xFF }, // AMBIENT
168 { 0xFF, 0xFF, 0xFF, 0x00 }, // LIGHT
169 { 0x00, 0x00, 0x00, 0x00 } // BACKGROUND
170 };
171
172 static Vec CubeIniData[NUM_CUBES*3] =
173 {
174 // Position Velocity Rotation axis
175 { -300, -150, 30 }, { 5.0F, 2.5F, 5.0F }, { 0.0F, 1.0F, 1.0F },
176 { 300, -150, 30 }, { 5.0F, -7.5F, -2.5F }, { 0.5F, 0.0F, -1.0F },
177 { -200, 250, 0 }, { 2.5F, -2.5F, -7.5F }, { -0.5F, -1.0F, 0.0F },
178 { 200, 250, 0 }, { -5.0F, -5.0F, -5.0F }, { 1.0F, 1.0F, 1.0F },
179 };
180
181 // Effect Informations
182 static EffectManager Effects[NUM_EFFECTS] =
183 {
184 { BASEVIEW0_WD, BASEVIEW0_HT, COPYTEX0_WD, COPYTEX0_HT, 0, 0 },
185 { BASEVIEW1_WD, BASEVIEW1_HT, COPYTEX1_WD, COPYTEX1_HT, 0, 0 },
186 { BASEVIEW2_WD, BASEVIEW2_HT, COPYTEX2_WD, COPYTEX2_HT, 0, 0 },
187 { BASEVIEW3_WD, BASEVIEW3_HT, COPYTEX3_WD, COPYTEX3_HT, 0, 0 },
188 };
189
190 /*---------------------------------------------------------------------------*
191 Camera configuration
192 *---------------------------------------------------------------------------*/
193 static CameraConfig DefaultCamera =
194 {
195 { 0.0F, 0.0F, 800.0F }, // location
196 { 0.0F, 1.0F, 0.0F }, // up
197 { 0.0F, 0.0F, 0.0F }, // target
198 -160.0F, // left
199 120.0F, // top
200 200.0F, // near
201 2000.0F // far
202 };
203
204 /*---------------------------------------------------------------------------*
205 Global variables
206 *---------------------------------------------------------------------------*/
207 static MySceneCtrlObj SceneCtrl; // scene control parameters
208 static u8* TexBuffer;
209
210 /*---------------------------------------------------------------------------*
211 Application main loop
212 *---------------------------------------------------------------------------*/
main(void)213 void main ( void )
214 {
215 DEMOInit(&GXNtsc480IntDf); // Init the OS, game pad, graphics and video.
216
217 DrawInit(&SceneCtrl); // Initialize vertex formats, array pointers
218 // and default scene settings.
219
220 PrintIntro(); // Print demo directions
221
222 while(!(DEMOPadGetButton(0) & PAD_BUTTON_MENU))
223 {
224 DEMOBeforeRender();
225 DrawTick(&SceneCtrl); // Draw the model.
226 DEMODoneRender();
227 DEMOPadRead(); // Read controller
228 AnimTick(&SceneCtrl); // Do animation
229 }
230
231 OSHalt("End of test");
232 }
233
234 /*---------------------------------------------------------------------------*
235 Functions
236 *---------------------------------------------------------------------------*/
237 /*---------------------------------------------------------------------------*
238 Name: DrawInit
239
240 Description: Initializes the vertex attribute format and sets up
241 the array pointer for the indexed data.
242 This function also initializes scene control parameters.
243
244 Arguments: sc : pointer to the structure of scene control parameters
245
246 Returns: none
247 *---------------------------------------------------------------------------*/
DrawInit(MySceneCtrlObj * sc)248 static void DrawInit( MySceneCtrlObj* sc )
249 {
250 u32 i;
251
252 // Texture Buffer
253 TexBuffer = (u8*)OSAlloc(GXGetTexBufferSize(SCREEN_WD, SCREEN_HT, GX_TF_RGB5A3, GX_FALSE, 0));
254
255 // Vertex Attribute
256 GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_S16, 0);
257 GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX0, GX_TEX_ST, GX_S16, 8);
258 GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_CLR0, GX_CLR_RGBA, GX_RGBA8, 0);
259
260 GXSetVtxAttrFmt(GX_VTXFMT1, GX_VA_POS, GX_POS_XYZ, GX_S16, 0);
261 GXSetVtxAttrFmt(GX_VTXFMT1, GX_VA_TEX0, GX_TEX_ST, GX_S16, 8);
262 GXSetVtxAttrFmt(GX_VTXFMT1, GX_VA_CLR0, GX_CLR_RGBA, GX_RGBA8, 0);
263
264 // Array Pointers and Strides
265 GXSetArray(GX_VA_CLR0, ColorArray, 4 * sizeof(u8));
266
267 // Disable auto texcoord scale because they are set by display lists.
268 GXSetTexCoordScaleManually(GX_TEXCOORD0, GX_TRUE, 0, 0);
269 GXSetTexCoordScaleManually(GX_TEXCOORD1, GX_TRUE, 0, 0);
270 GXSetTexCoordScaleManually(GX_TEXCOORD2, GX_TRUE, 0, 0);
271
272 // Pixel format and background color
273 GXSetPixelFmt(GX_PF_RGBA6_Z24, GX_ZC_LINEAR);
274 GXSetCopyClear(BG_COLOR, MAX_Z);
275 GXSetBlendMode(GX_BM_NONE, GX_BL_ONE, GX_BL_ZERO, GX_LO_SET);
276
277 // Prepare effect display lists
278 PrepareDL();
279
280
281 // Default scene control parameter settings
282
283 sc->effectNo = 0;
284
285 // camera
286 sc->cam.cfg = DefaultCamera;
287
288 // cube objects
289 for ( i = 0 ; i < NUM_CUBES ; ++i )
290 {
291 sc->cube[i].pos = CubeIniData[i*3];
292 sc->cube[i].vel = CubeIniData[i*3+1];
293 sc->cube[i].axis = CubeIniData[i*3+2];
294 sc->cube[i].deg = 0.0F;
295 }
296
297 for ( i = 0 ; i < NUM_TORI ; ++i )
298 {
299 sc->torusAngle[i] = 0;
300 }
301 }
302
303 /*---------------------------------------------------------------------------*
304 Name: DrawTick
305
306 Description: Draw the model by using given scene parameters
307
308 Arguments: sc : pointer to the structure of scene control parameters
309
310 Returns: none
311 *---------------------------------------------------------------------------*/
DrawTick(MySceneCtrlObj * sc)312 static void DrawTick( MySceneCtrlObj* sc )
313 {
314 EffectManager* ef = &Effects[sc->effectNo];
315
316 // Set up camera / viewport for the 1st pass.
317 SetCamera(&sc->cam);
318 GXSetViewport(0.0F, 0.0F, (f32)ef->baseViewWd, (f32)ef->baseViewHt, 0.0F, 1.0F);
319 GXSetScissor(0, 0, ef->baseViewWd, ef->baseViewHt);
320
321 // Default matrix
322 GXSetCurrentMtx(GX_PNMTX0);
323
324 // Draw models
325 DrawModels(sc);
326
327 // Make sure every cubes are drawn
328 GXDrawDone();
329
330 // Copyout
331 CopyTextureFromFB(ef);
332
333 // Set up camera / viewport for the 2nd pass.
334 SetScreenSpaceMode();
335 GXSetViewport(0.0F, 0.0F, SCREEN_WD, SCREEN_HT, 0.0F, 1.0F);
336 GXSetScissor(0, 0, SCREEN_WD, SCREEN_HT);
337
338 // Draw effect by using a GD display list.
339 SetTextures(ef);
340 GXCallDisplayList(ef->dlPtr, ef->dlSize);
341
342 DrawFullScrQuad();
343 }
344
345 /*---------------------------------------------------------------------------*
346 Name: AnimTick
347
348 Description: Changes scene parameters according to the pad status.
349
350 Arguments: sc : pointer to the structure of scene control parameters
351
352 Returns: none
353 *---------------------------------------------------------------------------*/
354 #define VelReflect(cmp) \
355 if ( sc->cube[i].pos.cmp < - BOUNDARY ) \
356 sc->cube[i].vel.cmp = fabsf(sc->cube[i].vel.cmp); \
357 if ( sc->cube[i].pos.cmp > BOUNDARY ) \
358 sc->cube[i].vel.cmp = - fabsf(sc->cube[i].vel.cmp);
359
AnimTick(MySceneCtrlObj * sc)360 static void AnimTick( MySceneCtrlObj* sc )
361 {
362 u32 i;
363
364 // Effect mode
365 if ( DEMOPadGetButtonDown(0) & PAD_BUTTON_B )
366 {
367 sc->effectNo = ( sc->effectNo + 1 ) % NUM_EFFECTS;
368 }
369
370 if ( DEMOPadGetButtonDown(0) & PAD_BUTTON_X )
371 {
372 sc->effectNo = ( sc->effectNo + NUM_EFFECTS - 1 ) % NUM_EFFECTS;
373 }
374
375 if ( !(DEMOPadGetButton(0) & PAD_BUTTON_A) )
376 {
377 // Animate cubes
378 for ( i = 0 ; i < NUM_CUBES ; ++i )
379 {
380 // rotation
381 sc->cube[i].deg += 5;
382 if ( sc->cube[i].deg > 720 )
383 {
384 sc->cube[i].deg -= 720;
385 }
386
387 // position
388 VECAdd(&sc->cube[i].pos, &sc->cube[i].vel, &sc->cube[i].pos);
389
390 // velocity
391 VelReflect(x);
392 VelReflect(y);
393 VelReflect(z);
394 }
395
396 // Animate tori
397 for ( i = 0 ; i < NUM_TORI ; ++i )
398 {
399 sc->torusAngle[i] += (i+1);
400 if ( sc->torusAngle[i] > 360 )
401 {
402 sc->torusAngle[i] -= 360;
403 }
404 }
405 }
406 }
407
408 /*---------------------------------------------------------------------------*
409 Name: DrawModels
410
411 Description: Draw models
412
413 Arguments: sc : pointer to the structure of scene control parameters
414
415 Returns: none
416 *---------------------------------------------------------------------------*/
DrawModels(MySceneCtrlObj * sc)417 static void DrawModels( MySceneCtrlObj* sc )
418 {
419 u32 i;
420 Mtx mt, mr, ms, mv, mvi;
421
422 // enable lighting
423 SetLight();
424
425 GXSetNumChans(1);
426 GXSetNumTexGens(0);
427 GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR0A0);
428 GXSetTevOp(GX_TEVSTAGE0, GX_PASSCLR);
429 GXSetAlphaCompare(GX_ALWAYS, 0, GX_AOP_OR, GX_ALWAYS, 0);
430 GXSetTevDirect(GX_TEVSTAGE0);
431 GXSetTevDirect(GX_TEVSTAGE1);
432 GXSetTevDirect(GX_TEVSTAGE2);
433 GXSetTevDirect(GX_TEVSTAGE3);
434 GXSetNumTevStages(1);
435 GXSetNumIndStages(0);
436
437 MTXScale(ms, 100.0F, 100.0F, 100.0F);
438 MTXConcat(sc->cam.view, ms, mv);
439 MTXInvXpose(mv, mvi);
440 GXLoadPosMtxImm(mv, GX_PNMTX0);
441 GXLoadNrmMtxImm(mvi, GX_PNMTX0);
442 GXSetChanMatColor(GX_COLOR0A0, ColorArray[NUM_CUBES+NUM_TORI]);
443 GXDrawSphere1(2);
444
445 MTXScale(ms, 220.0F, 220.0F, 220.0F);
446 MTXRotDeg(mr, 'Y', (s32)(sc->torusAngle[0]/2));
447 MTXConcat(ms, mr, ms);
448 MTXConcat(sc->cam.view, ms, mv);
449 MTXInvXpose(mv, mvi);
450 GXLoadPosMtxImm(mv, GX_PNMTX0);
451 GXLoadNrmMtxImm(mvi, GX_PNMTX0);
452 GXSetChanMatColor(GX_COLOR0A0, ColorArray[NUM_CUBES]);
453 GXDrawTorus(0.24F, 8, 16);
454
455 MTXScale(ms, 330.0F, 330.0F, 330.0F);
456 MTXRotDeg(mr, 'X', (s32)(sc->torusAngle[1]/2));
457 MTXConcat(ms, mr, ms);
458 MTXConcat(sc->cam.view, ms, mv);
459 MTXInvXpose(mv, mvi);
460 GXLoadPosMtxImm(mv, GX_PNMTX0);
461 GXLoadNrmMtxImm(mvi, GX_PNMTX0);
462 GXSetChanMatColor(GX_COLOR0A0, ColorArray[NUM_CUBES+1]);
463 GXDrawTorus(0.15F, 8, 24);
464
465 MTXScale(ms, 440.0F, 440.0F, 440.0F);
466 MTXRotDeg(mr, 'Y', (s32)(-sc->torusAngle[2]/2));
467 MTXConcat(ms, mr, ms);
468 MTXConcat(sc->cam.view, ms, mv);
469 MTXInvXpose(mv, mvi);
470 GXLoadPosMtxImm(mv, GX_PNMTX0);
471 GXLoadNrmMtxImm(mvi, GX_PNMTX0);
472 GXSetChanMatColor(GX_COLOR0A0, ColorArray[NUM_CUBES+2]);
473 GXDrawTorus(0.10F, 8, 24);
474
475 for ( i = 0 ; i < NUM_CUBES ; ++i )
476 {
477 MTXTrans(mt, sc->cube[i].pos.x, sc->cube[i].pos.y, sc->cube[i].pos.z);
478 MTXConcat(sc->cam.view, mt, mv);
479 MTXScale(ms, 100.0F, 100.0F, 100.0F);
480 MTXConcat(mv, ms, mv);
481 MTXRotAxisDeg(mr, &sc->cube[i].axis, sc->cube[i].deg);
482 MTXConcat(mv, mr, mv);
483 GXLoadPosMtxImm(mv, GX_PNMTX0);
484 MTXInverse(mv, mvi);
485 MTXTranspose(mvi, mv);
486 GXLoadNrmMtxImm(mv, GX_PNMTX0);
487
488 GXSetChanMatColor(GX_COLOR0A0, ColorArray[i]);
489
490 GXDrawCube();
491 }
492 }
493
494 /*---------------------------------------------------------------------------*
495 Name: DrawFullScrQuad
496
497 Description: Draw a full-screen sized quad
498
499 Arguments: none
500
501 Returns: none
502 *---------------------------------------------------------------------------*/
DrawFullScrQuad(void)503 static void DrawFullScrQuad( void )
504 {
505 // Vertex descriptor
506 GXClearVtxDesc();
507 GXSetVtxDesc(GX_VA_POS, GX_DIRECT);
508 GXSetVtxDesc(GX_VA_TEX0, GX_DIRECT);
509
510 // Draw a large quad
511 GXBegin(GX_QUADS, GX_VTXFMT1, 4);
512 GXPosition3s16( 0, 0, 0);
513 GXTexCoord2s16(0x0000, 0x0000);
514 GXPosition3s16(SCREEN_WD, 0, 0);
515 GXTexCoord2s16(0x0100, 0x0000);
516 GXPosition3s16(SCREEN_WD, SCREEN_HT, 0);
517 GXTexCoord2s16(0x0100, 0x0100);
518 GXPosition3s16( 0, SCREEN_HT, 0);
519 GXTexCoord2s16(0x0000, 0x0100);
520 GXEnd();
521 }
522
523 /*---------------------------------------------------------------------------*
524 Name: CopyTextureFromFB
525
526 Description: Copies texture from the frame buffer image
527
528 Arguments: em : a pointer to EffectManager structure
529
530 Returns: none
531 *---------------------------------------------------------------------------*/
CopyTextureFromFB(EffectManager * em)532 static void CopyTextureFromFB( EffectManager* em )
533 {
534 GXBool filterMode;
535
536 if ( em->baseViewWd == em->copyTexWd &&
537 em->baseViewHt == em->copyTexHt )
538 {
539 filterMode = GX_FALSE;
540 }
541 else
542 {
543 ASSERT( (em->baseViewWd == em->copyTexWd * 2) &&
544 (em->baseViewHt == em->copyTexHt * 2) );
545
546 filterMode = GX_TRUE;
547 }
548
549 // Copy image
550 GXSetTexCopySrc(0, 0, em->baseViewWd, em->baseViewHt);
551 GXSetTexCopyDst(em->copyTexWd, em->copyTexHt, GX_TF_RGB5A3, filterMode);
552 GXCopyTex(TexBuffer, GX_TRUE);
553 }
554
555 /*---------------------------------------------------------------------------*
556 Name: SetTextures
557
558 Description: Set up textures
559
560 Arguments: em : a pointer to EffectManager structure
561
562 Returns: none
563 *---------------------------------------------------------------------------*/
SetTextures(EffectManager * em)564 static void SetTextures( EffectManager* em )
565 {
566 GXTexObj txb, tx0, tx1, tx2a, tx2b, tx3;
567 GXTlutObj tl0;
568
569 // Base texture (copied from the EFB.)
570 GXInitTexObj(&txb, TexBuffer, em->copyTexWd, em->copyTexHt,
571 GX_TF_RGB5A3, GX_CLAMP, GX_CLAMP, GX_FALSE);
572 GXInitTexObjFilter(&txb, GX_NEAR, GX_NEAR);
573 GXLoadTexObj(&txb, GX_TEXMAP0);
574
575 // Effect texture 0
576 GXInitTlutObj(&tl0, EffectTex0TLUT, FXTEX0_TL_FMT, FXTEX0_TL_N);
577 GXLoadTlut(&tl0, GX_TLUT0);
578 GXInitTexObjCI(&tx0, EffectTexture0, FXTEX0_WD, FXTEX0_HT,
579 FXTEX0_FMT, GX_REPEAT, GX_REPEAT, GX_FALSE, GX_TLUT0);
580 GXInitTexObjFilter(&tx0, GX_NEAR, GX_NEAR);
581 GXLoadTexObj(&tx0, GX_TEXMAP1);
582
583 // Effect texture 1
584 GXInitTexObj(&tx1, EffectTexture1, FXTEX1_WD, FXTEX1_HT,
585 FXTEX1_FMT, GX_CLAMP, GX_CLAMP, GX_FALSE);
586 GXInitTexObjFilter(&tx1, GX_NEAR, GX_NEAR);
587 GXLoadTexObj(&tx1, GX_TEXMAP2);
588
589 // Effect texture 2-A
590 GXInitTexObj(&tx2a, EffectTexture2A, FXTEX2A_WD, FXTEX2A_HT,
591 FXTEX2A_FMT, GX_MIRROR, GX_MIRROR, GX_FALSE);
592 GXInitTexObjFilter(&tx2a, GX_NEAR, GX_NEAR);
593 GXLoadTexObj(&tx2a, GX_TEXMAP3);
594
595 // Effect texture 2-B
596 GXInitTexObj(&tx2b, EffectTexture2B, FXTEX2B_WD, FXTEX2B_HT,
597 FXTEX2B_FMT, GX_REPEAT, GX_REPEAT, GX_FALSE);
598 GXInitTexObjFilter(&tx2b, GX_NEAR, GX_NEAR);
599 GXLoadTexObj(&tx2b, GX_TEXMAP4);
600
601 // Effect texture 3
602 GXInitTexObj(&tx3, EffectTexture3, FXTEX3_WD, FXTEX3_HT,
603 FXTEX3_FMT, GX_REPEAT, GX_REPEAT, GX_FALSE);
604 GXInitTexObjFilter(&tx3, GX_LINEAR, GX_LINEAR);
605 GXLoadTexObj(&tx3, GX_TEXMAP5);
606 }
607
608 /*---------------------------------------------------------------------------*
609 Name: SetCamera
610
611 Description: set view matrix and load projection matrix into hardware
612
613 Arguments: cam : pointer to the MyCameraObj structure
614
615 Returns: none
616 *---------------------------------------------------------------------------*/
SetCamera(MyCameraObj * cam)617 static void SetCamera( MyCameraObj* cam )
618 {
619 MTXLookAt(
620 cam->view,
621 &cam->cfg.location,
622 &cam->cfg.up,
623 &cam->cfg.target );
624
625 MTXFrustum(
626 cam->proj,
627 cam->cfg.top,
628 - (cam->cfg.top),
629 cam->cfg.left,
630 - (cam->cfg.left),
631 cam->cfg.znear,
632 cam->cfg.zfar );
633 GXSetProjection(cam->proj, GX_PERSPECTIVE);
634 }
635
636 /*---------------------------------------------------------------------------*
637 Name: SetScreenSpaceMode
638
639 Description: set projection matrix up to screen coordinate system
640
641 Arguments: none
642
643 Returns: none
644 *---------------------------------------------------------------------------*/
SetScreenSpaceMode(void)645 static void SetScreenSpaceMode( void )
646 {
647 Mtx44 proj;
648 Mtx mv;
649
650 MTXOrtho( proj, 0.0F, SCREEN_HT, 0.0F, SCREEN_WD, 0.0F, - MAX_Z );
651 GXSetProjection( proj, GX_ORTHOGRAPHIC );
652 MTXIdentity(mv);
653 GXLoadPosMtxImm(mv, GX_PNMTX0);
654 }
655
656 /*---------------------------------------------------------------------------*
657 Name: SetLight
658
659 Description: Sets light objects and color channels
660
661 Arguments: none
662
663 Returns: none
664 *---------------------------------------------------------------------------*/
SetLight(void)665 static void SetLight( void )
666 {
667 GXLightObj lobj;
668
669 // set up light position and color
670 GXInitLightPos(&lobj, 0.0F, 5000.0F, 10000.0F); // almost parallel
671 GXInitLightColor(&lobj, LIGHT_COLOR);
672 GXLoadLightObjImm(&lobj, GX_LIGHT0);
673
674 // channel setting
675 GXSetChanCtrl(
676 GX_COLOR0A0,
677 GX_ENABLE, // enable channel
678 GX_SRC_REG, // amb source
679 GX_SRC_REG, // mat source
680 GX_LIGHT0, // light mask
681 GX_DF_CLAMP, // diffuse function
682 GX_AF_NONE); // attenuation function
683 // channel ambient
684 GXSetChanAmbColor(GX_COLOR0A0, REG_AMBIENT);
685 }
686
687 /*---------------------------------------------------------------------------*
688 Name: PrepareDL
689
690 Description: [create mode] Allocate memory for display list and call
691 the function CreateModelDL to create the display list.
692 [load mode] Load GDL file from the disc.
693
694 Arguments: none
695
696 Returns: none
697 *---------------------------------------------------------------------------*/
PrepareDL(void)698 static void PrepareDL ( void )
699 {
700 #ifdef LOAD_DL_FROM_FILE
701 //---------------------------------------------------------
702 // File mode : Read pre-generated GDL file from file
703 //---------------------------------------------------------
704 s32 err;
705 GDGList* dlArray;
706 GDGList* plArray;
707 u32 nDls, nPls;
708 u32 i;
709
710 err = GDReadDLFile("gddemo/gdIndTex.gdl", &nDls, &nPls, &dlArray, &plArray);
711
712 ASSERTMSG( err == 0, "GD file read error.\n" );
713
714 // Check number of lists.
715 ASSERTMSG( ( nDls == NUM_DLS && nPls == NUM_PLS ),
716 "This data doesn't match requirement of this demo.\n" );
717
718 // Obtain effect display lists.
719 for ( i = 0 ; i < NUM_DLS ; ++i )
720 {
721 Effects[i].dlPtr = dlArray[i].ptr;
722 Effects[i].dlSize = dlArray[i].byteLength;
723 // No patch list in this demo.
724 }
725
726 #else
727 //---------------------------------------------------------
728 // Create mode : Create display list in this application
729 //---------------------------------------------------------
730 u32 i;
731
732 // Allocate memory for DLs.
733 for ( i = 0 ; i < NUM_EFFECTS ; ++i )
734 {
735 Effects[i].dlPtr = OSAlloc(EFFECTDL_SIZE_MAX);
736 ASSERTMSG(Effects[i].dlPtr, "Memory allocation failed.\n");
737 }
738
739 Effects[0].dlSize = CreateEffectDL0(Effects[0].dlPtr);
740 OSReport("DL0 Size = %d\n", Effects[0].dlSize);
741
742 Effects[1].dlSize = CreateEffectDL1(Effects[1].dlPtr);
743 OSReport("DL1 Size = %d\n", Effects[1].dlSize);
744
745 Effects[2].dlSize = CreateEffectDL2(Effects[2].dlPtr);
746 OSReport("DL2 Size = %d\n", Effects[2].dlSize);
747
748 Effects[3].dlSize = CreateEffectDL3(Effects[3].dlPtr);
749 OSReport("DL3 Size = %d\n", Effects[3].dlSize);
750
751 #endif
752 }
753
754 /*---------------------------------------------------------------------------*
755 Name: PrintIntro
756
757 Description: Prints the directions on how to use this demo.
758
759 Arguments: none
760
761 Returns: none
762 *---------------------------------------------------------------------------*/
PrintIntro(void)763 static void PrintIntro( void )
764 {
765 OSReport("\n\n");
766 OSReport("********************************\n");
767 OSReport(" GD Indirect Texture demo\n");
768 OSReport("********************************\n");
769 OSReport("START : Quit.\n");
770 OSReport("A : Pause while pressed.\n");
771 OSReport("B/X : Change effect mode.\n");
772 OSReport("********************************\n");
773 }
774
775 /*============================================================================*/
776
777 /*---------------------------------------------------------------------------*
778 Texture Data
779 *---------------------------------------------------------------------------*/
780 // Effect Texture 0 (CI TEXTURE + TLUT)
781 u16 EffectTex0TLUT[FXTEX0_TL_N] ATTRIBUTE_ALIGN(32) =
782 {
783 0x8080, 0x807F, 0x8081,
784 0x8180, 0x817F, 0x8181,
785 0x8080, 0x8080
786 };
787
788 u32 EffectTexture0[] ATTRIBUTE_ALIGN(32) =
789 {
790 // Line 0-7
791 0x00001111,
792 0x00000111,
793 0x00000001,
794 0x00000000,
795 0x00000000,
796 0x00000000,
797 0x00000000,
798 0x00000000,
799
800 0x11113333,
801 0x11133333,
802 0x13333333,
803 0x33333333,
804 0x33333333,
805 0x33333333,
806 0x33333333,
807 0x33333333,
808
809 // Line 8-15
810 0x00000000,
811 0x00000000,
812 0x00000000,
813 0x00000000,
814 0x00000000,
815 0x00000002,
816 0x00000222,
817 0x00002222,
818
819 0x33333333,
820 0x33333333,
821 0x33333333,
822 0x33333333,
823 0x33333333,
824 0x23333333,
825 0x22233333,
826 0x22223333,
827
828 // Line 16-23
829 0x11110000,
830 0x11100000,
831 0x10000000,
832 0x00000000,
833 0x00000000,
834 0x00000000,
835 0x00000000,
836 0x00000000,
837
838 0x00004444,
839 0x00000444,
840 0x00000004,
841 0x00000000,
842 0x00000000,
843 0x00000000,
844 0x00000000,
845 0x00000000,
846
847 // Line 24-31
848 0x00000000,
849 0x00000000,
850 0x00000000,
851 0x00000000,
852 0x00000000,
853 0x20000000,
854 0x22200000,
855 0x22220000,
856
857 0x00000000,
858 0x00000000,
859 0x00000000,
860 0x00000000,
861 0x00000000,
862 0x00000005,
863 0x00000555,
864 0x00005555,
865 };
866
867 u8 EffectTexture1[] ATTRIBUTE_ALIGN(32) =
868 {
869 // intensity level 0
870 0x00, 0x00, 0x00, 0x00,
871 0x00, 0x00, 0x00, 0x00,
872 0x00, 0x00, 0x00, 0x00,
873 0x00, 0x00, 0x00, 0x00,
874 0x00, 0x00, 0x00, 0x00,
875 0x00, 0x00, 0x00, 0x00,
876 0x00, 0x00, 0x00, 0x00,
877 0x00, 0x00, 0x00, 0x00,
878
879 0x00, 0x00, 0x00, 0x00,
880 0x00, 0x00, 0x00, 0x00,
881 0x00, 0x00, 0x00, 0x00,
882 0x00, 0x00, 0x00, 0x00,
883 0x00, 0x00, 0x00, 0x00,
884 0x00, 0x00, 0x00, 0x00,
885 0x00, 0x00, 0x00, 0x00,
886 0x00, 0x00, 0x00, 0x00,
887
888 0x00, 0x00, 0x00, 0x00,
889 0x00, 0x00, 0x00, 0x00,
890 0x00, 0x00, 0x00, 0x00,
891 0x00, 0x00, 0x00, 0x00,
892 0x00, 0x00, 0x00, 0x00,
893 0x00, 0x00, 0x00, 0x00,
894 0x00, 0x00, 0x00, 0x00,
895 0x00, 0x00, 0x00, 0x00,
896
897 0x00, 0x00, 0x00, 0x00,
898 0x00, 0x00, 0x00, 0x00,
899 0x00, 0x00, 0x00, 0x00,
900 0x00, 0x00, 0x00, 0x00,
901 0x00, 0x00, 0x00, 0x00,
902 0x00, 0x00, 0x00, 0x00,
903 0x00, 0x00, 0x00, 0x00,
904 0x00, 0x00, 0x00, 0x00,
905
906 // intensity level 1
907 0x00, 0x00, 0x00, 0x00,
908 0x00, 0x00, 0xFF, 0xFF,
909 0x00, 0x00, 0x00, 0x0F,
910 0x00, 0x00, 0x00, 0x0F,
911 0x00, 0x00, 0x00, 0x0F,
912 0x00, 0x00, 0x00, 0x0F,
913 0x00, 0x00, 0x00, 0x0F,
914 0x00, 0x00, 0x00, 0x0F,
915
916 0x00, 0x00, 0x00, 0x00,
917 0xFF, 0xF0, 0x00, 0x00,
918 0x00, 0x00, 0x00, 0x00,
919 0x00, 0x00, 0x00, 0x00,
920 0x00, 0x00, 0x00, 0x00,
921 0x00, 0x00, 0x00, 0x00,
922 0x00, 0x00, 0x00, 0x00,
923 0x00, 0x00, 0x00, 0x00,
924
925 0x00, 0x00, 0x00, 0x0F,
926 0x00, 0x00, 0x00, 0x0F,
927 0x00, 0x00, 0x00, 0x0F,
928 0x00, 0x00, 0x00, 0x0F,
929 0x00, 0x00, 0x00, 0x0F,
930 0x00, 0x00, 0x00, 0x0F,
931 0x00, 0x00, 0xFF, 0xFF,
932 0x00, 0x00, 0x00, 0x00,
933
934 0x00, 0x00, 0x00, 0x00,
935 0x00, 0x00, 0x00, 0x00,
936 0x00, 0x00, 0x00, 0x00,
937 0x00, 0x00, 0x00, 0x00,
938 0x00, 0x00, 0x00, 0x00,
939 0x00, 0x00, 0x00, 0x00,
940 0xFF, 0xF0, 0x00, 0x00,
941 0x00, 0x00, 0x00, 0x00,
942
943 // intensity level 2
944 0x00, 0x00, 0x00, 0x00,
945 0x00, 0x00, 0xFF, 0xFF,
946 0x00, 0x0F, 0x00, 0x00,
947 0x00, 0xF0, 0x00, 0x00,
948 0x0F, 0x00, 0x00, 0x00,
949 0x0F, 0x00, 0x00, 0x00,
950 0x0F, 0x00, 0x00, 0x00,
951 0x0F, 0x00, 0x00, 0x00,
952
953 0x00, 0x00, 0x00, 0x00,
954 0xFF, 0xFF, 0x00, 0x00,
955 0x00, 0x00, 0xF0, 0x00,
956 0x00, 0x00, 0x0F, 0x00,
957 0x00, 0x00, 0x00, 0xF0,
958 0x00, 0x00, 0x00, 0xF0,
959 0x00, 0x00, 0x00, 0xF0,
960 0x00, 0x00, 0x00, 0xF0,
961
962 0x0F, 0x00, 0x00, 0x00,
963 0x0F, 0x00, 0x00, 0x00,
964 0x0F, 0x00, 0x00, 0x00,
965 0x0F, 0x00, 0x00, 0x00,
966 0x00, 0xF0, 0x00, 0x00,
967 0x00, 0x0F, 0x00, 0x00,
968 0x00, 0x00, 0xFF, 0xFF,
969 0x00, 0x00, 0x00, 0x00,
970
971 0x00, 0x00, 0x00, 0xF0,
972 0x00, 0x00, 0x00, 0xF0,
973 0x00, 0x00, 0x00, 0xF0,
974 0x00, 0x00, 0x00, 0xF0,
975 0x00, 0x00, 0x0F, 0x00,
976 0x00, 0x00, 0xF0, 0x00,
977 0xFF, 0xFF, 0x00, 0x00,
978 0x00, 0x00, 0x00, 0x00,
979
980 // intensity level 3
981 0x00, 0x00, 0x00, 0x00,
982 0x0F, 0xFF, 0xFF, 0xFF,
983 0x0F, 0xF0, 0x00, 0x0F,
984 0x00, 0x00, 0x00, 0x0F,
985 0x00, 0x00, 0x00, 0x0F,
986 0x00, 0x00, 0x00, 0x0F,
987 0x00, 0x00, 0x00, 0x0F,
988 0x00, 0x00, 0x00, 0x0F,
989
990 0x00, 0x00, 0x00, 0x00,
991 0xFF, 0xFF, 0xFF, 0xF0,
992 0xF0, 0x00, 0x0F, 0xF0,
993 0xF0, 0x00, 0x00, 0x00,
994 0xF0, 0x00, 0x00, 0x00,
995 0xF0, 0x00, 0x00, 0x00,
996 0xF0, 0x00, 0x00, 0x00,
997 0xF0, 0x00, 0x00, 0x00,
998
999 0x00, 0x00, 0x00, 0x0F,
1000 0x00, 0x00, 0x00, 0x0F,
1001 0x00, 0x00, 0x00, 0x0F,
1002 0x00, 0x00, 0x00, 0x0F,
1003 0x00, 0x00, 0x00, 0x0F,
1004 0x00, 0x00, 0x00, 0x0F,
1005 0x00, 0x00, 0x00, 0x0F,
1006 0x00, 0x00, 0x00, 0x00,
1007
1008 0xF0, 0x00, 0x00, 0x00,
1009 0xF0, 0x00, 0x00, 0x00,
1010 0xF0, 0x00, 0x00, 0x00,
1011 0xF0, 0x00, 0x00, 0x00,
1012 0xF0, 0x00, 0x00, 0x00,
1013 0xF0, 0x00, 0x00, 0x00,
1014 0xF0, 0x00, 0x00, 0x00,
1015 0x00, 0x00, 0x00, 0x00,
1016
1017 // intensity level 4
1018 0x00, 0x00, 0x00, 0x00,
1019 0x0F, 0xFF, 0xFF, 0xFF,
1020 0x00, 0xFF, 0x00, 0x0F,
1021 0x00, 0xFF, 0x00, 0x00,
1022 0x00, 0xFF, 0x00, 0x00,
1023 0x00, 0xFF, 0x00, 0x00,
1024 0x00, 0xFF, 0x00, 0x00,
1025 0x00, 0xFF, 0x00, 0x00,
1026
1027 0x00, 0x00, 0x00, 0x00,
1028 0x00, 0x00, 0x00, 0x00,
1029 0xFF, 0xF0, 0x00, 0x00,
1030 0x00, 0xFF, 0xF0, 0x00,
1031 0x00, 0x00, 0xFF, 0x00,
1032 0x00, 0x00, 0xFF, 0x00,
1033 0x00, 0x00, 0xFF, 0x00,
1034 0x00, 0x00, 0xFF, 0x00,
1035
1036 0x00, 0xFF, 0x00, 0x00,
1037 0x00, 0xFF, 0x00, 0x00,
1038 0x00, 0xFF, 0x00, 0x00,
1039 0x00, 0xFF, 0x00, 0x00,
1040 0x00, 0xFF, 0x00, 0x00,
1041 0x00, 0xFF, 0x00, 0x0F,
1042 0x0F, 0xFF, 0xFF, 0xFF,
1043 0x00, 0x00, 0x00, 0x00,
1044
1045 0x00, 0x00, 0xFF, 0x00,
1046 0x00, 0x00, 0xFF, 0x00,
1047 0x00, 0x00, 0xFF, 0x00,
1048 0x00, 0x00, 0xFF, 0x00,
1049 0x00, 0xFF, 0xF0, 0x00,
1050 0xFF, 0xF0, 0x00, 0x00,
1051 0x00, 0x00, 0x00, 0x00,
1052 0x00, 0x00, 0x00, 0x00,
1053
1054 // intensity level 5
1055 0x00, 0x00, 0x00, 0x00,
1056 0x0F, 0xFF, 0xFF, 0xFF,
1057 0x0F, 0xFF, 0xFF, 0xFF,
1058 0x0F, 0xF0, 0x00, 0x00,
1059 0x0F, 0xF0, 0x00, 0x00,
1060 0x0F, 0xF0, 0x00, 0x00,
1061 0x0F, 0xF0, 0x00, 0x00,
1062 0x0F, 0xFF, 0xFF, 0xFF,
1063
1064 0x00, 0x00, 0x00, 0x00,
1065 0xFF, 0xFF, 0xFF, 0xF0,
1066 0xFF, 0xFF, 0xFF, 0xF0,
1067 0x00, 0x00, 0x00, 0x00,
1068 0x00, 0x00, 0x00, 0x00,
1069 0x00, 0x00, 0x00, 0x00,
1070 0x00, 0x00, 0x00, 0x00,
1071 0xFF, 0xFF, 0xFF, 0x00,
1072
1073 0x0F, 0xFF, 0xFF, 0xFF,
1074 0x0F, 0xF0, 0x00, 0x00,
1075 0x0F, 0xF0, 0x00, 0x00,
1076 0x0F, 0xF0, 0x00, 0x00,
1077 0x0F, 0xF0, 0x00, 0x00,
1078 0x0F, 0xFF, 0xFF, 0xFF,
1079 0x0F, 0xFF, 0xFF, 0xFF,
1080 0x00, 0x00, 0x00, 0x00,
1081
1082 0xFF, 0xFF, 0xFF, 0x00,
1083 0x00, 0x00, 0x00, 0x00,
1084 0x00, 0x00, 0x00, 0x00,
1085 0x00, 0x00, 0x00, 0x00,
1086 0x00, 0x00, 0x00, 0x00,
1087 0xFF, 0xFF, 0xFF, 0xF0,
1088 0xFF, 0xFF, 0xFF, 0xF0,
1089 0x00, 0x00, 0x00, 0x00,
1090
1091 // intensity level 6
1092 0x00, 0x00, 0x00, 0x00,
1093 0x00, 0x00, 0x00, 0x00,
1094 0x00, 0x00, 0x00, 0x0F,
1095 0x00, 0x00, 0x00, 0x0F,
1096 0x00, 0x00, 0x00, 0x0F,
1097 0x00, 0x00, 0x00, 0xFF,
1098 0x0F, 0xFF, 0xFF, 0xFF,
1099 0x00, 0xFF, 0xFF, 0xFF,
1100
1101 0x00, 0x00, 0x00, 0x00,
1102 0x00, 0x00, 0x00, 0x00,
1103 0xF0, 0x00, 0x00, 0x00,
1104 0xF0, 0x00, 0x00, 0x00,
1105 0xF0, 0x00, 0x00, 0x00,
1106 0xFF, 0x00, 0x00, 0x00,
1107 0xFF, 0xFF, 0xFF, 0xF0,
1108 0xFF, 0xFF, 0xFF, 0x00,
1109
1110 0x00, 0x0F, 0xFF, 0xFF,
1111 0x00, 0x00, 0x00, 0xFF,
1112 0x00, 0x00, 0x0F, 0xFF,
1113 0x00, 0x00, 0xFF, 0xFF,
1114 0x00, 0x0F, 0xFF, 0xF0,
1115 0x00, 0x0F, 0xF0, 0x00,
1116 0x00, 0xFF, 0x00, 0x00,
1117 0x00, 0x00, 0x00, 0x00,
1118
1119 0xFF, 0xFF, 0xF0, 0x00,
1120 0xFF, 0x00, 0x00, 0x00,
1121 0xFF, 0xF0, 0x00, 0x00,
1122 0xFF, 0xFF, 0x00, 0x00,
1123 0x0F, 0xFF, 0xF0, 0x00,
1124 0x00, 0x0F, 0xF0, 0x00,
1125 0x00, 0x00, 0xFF, 0x00,
1126 0x00, 0x00, 0x00, 0x00,
1127
1128 // intensity level 7
1129 0x00, 0x00, 0x00, 0x00,
1130 0x0F, 0xFF, 0xFF, 0x00,
1131 0x0F, 0xFF, 0xFF, 0x00,
1132 0x0F, 0xFF, 0xFF, 0xF0,
1133 0x0F, 0xFF, 0xFF, 0xF0,
1134 0x0F, 0xFF, 0xFF, 0xFF,
1135 0x0F, 0xFF, 0xF0, 0xFF,
1136 0x0F, 0xFF, 0xF0, 0xFF,
1137
1138 0x00, 0x00, 0x00, 0x00,
1139 0x00, 0x0F, 0xFF, 0xF0,
1140 0x00, 0x0F, 0xFF, 0xF0,
1141 0x00, 0x0F, 0xFF, 0xF0,
1142 0x00, 0x0F, 0xFF, 0xF0,
1143 0xF0, 0x0F, 0xFF, 0xF0,
1144 0xF0, 0x0F, 0xFF, 0xF0,
1145 0xF0, 0x0F, 0xFF, 0xF0,
1146
1147 0x0F, 0xFF, 0xF0, 0x0F,
1148 0x0F, 0xFF, 0xF0, 0x0F,
1149 0x0F, 0xFF, 0xF0, 0x0F,
1150 0x0F, 0xFF, 0xF0, 0x00,
1151 0x0F, 0xFF, 0xF0, 0x00,
1152 0x0F, 0xFF, 0xF0, 0x00,
1153 0x0F, 0xFF, 0xF0, 0x00,
1154 0x00, 0x00, 0x00, 0x00,
1155
1156 0xFF, 0x0F, 0xFF, 0xF0,
1157 0xFF, 0x0F, 0xFF, 0xF0,
1158 0xFF, 0xFF, 0xFF, 0xF0,
1159 0x0F, 0xFF, 0xFF, 0xF0,
1160 0x0F, 0xFF, 0xFF, 0xF0,
1161 0x00, 0xFF, 0xFF, 0xF0,
1162 0x00, 0xFF, 0xFF, 0xF0,
1163 0x00, 0x00, 0x00, 0x00,
1164
1165 };
1166
1167 u32 EffectTexture2A[] ATTRIBUTE_ALIGN(32) =
1168 {
1169 0xF0000000,
1170 0xF0000000,
1171 0xF0000000,
1172 0xF0000000,
1173 0xE0000000,
1174 0x80000000,
1175 0x80000000,
1176 0x80000000,
1177
1178 0x60000000,
1179 0x50000000,
1180 0x40000000,
1181 0x30000000,
1182 0x20000000,
1183 0x10000000,
1184 0x00000000,
1185 0x00000000
1186 };
1187
1188 u32 EffectTexture2B[] ATTRIBUTE_ALIGN(32) =
1189 {
1190 // Tile pattern 0
1191 0x9AACCEFF,
1192 0x89AACCEF,
1193 0x889AACCE,
1194 0x7889AACC,
1195 0x77889AAC,
1196 0x677889AA,
1197 0x1677889A,
1198 0x11677889,
1199
1200 0x9AACCEFF,
1201 0x89AACCEF,
1202 0x889AACCE,
1203 0x7889AACC,
1204 0x77889AAC,
1205 0x677889AA,
1206 0x1677889A,
1207 0x11677889,
1208
1209 0x9AACCEFF,
1210 0x89AACCEF,
1211 0x889AACCE,
1212 0x7889AACC,
1213 0x77889AAC,
1214 0x677889AA,
1215 0x1677889A,
1216 0x11677889,
1217
1218 0x9AACCEFF,
1219 0x89AACCEF,
1220 0x889AACCE,
1221 0x7889AACC,
1222 0x77889AAC,
1223 0x677889AA,
1224 0x1677889A,
1225 0x11677889,
1226
1227 // Tile pattern 1
1228 0xFFFF268A,
1229 0xFFF468AF,
1230 0xFF268AFF,
1231 0xF468AFFF,
1232 0xF268AFFF,
1233 0xF468AFFF,
1234 0xF268AFFF,
1235 0xF468AFFF,
1236
1237 0xFFFF1579,
1238 0xFFF3579F,
1239 0xFF1579FF,
1240 0xF3579FFF,
1241 0xF1579FFF,
1242 0xF3579FFF,
1243 0xF1579FFF,
1244 0xF3579FFF,
1245
1246 0xFF268AFF,
1247 0xFFF468AF,
1248 0xFFFF268A,
1249 0xAFFFF468,
1250 0xAFFFF268,
1251 0xAFFFF468,
1252 0xAFFFF268,
1253 0xAFFFF468,
1254
1255 0xFF1579FF,
1256 0xFFF3579F,
1257 0xFFFF1579,
1258 0x9FFFF357,
1259 0x9FFFF157,
1260 0x9FFFF357,
1261 0x9FFFF157,
1262 0x9FFFF357,
1263
1264 // Tile pattern 2
1265 0xFFFFFFFF,
1266 0xFFFFFFFF,
1267 0xEEEEEEEE,
1268 0x88888888,
1269 0xFFFFFFFF,
1270 0xFFFFFFFF,
1271 0xCCCCCCCC,
1272 0x11111111,
1273
1274 0xFFFFFFFF,
1275 0xFFFFFFFF,
1276 0xEEEEEEEE,
1277 0x88888888,
1278 0xFFFFFFFF,
1279 0xFFFFFFFF,
1280 0xCCCCCCCC,
1281 0x11111111,
1282
1283 0xFFFFFFFF,
1284 0xFFFFFFFF,
1285 0xEEEEEEEE,
1286 0x88888888,
1287 0xFFFFFFFF,
1288 0xFFFFFFFF,
1289 0xCCCCCCCC,
1290 0x33333333,
1291
1292 0xFFFFFFFF,
1293 0xFFFFFFFF,
1294 0xEEEEEEEE,
1295 0x88888888,
1296 0xFFFFFFFF,
1297 0xFFFFFFFF,
1298 0xCCCCCCCC,
1299 0x33333333,
1300
1301 // Tile pattern 3
1302 0xFFFFFFFF,
1303 0xFFFFFFFF,
1304 0xFFFFFFFF,
1305 0xFFFFFFFF,
1306 0xFFFFFFFF,
1307 0xFFFFFFFF,
1308 0xFFFFFFFF,
1309 0xFFFFFFFF,
1310
1311 0xFEDBDEFF,
1312 0xECA8ACEF,
1313 0xDA555ADF,
1314 0xB85158BF,
1315 0xDA555ADF,
1316 0xECA8ACEF,
1317 0xFEDBDEFF,
1318 0xFFFFFFFF,
1319
1320 0xFEDBDEFF,
1321 0xECA8ACEF,
1322 0xDA555ADF,
1323 0xB85158BF,
1324 0xDA555ADF,
1325 0xECA8ACEF,
1326 0xFEDBDEFF,
1327 0xFFFFFFFF,
1328
1329 0xFFFFFFFF,
1330 0xFFFFFFFF,
1331 0xFFFFFFFF,
1332 0xFFFFFFFF,
1333 0xFFFFFFFF,
1334 0xFFFFFFFF,
1335 0xFFFFFFFF,
1336 0xFFFFFFFF,
1337
1338 };
1339
1340 u32 EffectTexture3[] ATTRIBUTE_ALIGN(32) =
1341 {
1342 0x8C8C8C8C,
1343 0xC0000000,
1344 0x80000000,
1345 0xC0000000,
1346 0x80000000,
1347 0xC0000000,
1348 0x80000000,
1349 0xC0000000,
1350
1351 0x8C8C8C8C,
1352 0x00000000,
1353 0x00000000,
1354 0x00000000,
1355 0x00000000,
1356 0x00000000,
1357 0x00000000,
1358 0x00000000,
1359
1360 0x80000000,
1361 0xC0000000,
1362 0x80000000,
1363 0xC0000000,
1364 0x80000000,
1365 0xC0000000,
1366 0x80000000,
1367 0xC0000000,
1368
1369 0x00000000,
1370 0x00000000,
1371 0x00000000,
1372 0x00000000,
1373 0x00000000,
1374 0x00000000,
1375 0x00000000,
1376 0x00000000,
1377 };
1378
1379 /*============================================================================*/
1380
1381
1382