-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMakeRadialTable.c
93 lines (81 loc) · 1.99 KB
/
MakeRadialTable.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
#include <stdio.h>
#include <stdint.h>
#include <math.h>
#define SAMPLES 4
#define WIDTH 106
#define HEIGHT 66
#define BytesPerRow (WIDTH*2)
static uint32_t lookup1[HEIGHT][WIDTH][SAMPLES];
static uint32_t lookup2[HEIGHT][WIDTH][SAMPLES];
static uint32_t lookup3[HEIGHT][WIDTH][SAMPLES];
static uint32_t lookup4[HEIGHT][WIDTH][SAMPLES];
int frame;
int main()
{
for(int y=0;y<2*HEIGHT;y++)
for(int x=0;x<2*WIDTH;x++)
for(int i=0;i<SAMPLES;i++)
{
float fx=x-WIDTH+1,fy=y-HEIGHT+1;
float r=sqrtf(fx*fx+fy*fy);
float dx=fx/r,dy=fy/r;
int ix=-(float)(i+1)*dx*256;
int iy=-(float)(i+1)*dy*256;
int offs=(iy>>8)*BytesPerRow+(ix>>8);
int xblend=(ix&0xff)>>1;
int yblend=(iy&0xff)>>1;
//uint32_t val=(offs&0xffff)|(xblend<<16)|(yblend<<24);
uint32_t val=((offs&0xffff)<<16)|(xblend<<8)|(yblend<<0);
if(y<HEIGHT)
{
if(x<WIDTH) lookup1[HEIGHT-1-y][WIDTH-1-x][i]=val;
else lookup2[HEIGHT-1-y][x-WIDTH][i]=val;
}
else
{
if(x<WIDTH) lookup3[y-HEIGHT][WIDTH-1-x][i]=val;
else lookup4[y-HEIGHT][x-WIDTH][i]=val;
}
}
uint32_t *table;
table=&lookup1[0][0][0];
printf("const uint32_t lookup1[HEIGHT*WIDTH*SAMPLES]=\n");
printf("{");
for(int i=0;i<HEIGHT*WIDTH*SAMPLES;i++)
{
if(i%8==0) printf("\n\t");
printf("0x%08x,",table[i]);
}
printf("\n");
printf("};\n");
table=&lookup2[0][0][0];
printf("const uint32_t lookup2[HEIGHT*WIDTH*SAMPLES]=\n");
printf("{");
for(int i=0;i<HEIGHT*WIDTH*SAMPLES;i++)
{
if(i%8==0) printf("\n\t");
printf("0x%08x,",table[i]);
}
printf("\n");
printf("};\n");
table=&lookup3[0][0][0];
printf("const uint32_t lookup3[HEIGHT*WIDTH*SAMPLES]=\n");
printf("{");
for(int i=0;i<HEIGHT*WIDTH*SAMPLES;i++)
{
if(i%8==0) printf("\n\t");
printf("0x%08x,",table[i]);
}
printf("\n");
printf("};\n");
table=&lookup4[0][0][0];
printf("const uint32_t lookup4[HEIGHT*WIDTH*SAMPLES]=\n");
printf("{");
for(int i=0;i<HEIGHT*WIDTH*SAMPLES;i++)
{
if(i%8==0) printf("\n\t");
printf("0x%08x,",table[i]);
}
printf("\n");
printf("};\n");
}