hypercube-0.3.1
[polytopiary:hypercube.git] / test-fillpoly.c
1 /* test fillpoly */
2
3 #include <stdlib.h>
4 #include <stdio.h>
5 #include <vga.h>
6 #include <vgagl.h>
7
8 #include "fixed.h"
9 #include "geometry.h"
10 #include "hull2d.h"
11 #include "r2vga.h"
12 #include "raster.h"
13 #include "stack.h"
14
15 #define N (8)
16
17 int main(void) {
18
19     GraphicsContext *s_phys;
20     GraphicsContext *s_virt;
21
22     int n;
23     stack s1, s2;
24     vector2 p[N];
25     raster rb;
26
27     printf("Initialising fixed point...\n");
28     f_init();
29     printf("Creating points...\n");
30     s_clear(&s1);
31     s_clear(&s2);
32     for (n = 0; n < N; n++) {
33         p[n][0] = rand()%(320-20)+10;
34         p[n][1] = rand()%(200-20)+10;
35         s_push(&s1, &(p[n]));
36     }
37     printf("Calculating hull...\n");
38     hull2d(&s1, &s2);
39     printf("Rendering...\n");
40
41     vga_init();
42     vga_setmode(G320x200x256);
43
44     gl_setcontextvga(G320x200x256);
45     s_phys = gl_allocatecontext();
46     gl_getcontext(s_phys);
47     gl_setcontextvgavirtual(G320x200x256);
48     s_virt = gl_allocatecontext();
49     gl_getcontext(s_virt);
50
51     gl_setcontext(s_virt);
52
53     for (n = 0; n < 256; n++) {
54         gl_setpalettecolor(n, rand()%64, rand()%64, rand()%64);
55     }
56
57     for (n = 0; n < N; n++) {
58         gl_circle(p[n][0], p[n][1], 5, rand()%255+1);
59     }
60     for (n = 0; n < s_size(&s2); n++) {
61         vector2 *p0 = (vector2 *) s_at(&s2, n-1);
62         vector2 *p1 = (vector2 *) s_at(&s2, n);
63         gl_line((*p0)[0], (*p0)[1], (*p1)[0], (*p1)[1], rand()%255+1);
64     }
65
66     gl_copyscreen(s_phys);
67
68     vga_getch();
69
70     r_fillpoly(&rb, &s2, 45);
71
72     r2vga(&rb, 0, 0, 320, 200, 0, 0);
73
74     gl_copyscreen(s_phys);
75
76     vga_getch();
77
78     gl_clearscreen(0);
79     vga_setmode(TEXT);
80     return (EXIT_SUCCESS);
81 }
82
83 /* EOF */
84