1462d11b880cba72584c135397c0a82618ab63217Jason Sams// Fountain test script 2462d11b880cba72584c135397c0a82618ab63217Jason Sams 3462d11b880cba72584c135397c0a82618ab63217Jason Sams#pragma version(1) 4462d11b880cba72584c135397c0a82618ab63217Jason Sams#pragma stateVertex(orthoWindow) 5462d11b880cba72584c135397c0a82618ab63217Jason Sams#pragma stateRaster(flat) 6462d11b880cba72584c135397c0a82618ab63217Jason Sams#pragma stateFragment(PgmFragBackground) 75235cf3f41cfcfe39c7072fddf1ead52db31292dJason Sams#pragma stateStore(MyBlend) 8462d11b880cba72584c135397c0a82618ab63217Jason Sams 9462d11b880cba72584c135397c0a82618ab63217Jason Sams 10462d11b880cba72584c135397c0a82618ab63217Jason Samsint main(void* con, int ft, int launchID) { 11462d11b880cba72584c135397c0a82618ab63217Jason Sams int count, touch, x, y, rate, maxLife, lifeShift; 12462d11b880cba72584c135397c0a82618ab63217Jason Sams int life; 13462d11b880cba72584c135397c0a82618ab63217Jason Sams int ct, ct2; 14462d11b880cba72584c135397c0a82618ab63217Jason Sams int newPart; 15462d11b880cba72584c135397c0a82618ab63217Jason Sams int drawCount; 16462d11b880cba72584c135397c0a82618ab63217Jason Sams int dx, dy, idx; 17462d11b880cba72584c135397c0a82618ab63217Jason Sams int posx,posy; 18462d11b880cba72584c135397c0a82618ab63217Jason Sams int c; 19462d11b880cba72584c135397c0a82618ab63217Jason Sams int srcIdx; 20462d11b880cba72584c135397c0a82618ab63217Jason Sams int dstIdx; 21462d11b880cba72584c135397c0a82618ab63217Jason Sams 22462d11b880cba72584c135397c0a82618ab63217Jason Sams count = loadI32(con, 0, 1); 23462d11b880cba72584c135397c0a82618ab63217Jason Sams touch = loadI32(con, 0, 2); 24462d11b880cba72584c135397c0a82618ab63217Jason Sams x = loadI32(con, 0, 3); 25462d11b880cba72584c135397c0a82618ab63217Jason Sams y = loadI32(con, 0, 4); 26462d11b880cba72584c135397c0a82618ab63217Jason Sams 27462d11b880cba72584c135397c0a82618ab63217Jason Sams rate = 4; 28462d11b880cba72584c135397c0a82618ab63217Jason Sams maxLife = (count / rate) - 1; 29462d11b880cba72584c135397c0a82618ab63217Jason Sams lifeShift = 0; 30462d11b880cba72584c135397c0a82618ab63217Jason Sams { 31462d11b880cba72584c135397c0a82618ab63217Jason Sams life = maxLife; 32462d11b880cba72584c135397c0a82618ab63217Jason Sams while (life > 255) { 33462d11b880cba72584c135397c0a82618ab63217Jason Sams life = life >> 1; 34462d11b880cba72584c135397c0a82618ab63217Jason Sams lifeShift ++; 35462d11b880cba72584c135397c0a82618ab63217Jason Sams } 36462d11b880cba72584c135397c0a82618ab63217Jason Sams } 37462d11b880cba72584c135397c0a82618ab63217Jason Sams 38462d11b880cba72584c135397c0a82618ab63217Jason Sams drawRect(con, 0, 256, 0, 512); 39462d11b880cba72584c135397c0a82618ab63217Jason Sams contextBindProgramFragment(con, NAMED_PgmFragParts); 40462d11b880cba72584c135397c0a82618ab63217Jason Sams 41462d11b880cba72584c135397c0a82618ab63217Jason Sams if (touch) { 42462d11b880cba72584c135397c0a82618ab63217Jason Sams newPart = loadI32(con, 2, 0); 43462d11b880cba72584c135397c0a82618ab63217Jason Sams for (ct2=0; ct2<rate; ct2++) { 44462d11b880cba72584c135397c0a82618ab63217Jason Sams dx = scriptRand(con, 0x10000) - 0x8000; 45462d11b880cba72584c135397c0a82618ab63217Jason Sams dy = scriptRand(con, 0x10000) - 0x8000; 46462d11b880cba72584c135397c0a82618ab63217Jason Sams 47462d11b880cba72584c135397c0a82618ab63217Jason Sams idx = newPart * 5 + 1; 48462d11b880cba72584c135397c0a82618ab63217Jason Sams storeI32(con, 2, idx, dx); 49462d11b880cba72584c135397c0a82618ab63217Jason Sams storeI32(con, 2, idx + 1, dy); 50462d11b880cba72584c135397c0a82618ab63217Jason Sams storeI32(con, 2, idx + 2, maxLife); 51462d11b880cba72584c135397c0a82618ab63217Jason Sams storeI32(con, 2, idx + 3, x << 16); 52462d11b880cba72584c135397c0a82618ab63217Jason Sams storeI32(con, 2, idx + 4, y << 16); 53462d11b880cba72584c135397c0a82618ab63217Jason Sams 54462d11b880cba72584c135397c0a82618ab63217Jason Sams newPart++; 55462d11b880cba72584c135397c0a82618ab63217Jason Sams if (newPart >= count) { 56462d11b880cba72584c135397c0a82618ab63217Jason Sams newPart = 0; 57462d11b880cba72584c135397c0a82618ab63217Jason Sams } 58462d11b880cba72584c135397c0a82618ab63217Jason Sams } 59462d11b880cba72584c135397c0a82618ab63217Jason Sams storeI32(con, 2, 0, newPart); 60462d11b880cba72584c135397c0a82618ab63217Jason Sams } 61462d11b880cba72584c135397c0a82618ab63217Jason Sams 62462d11b880cba72584c135397c0a82618ab63217Jason Sams drawCount = 0; 63462d11b880cba72584c135397c0a82618ab63217Jason Sams for (ct=0; ct < count; ct++) { 64462d11b880cba72584c135397c0a82618ab63217Jason Sams srcIdx = ct * 5 + 1; 65462d11b880cba72584c135397c0a82618ab63217Jason Sams 66462d11b880cba72584c135397c0a82618ab63217Jason Sams dx = loadI32(con, 2, srcIdx); 67462d11b880cba72584c135397c0a82618ab63217Jason Sams dy = loadI32(con, 2, srcIdx + 1); 68462d11b880cba72584c135397c0a82618ab63217Jason Sams life = loadI32(con, 2, srcIdx + 2); 69462d11b880cba72584c135397c0a82618ab63217Jason Sams posx = loadI32(con, 2, srcIdx + 3); 70462d11b880cba72584c135397c0a82618ab63217Jason Sams posy = loadI32(con, 2, srcIdx + 4); 71462d11b880cba72584c135397c0a82618ab63217Jason Sams 72462d11b880cba72584c135397c0a82618ab63217Jason Sams if (life) { 73462d11b880cba72584c135397c0a82618ab63217Jason Sams if (posy < (480 << 16)) { 74462d11b880cba72584c135397c0a82618ab63217Jason Sams dstIdx = drawCount * 9; 75462d11b880cba72584c135397c0a82618ab63217Jason Sams c = 0xffafcf | ((life >> lifeShift) << 24); 76462d11b880cba72584c135397c0a82618ab63217Jason Sams 77462d11b880cba72584c135397c0a82618ab63217Jason Sams storeU32(con, 1, dstIdx, c); 78462d11b880cba72584c135397c0a82618ab63217Jason Sams storeI32(con, 1, dstIdx + 1, posx); 79462d11b880cba72584c135397c0a82618ab63217Jason Sams storeI32(con, 1, dstIdx + 2, posy); 80462d11b880cba72584c135397c0a82618ab63217Jason Sams 81462d11b880cba72584c135397c0a82618ab63217Jason Sams storeU32(con, 1, dstIdx + 3, c); 82462d11b880cba72584c135397c0a82618ab63217Jason Sams storeI32(con, 1, dstIdx + 4, posx + 0x10000); 83462d11b880cba72584c135397c0a82618ab63217Jason Sams storeI32(con, 1, dstIdx + 5, posy + dy * 4); 84462d11b880cba72584c135397c0a82618ab63217Jason Sams 85462d11b880cba72584c135397c0a82618ab63217Jason Sams storeU32(con, 1, dstIdx + 6, c); 86462d11b880cba72584c135397c0a82618ab63217Jason Sams storeI32(con, 1, dstIdx + 7, posx - 0x10000); 87462d11b880cba72584c135397c0a82618ab63217Jason Sams storeI32(con, 1, dstIdx + 8, posy + dy * 4); 88462d11b880cba72584c135397c0a82618ab63217Jason Sams drawCount ++; 89462d11b880cba72584c135397c0a82618ab63217Jason Sams } else { 90462d11b880cba72584c135397c0a82618ab63217Jason Sams if (dy > 0) { 91462d11b880cba72584c135397c0a82618ab63217Jason Sams dy = (-dy) >> 1; 92462d11b880cba72584c135397c0a82618ab63217Jason Sams } 93462d11b880cba72584c135397c0a82618ab63217Jason Sams } 94462d11b880cba72584c135397c0a82618ab63217Jason Sams 95462d11b880cba72584c135397c0a82618ab63217Jason Sams posx = posx + dx; 96462d11b880cba72584c135397c0a82618ab63217Jason Sams posy = posy + dy; 97462d11b880cba72584c135397c0a82618ab63217Jason Sams dy = dy + 0x400; 98462d11b880cba72584c135397c0a82618ab63217Jason Sams life --; 99462d11b880cba72584c135397c0a82618ab63217Jason Sams 100462d11b880cba72584c135397c0a82618ab63217Jason Sams //storeI32(con, 2, srcIdx, dx); 101462d11b880cba72584c135397c0a82618ab63217Jason Sams storeI32(con, 2, srcIdx + 1, dy); 102462d11b880cba72584c135397c0a82618ab63217Jason Sams storeI32(con, 2, srcIdx + 2, life); 103462d11b880cba72584c135397c0a82618ab63217Jason Sams storeI32(con, 2, srcIdx + 3, posx); 104462d11b880cba72584c135397c0a82618ab63217Jason Sams storeI32(con, 2, srcIdx + 4, posy); 105462d11b880cba72584c135397c0a82618ab63217Jason Sams } 106462d11b880cba72584c135397c0a82618ab63217Jason Sams } 107462d11b880cba72584c135397c0a82618ab63217Jason Sams 108462d11b880cba72584c135397c0a82618ab63217Jason Sams drawTriangleArray(con, NAMED_PartBuffer, drawCount); 109462d11b880cba72584c135397c0a82618ab63217Jason Sams return 1; 110462d11b880cba72584c135397c0a82618ab63217Jason Sams} 111