OSDN Git Service

original
[gb-231r1-is01/Gingerbread_2.3.3_r1_IS01.git] / frameworks / base / libs / rs / java / Film / res / raw / filmimage.c
1 // Fountain test script
2
3 #pragma version(1)
4 #pragma stateVertex(orthoWindow)
5 #pragma stateRaster(flat)
6 #pragma stateFragment(PgmFragBackground)
7 #pragma stateStore(MyBlend)
8
9
10 int main(void* con, int ft, int launchID) {
11     int count, touch, x, y, rate, maxLife, lifeShift;
12     int life;
13     int ct, ct2;
14     int newPart;
15     int drawCount;
16     int dx, dy, idx;
17     int posx,posy;
18     int c;
19     int srcIdx;
20     int dstIdx;
21
22     count = loadI32(con, 0, 1);
23     touch = loadI32(con, 0, 2);
24     x = loadI32(con, 0, 3);
25     y = loadI32(con, 0, 4);
26
27     rate = 4;
28     maxLife = (count / rate) - 1;
29     lifeShift = 0;
30     {
31         life = maxLife;
32         while (life > 255) {
33             life = life >> 1;
34             lifeShift ++;
35         }
36     }
37
38     drawRect(con, 0, 256, 0, 512);
39     contextBindProgramFragment(con, NAMED_PgmFragParts);
40
41     if (touch) {
42         newPart = loadI32(con, 2, 0);
43         for (ct2=0; ct2<rate; ct2++) {
44             dx = scriptRand(con, 0x10000) - 0x8000;
45             dy = scriptRand(con, 0x10000) - 0x8000;
46
47             idx = newPart * 5 + 1;
48             storeI32(con, 2, idx, dx);
49             storeI32(con, 2, idx + 1, dy);
50             storeI32(con, 2, idx + 2, maxLife);
51             storeI32(con, 2, idx + 3, x << 16);
52             storeI32(con, 2, idx + 4, y << 16);
53
54             newPart++;
55             if (newPart >= count) {
56                 newPart = 0;
57             }
58         }
59         storeI32(con, 2, 0, newPart);
60     }
61
62     drawCount = 0;
63     for (ct=0; ct < count; ct++) {
64         srcIdx = ct * 5 + 1;
65
66         dx = loadI32(con, 2, srcIdx);
67         dy = loadI32(con, 2, srcIdx + 1);
68         life = loadI32(con, 2, srcIdx + 2);
69         posx = loadI32(con, 2, srcIdx + 3);
70         posy = loadI32(con, 2, srcIdx + 4);
71
72         if (life) {
73             if (posy < (480 << 16)) {
74                 dstIdx = drawCount * 9;
75                 c = 0xffafcf | ((life >> lifeShift) << 24);
76
77                 storeU32(con, 1, dstIdx, c);
78                 storeI32(con, 1, dstIdx + 1, posx);
79                 storeI32(con, 1, dstIdx + 2, posy);
80
81                 storeU32(con, 1, dstIdx + 3, c);
82                 storeI32(con, 1, dstIdx + 4, posx + 0x10000);
83                 storeI32(con, 1, dstIdx + 5, posy + dy * 4);
84
85                 storeU32(con, 1, dstIdx + 6, c);
86                 storeI32(con, 1, dstIdx + 7, posx - 0x10000);
87                 storeI32(con, 1, dstIdx + 8, posy + dy * 4);
88                 drawCount ++;
89             } else {
90                 if (dy > 0) {
91                     dy = (-dy) >> 1;
92                 }
93             }
94
95             posx = posx + dx;
96             posy = posy + dy;
97             dy = dy + 0x400;
98             life --;
99
100             //storeI32(con, 2, srcIdx, dx);
101             storeI32(con, 2, srcIdx + 1, dy);
102             storeI32(con, 2, srcIdx + 2, life);
103             storeI32(con, 2, srcIdx + 3, posx);
104             storeI32(con, 2, srcIdx + 4, posy);
105         }
106     }
107
108     drawTriangleArray(con, NAMED_PartBuffer, drawCount);
109     return 1;
110 }