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