convert line ends
[canaan.git] / prj / tech / libsrc / r3d / polytest.c
blobabcb48037b9e010ca0f42a52546e1ba6e3ff4db6
1 #include <r3d.h>
2 #include <stdio.h>
3 #include <stdlib.h>
4 #include <fault.h>
6 #include <lg.h>
8 bool r3_start_frame_context(r3s_context *ctxt);
10 double cur_time;
13 // create a block, transform and build the box
14 // level is level of subobjects to go down
15 draw_box(int lev,double s, grs_bitmap *bm)
17 static mxs_vector v[8];
18 static r3s_point p[8];
19 static r3s_phandle vlist[4];
20 int i,j;
22 r3_set_2d_clip(TRUE);
23 r3_set_polygon_context(R3_PL_POLYGON | R3_PL_TEXTURE);
24 r3_set_texture(bm);
26 r3_start_block();
28 // top
29 v[0].z = -s;
30 v[0].y = -s;
31 v[0].x = s;
33 v[1].z = -s;
34 v[1].y = s;
35 v[1].x = s;
37 v[2].z = s;
38 v[2].y = s;
39 v[2].x = s;
41 v[3].z = s;
42 v[3].y = -s;
43 v[3].x = s;
45 for (i=0;i<4;++i) {
46 v[i+4] = v[i];
47 v[i+4].x -= 2*s;
50 r3_transform_block(8,p,v);
52 gr_set_fcolor(1);
54 for (i=0; i < 6; ++i) {
55 switch(i) {
56 case 0: vlist[3] = p+0; vlist[2] = p+1; vlist[1] = p+2; vlist[0] = p+3; break;
57 case 1: vlist[0] = p+4; vlist[1] = p+5; vlist[2] = p+6; vlist[3] = p+7; break;
58 case 2: vlist[3] = p+3; vlist[2] = p+2; vlist[1] = p+6; vlist[0] = p+7; break;
59 case 3: vlist[3] = p+2; vlist[2] = p+1; vlist[1] = p+5; vlist[0] = p+6; break;
60 case 4: vlist[3] = p+1; vlist[2] = p+0; vlist[1] = p+4; vlist[0] = p+5; break;
61 case 5: vlist[3] = p+0; vlist[2] = p+3; vlist[1] = p+7; vlist[0] = p+4; break;
63 vlist[0]->grp.u = vlist[3]->grp.u = 0;
64 vlist[1]->grp.u = vlist[2]->grp.u = 64;
65 vlist[0]->grp.v = vlist[1]->grp.v = 0;
66 vlist[2]->grp.v = vlist[3]->grp.v = 64;
67 r3_draw_tmap(4,vlist,bm);
69 r3_end_block();
71 if (lev>0) {
72 int ax = lev%3;
73 mxs_vector v;
75 mx_unit_vec(&v,ax);
76 mx_scaleeq_vec(&v,s*2);
78 r3_start_object_n(&v,6.28*cur_time/(30.0*s*s),ax);
79 // r3_start_object_x(&v,3.14159/4);
80 draw_box(lev-1,s*.5, bm);
81 r3_end_object();
85 grs_canvas *off_canv;
87 blit()
89 gr_set_canvas(grd_visible_canvas);
90 gr_bitmap(&(off_canv->bm),0,0);
91 gr_set_canvas(off_canv);
94 grs_bitmap *testcore_build_tmap(int shift, int seed)
96 grs_bitmap *us; // where we will go
97 uchar *dummy_tm; // store the damn bitmap
98 int x, y; // loop vars
99 int size, sdown; // pixel size (not exp), shift down
100 int v[4]; // the 4 colors to use
102 if (seed!=0) srand(seed); // setup colors
103 v[0]=rand()&0xff; v[1]=rand()&0xff; v[2]=rand()&0xff; v[3]=rand()&0xff;
105 size=1<<shift; // we are 2n pixels across
106 (shift>=4)?sdown=shift-3:sdown=0; // 8 or fewer checkers on the texture
108 dummy_tm=(uchar *)Malloc(size*size);
109 us=(grs_bitmap *)Malloc(sizeof(grs_bitmap));
110 if ((dummy_tm==NULL)||(us==NULL)) return NULL;
111 for (x=0; x<size; x++)
112 for (y=0; y<size; y++)
113 dummy_tm[(x*size)+y]=x^y;
114 gr_init_bm(us,dummy_tm,BMT_FLAT8,0,size,size);
115 return us;
118 void main(int argc,char **argv)
120 grs_screen *screen;
121 grs_bitmap *bm;
122 r3s_context con;
123 mxs_vector obj;
124 float j;
126 obj.x = 2.0;
127 obj.y = 0;
128 obj.z = 0;
130 // init the mode, make a screen
131 gr_init();
132 gr_set_mode(GRM_640x480x8,TRUE);
133 screen = gr_alloc_screen(grd_mode_info[grd_mode].w,grd_mode_info[grd_mode].h);
134 gr_set_screen(screen);
136 ex_startup(EXM_DIVIDE_ERR);
138 r3_init_defaults(-1,-1,-1,-1);
140 off_canv = gr_alloc_canvas(BMT_FLAT8,640,480);
141 gr_set_canvas(off_canv);
143 // get us our context
144 r3_alloc_context(&con,0);
146 //set its ass
147 r3_start_frame_context(&con);
149 bm = testcore_build_tmap(6, 0);
151 // set camera
153 // need to add to matrix.h rotate transform
155 for (j=0;j<100;j+=.1) {
156 cur_time=j;
158 obj.x = 1.0 + atoi(argv[1])/2 + (float)j/10+2.0;
159 obj.y = j>30?(float)(j-30)/10:0;
160 obj.z = j>60?(float)(j-60)/10:0;
162 if (j<30) {
163 r3_start_object_z(&obj,6.28*(float)(j)/30.0);
164 } else if (j<60) {
165 r3_start_object_y(&obj,6.28*(float)(j)/30.0);
166 } else {
167 r3_start_object_x(&obj,6.28*(float)(j)/30.0);
169 // set the object frame of reference
170 // r3_start_object(&obj);
174 // draw box
175 gr_clear(0);
177 draw_box(atoi(argv[1]),1.0, bm);
179 blit();
182 r3_end_object();
186 gr_close();