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