texenvprogram: fix for ARB_draw_buffers.
[mesa.git] / progs / openvg / trivial / dash.c
1 #include "eglcommon.h"
2
3 #include <VG/openvg.h>
4 #include <X11/keysym.h>
5 #include <stdio.h>
6
7 const VGfloat white_color[4] = {1.0, 1.0, 1.0, 1.0};
8 const VGfloat color[4] = {0.4, 0.1, 1.0, 1.0};
9
10 VGPath path;
11 VGPaint fill;
12
13 VGint cap_style = VG_CAP_BUTT;
14
15 static void
16 init(void)
17 {
18 static const VGubyte cmds[] = {VG_MOVE_TO_ABS,
19 VG_LINE_TO_ABS,
20 VG_LINE_TO_ABS
21 };
22 #if 1
23 static const VGfloat coords[] = {100, 100, 150, 100,
24 150, 200
25 };
26 #else
27 static const VGfloat coords[] = {100, 20, 100, 220,
28 };
29 #endif
30 VGfloat dash_pattern[2] = { 20.f, 20.f };
31 path = vgCreatePath(VG_PATH_FORMAT_STANDARD, VG_PATH_DATATYPE_F, 1, 0, 0, 0,
32 VG_PATH_CAPABILITY_APPEND_TO);
33 vgAppendPathData(path, 3, cmds, coords);
34
35 fill = vgCreatePaint();
36 vgSetParameterfv(fill, VG_PAINT_COLOR, 4, color);
37 vgSetPaint(fill, VG_FILL_PATH);
38
39 vgSetfv(VG_CLEAR_COLOR, 4, white_color);
40 vgSetf(VG_STROKE_LINE_WIDTH, 20);
41 vgSeti(VG_STROKE_CAP_STYLE, cap_style);
42 vgSeti(VG_STROKE_JOIN_STYLE, VG_JOIN_ROUND);
43 vgSetfv(VG_STROKE_DASH_PATTERN, 2, dash_pattern);
44 vgSetf(VG_STROKE_DASH_PHASE, 0.0f);
45 }
46
47 /* new window size or exposure */
48 static void
49 reshape(int w, int h)
50 {
51 vgLoadIdentity();
52 }
53
54 static void
55 draw(void)
56 {
57 vgClear(0, 0, window_width(), window_height());
58 vgDrawPath(path, VG_STROKE_PATH);
59
60 vgFlush();
61 }
62
63 static int key_press(unsigned key)
64 {
65 switch(key) {
66 case XK_c:
67 case XK_C:
68 ++cap_style;
69 if (cap_style > VG_CAP_SQUARE)
70 cap_style = VG_CAP_BUTT;
71 switch(cap_style) {
72 case VG_CAP_BUTT:
73 fprintf(stderr, "Cap style 'butt'\n");
74 break;
75 case VG_CAP_ROUND:
76 fprintf(stderr, "Cap style 'round'\n");
77 break;
78 case VG_CAP_SQUARE:
79 fprintf(stderr, "Cap style 'square'\n");
80 break;
81 }
82 vgSeti(VG_STROKE_CAP_STYLE, cap_style);
83 break;
84 default:
85 break;
86 }
87
88 return VG_TRUE;
89 }
90
91 int main(int argc, char **argv)
92 {
93 return run(argc, argv, init, reshape,
94 draw, key_press);
95 }