Merge branch '7.8'
[mesa.git] / progs / egl / openvg / trivial / star-oddeven.c
1 #include "eglcommon.h"
2
3 #include <VG/openvg.h>
4
5 const VGfloat white_color[4] = {1.0, 1.0, 1.0, 1.0};
6 const VGfloat green_color[4] = {0.0, 1.0, 0.0, 0.8};
7 const VGfloat black_color[4] = {0.0, 0.0, 0.0, 1.0};
8
9 VGPath path;
10 VGPaint fill;
11
12
13 static void draw_point(VGfloat x, VGfloat y)
14 {
15
16 static const VGubyte cmds[] = {VG_MOVE_TO_ABS, VG_LINE_TO_ABS, VG_LINE_TO_ABS,
17 VG_LINE_TO_ABS, VG_CLOSE_PATH};
18 const VGfloat coords[] = { x - 2, y - 2,
19 x + 2, y - 2,
20 x + 2, y + 2,
21 x - 2, y + 2};
22 VGPath path;
23 VGPaint fill;
24
25 path = vgCreatePath(VG_PATH_FORMAT_STANDARD, VG_PATH_DATATYPE_F, 1, 0, 0, 0,
26 VG_PATH_CAPABILITY_ALL);
27 vgAppendPathData(path, 5, cmds, coords);
28
29 fill = vgCreatePaint();
30 vgSetParameterfv(fill, VG_PAINT_COLOR, 4, black_color);
31 vgSetPaint(fill, VG_FILL_PATH);
32
33 vgDrawPath(path, VG_FILL_PATH);
34
35 vgDestroyPath(path);
36 vgDestroyPaint(fill);
37 }
38
39 static void draw_marks(VGPath path)
40 {
41 VGfloat point[2], tangent[2];
42 int i = 0;
43
44 for (i = 0; i < 1300; i += 50) {
45 vgPointAlongPath(path, 0, 6, i,
46 point + 0, point + 1,
47 tangent + 0, tangent + 1);
48 draw_point(point[0], point[1]);
49 }
50 }
51
52 static void
53 init(void)
54 {
55 static const VGubyte cmds[6] = {VG_MOVE_TO_ABS, VG_LINE_TO_ABS, VG_LINE_TO_ABS, VG_LINE_TO_ABS,
56 VG_LINE_TO_ABS, VG_CLOSE_PATH};
57 static const VGfloat coords[] = { 0, 200,
58 300, 200,
59 50, 0,
60 150, 300,
61 250, 0};
62 path = vgCreatePath(VG_PATH_FORMAT_STANDARD, VG_PATH_DATATYPE_F, 1, 0, 0, 0,
63 VG_PATH_CAPABILITY_ALL);
64 vgAppendPathData(path, 6, cmds, coords);
65
66 fill = vgCreatePaint();
67 vgSetParameterfv(fill, VG_PAINT_COLOR, 4, green_color);
68 vgSetPaint(fill, VG_FILL_PATH);
69
70 vgSetfv(VG_CLEAR_COLOR, 4, white_color);
71 }
72
73 /* new window size or exposure */
74 static void
75 reshape(int w, int h)
76 {
77 vgLoadIdentity();
78 }
79
80 static void
81 draw(void)
82 {
83 VGfloat point[2], tangent[2];
84 int i = 0;
85
86 vgClear(0, 0, window_width(), window_height());
87
88 vgSetPaint(fill, VG_FILL_PATH);
89 vgDrawPath(path, VG_FILL_PATH);
90
91 draw_marks(path);
92
93
94 vgFlush();
95 }
96
97
98 int main(int argc, char **argv)
99 {
100 return run(argc, argv, init, reshape,
101 draw, 0);
102 }