gpmark

diff src/plasma.cpp @ 0:5019d031b485

initial commit
author John Tsiombikas <nuclear@member.fsf.org>
date Wed, 05 Jun 2013 22:33:37 +0300
parents
children
line diff
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/src/plasma.cpp	Wed Jun 05 22:33:37 2013 +0300
     1.3 @@ -0,0 +1,41 @@
     1.4 +#include <math.h>
     1.5 +#include "main.h"
     1.6 +
     1.7 +int fsin1[4096],fsin2[4096],fsin3[4096];
     1.8 +unsigned short rgb[256];
     1.9 +
    1.10 +void InitPlasma()
    1.11 +{
    1.12 +	float l = 4.0;
    1.13 +	for (int i=0; i<4096; i++)
    1.14 +	{
    1.15 +		fsin1[i] = (int)(sin(i/(l*15.0))*96.0+96.0);
    1.16 +		fsin2[i] = (int)(sin(i/(l*20.0))*112.0+112.0);
    1.17 +		fsin3[i] = (int)(sin(i/(l*35.0))*128.0+128.0);
    1.18 +	}
    1.19 +
    1.20 +	for (int i=0; i<64; i++)
    1.21 +	{
    1.22 +        rgb[i] = ((i>>1)<<11) | ((i>>1)<<5);
    1.23 +	    rgb[64+i] = ((31-(i>>2))<<11) | (((i>>1)+32)<<5) | (i>>1);
    1.24 +	    rgb[128+i] = ((16-(i>>2))<<11) | ((63-(i>>1))<<5) | 31;
    1.25 +	    rgb[192+i] = ((31-(i>>1))<<5) | (31-(i>>1));
    1.26 +	}
    1.27 +}
    1.28 +
    1.29 +void RunPlasma(int ntime, unsigned short *vram)
    1.30 +{
    1.31 + 	int k1 = ntime;
    1.32 +    int k3 = 3 * ntime;
    1.33 + 	if (k1>503) k1 = k1-(k1/503)*503;
    1.34 + 	if (k3>880) k3 = k3-(k3/880)*880;
    1.35 +
    1.36 +	for (int y=0; y<ScreenHeight; y++)
    1.37 +	{
    1.38 +		for (int x=0; x<ScreenWidth; x++)
    1.39 +		{
    1.40 +			unsigned char c = fsin1[x] + fsin2[y+k1] + fsin3[x+y+k3];
    1.41 +			*vram++ = rgb[c];
    1.42 +		}
    1.43 +	}
    1.44 +}