gpmark
annotate src/rotozoomer.cpp @ 0:5019d031b485
initial commit
author | John Tsiombikas <nuclear@member.fsf.org> |
---|---|
date | Wed, 05 Jun 2013 22:33:37 +0300 |
parents | |
children |
rev | line source |
---|---|
nuclear@0 | 1 #include <math.h> |
nuclear@0 | 2 #include <stdio.h> |
nuclear@0 | 3 #include "main.h" |
nuclear@0 | 4 |
nuclear@0 | 5 unsigned short draculin[128 * 128]; |
nuclear@0 | 6 |
nuclear@0 | 7 void InitRotozoomer() |
nuclear@0 | 8 { |
nuclear@0 | 9 unsigned short dracol[256]; |
nuclear@0 | 10 |
nuclear@0 | 11 FILE *dracdata; |
nuclear@0 | 12 dracdata=fopen("draculf.bin","rb"); |
nuclear@0 | 13 |
nuclear@0 | 14 int x0=fgetc(dracdata); |
nuclear@0 | 15 int y0=fgetc(dracdata); |
nuclear@0 | 16 |
nuclear@0 | 17 int r,g,b; |
nuclear@0 | 18 for (int i=0;i<256;i++) |
nuclear@0 | 19 dracol[i]=(((fgetc(dracdata)>>1)<<11) | (fgetc(dracdata)<<5) | (fgetc(dracdata))>>1); |
nuclear@0 | 20 |
nuclear@0 | 21 for (int y=0;y<y0;y++) |
nuclear@0 | 22 for (int x=0;x<x0;x++) |
nuclear@0 | 23 draculin[(y<<7) + x]=dracol[fgetc(dracdata)]; |
nuclear@0 | 24 |
nuclear@0 | 25 fclose(dracdata); |
nuclear@0 | 26 } |
nuclear@0 | 27 |
nuclear@0 | 28 void RunRotozoomer(float rot, float zoom, unsigned short *vram) |
nuclear@0 | 29 { |
nuclear@0 | 30 int fp = 16; |
nuclear@0 | 31 |
nuclear@0 | 32 int mx = 0, my = 0, mmx = 50<<fp, mmy = 20<<fp; |
nuclear@0 | 33 int dx = (int)((cos(rot/d2r)*zoom) * pow(2,fp)); |
nuclear@0 | 34 int dy = (int)((sin(rot/d2r)*zoom) * pow(2,fp)); |
nuclear@0 | 35 |
nuclear@0 | 36 int x,y; |
nuclear@0 | 37 unsigned short c; |
nuclear@0 | 38 |
nuclear@0 | 39 for (y=0; y<ScreenHeight; y++) |
nuclear@0 | 40 { |
nuclear@0 | 41 mmx = mmx - dy; |
nuclear@0 | 42 mmy = mmy + dx; |
nuclear@0 | 43 mx = mmx; |
nuclear@0 | 44 my = mmy; |
nuclear@0 | 45 for (x=0; x<ScreenWidth; x++) |
nuclear@0 | 46 { |
nuclear@0 | 47 mx = mx + dx; |
nuclear@0 | 48 my = my + dy; |
nuclear@0 | 49 c = draculin[((mx>>fp)&127) + (((my>>fp)&127) << 7)]; |
nuclear@0 | 50 *vram++=c; |
nuclear@0 | 51 } |
nuclear@0 | 52 } |
nuclear@0 | 53 } |
nuclear@0 | 54 |
nuclear@0 | 55 void RunRotozoomerNormal(int ntime, unsigned short *vram) |
nuclear@0 | 56 { |
nuclear@0 | 57 float rot = sin(ntime/478.0f) * 280.0f; |
nuclear@0 | 58 float zoom = sin(ntime/227.0f)*0.75f + 0.76f; |
nuclear@0 | 59 |
nuclear@0 | 60 RunRotozoomer(rot, zoom, vram); |
nuclear@0 | 61 } |
nuclear@0 | 62 |
nuclear@0 | 63 void RunRotozoomerNear(int ntime, unsigned short *vram) |
nuclear@0 | 64 { |
nuclear@0 | 65 float rot = sin(ntime/478.0f) * 280.0f; |
nuclear@0 | 66 float zoom = 0.05f; |
nuclear@0 | 67 |
nuclear@0 | 68 RunRotozoomer(rot, zoom, vram); |
nuclear@0 | 69 } |
nuclear@0 | 70 |
nuclear@0 | 71 void RunRotozoomerFar(int ntime, unsigned short *vram) |
nuclear@0 | 72 { |
nuclear@0 | 73 float rot = sin(ntime/478.0f) * 280.0f; |
nuclear@0 | 74 float zoom = 8.0f; |
nuclear@0 | 75 |
nuclear@0 | 76 RunRotozoomer(rot, zoom, vram); |
nuclear@0 | 77 } |