1 extern "C"
2 {
3 
4 #include "3dc.h"
5 #include "module.h"
6 #include "inline.h"
7 #include "gammacontrol.h"
8 
9 static int ActualGammaSetting;
10 int RequestedGammaSetting;
11 
12 unsigned char GammaValues[256];
13 
InitialiseGammaSettings(int gamma)14 void InitialiseGammaSettings(int gamma)
15 {
16 	ActualGammaSetting = gamma+1;
17 	RequestedGammaSetting = gamma;
18 	UpdateGammaSettings();
19 }
20 
UpdateGammaSettings(void)21 void UpdateGammaSettings(void)
22 {
23 	if (RequestedGammaSetting==ActualGammaSetting) return;
24 
25 	for (int i=0; i<=255; i++)
26 	{
27 		int u = ((i*65536)/255);
28 		int m = MUL_FIXED(u,u);
29 		int l = MUL_FIXED(2*u,ONE_FIXED-u);
30 
31 		int a;
32 
33 		a = m+MUL_FIXED(RequestedGammaSetting*256,l);
34 
35 
36 		m = MUL_FIXED(a,a);
37 		l = MUL_FIXED(2*a,ONE_FIXED-a);
38 
39 		a = m/256+MUL_FIXED(RequestedGammaSetting,l);
40 
41 		if (a<0) a=0;
42 		if (a>255) a=255;
43 
44 		GammaValues[i]=a;
45 	}
46 
47 	ActualGammaSetting=RequestedGammaSetting;
48 
49 }
50 
51 };
52