st/mesa: fix incorrect RowStride computation
[mesa.git] / progs / openvg / trivial / mask4.c
1 #include "eglcommon.h"
2
3 #include <VG/openvg.h>
4 #include <VG/vgu.h>
5 #include <stdio.h>
6 #include <math.h>
7 #include <stdlib.h>
8
9 #include <X11/keysym.h>
10
11 //VGint x_pos = -10, y_pos = -10;
12 VGint x_pos = 0, y_pos = 4;
13 VGint img_width = 120, img_height = 120;
14
15 static void RectToPath(VGPath path, VGfloat x, VGfloat y, VGfloat width, VGfloat height)
16 {
17 static const VGubyte segments[5] = {VG_MOVE_TO_ABS,
18 VG_HLINE_TO_ABS,
19 VG_VLINE_TO_ABS,
20 VG_HLINE_TO_ABS,
21 VG_CLOSE_PATH};
22 VGfloat data[5];
23
24 data[0] = x;
25 data[1] = y;
26 data[2] = x + width;
27 data[3] = y + height;
28 data[4] = x;
29
30 vgAppendPathData(path, 5, segments, data);
31 }
32
33 static void
34 init(void)
35 {
36 }
37
38 /* new window size or exposure */
39 static void
40 reshape(int w, int h)
41 {
42 }
43
44 int key_press(unsigned key)
45 {
46 switch(key) {
47 case XK_Right:
48 x_pos +=1;
49 break;
50 case XK_Left:
51 x_pos -=1;
52 break;
53 case XK_Up:
54 y_pos +=1;
55 break;
56 case XK_Down:
57 y_pos -=1;
58 break;
59 case 'a':
60 img_width -= 5;
61 img_height -= 5;
62 break;
63 case 's':
64 img_width += 5;
65 img_height += 5;
66 break;
67 default:
68 break;
69 }
70 fprintf(stderr, "Posi = %dx%d\n", x_pos, y_pos);
71 fprintf(stderr, "Size = %dx%d\n", img_width, img_height);
72 return VG_FALSE;
73 }
74
75 static void
76 draw(void)
77 {
78 VGint WINDSIZEX = window_width();
79 VGint WINDSIZEY = window_height();
80
81 VGPaint fill;
82 VGPath box;
83 VGfloat color[4] = {1.f, 0.f, 0.f, 1.f};
84 VGfloat bgCol[4] = {0.7f, 0.7f, 0.7f, 1.0f};
85 VGfloat transCol[4] = {0.f, 0.f, 0.f, 0.f};
86 VGImage image = vgCreateImage(VG_sRGBA_8888, img_width, img_height,
87 VG_IMAGE_QUALITY_NONANTIALIASED);
88
89 /* Background clear */
90 fill = vgCreatePaint();
91 vgSetParameterfv(fill, VG_PAINT_COLOR, 4, color);
92 vgSetPaint(fill, VG_FILL_PATH);
93
94 box = vgCreatePath(VG_PATH_FORMAT_STANDARD, VG_PATH_DATATYPE_F,
95 1, 0, 0, 0, VG_PATH_CAPABILITY_ALL);
96 /* Rectangle to cover completely 16x16 pixel area. */
97 RectToPath(box, 0, 0, 64, 64);
98
99 vgSetfv(VG_CLEAR_COLOR, 4, transCol);
100 vgClearImage(image, 0, 0, img_width, img_height);
101 vgSetfv(VG_CLEAR_COLOR, 4, color);
102 vgClearImage(image, 10, 10, 12, 12);
103 //vgImageSubData(image, pukki_64x64_data, pukki_64x64_stride,
104 // VG_sRGBA_8888, 0, 0, 32, 32);
105 vgSeti(VG_MASKING, VG_TRUE);
106 vgLoadIdentity();
107
108 vgSetfv(VG_CLEAR_COLOR, 4, bgCol);
109 vgClear(0, 0, WINDSIZEX, WINDSIZEY);
110
111
112 vgMask(image, VG_FILL_MASK, 0, 0, window_width(), window_height());
113 vgMask(image, VG_SET_MASK, x_pos, y_pos, 100, 100);
114
115 vgDrawPath(box, VG_FILL_PATH);
116
117 //vgSeti(VG_MATRIX_MODE, VG_MATRIX_IMAGE_USER_TO_SURFACE);
118 //vgTranslate(-10, -10);
119 //vgDrawImage(image);
120
121
122 vgDestroyPaint(fill);
123 vgDestroyPath(box);
124 }
125
126
127 int main(int argc, char **argv)
128 {
129 set_window_size(64, 64);
130 return run(argc, argv, init, reshape,
131 draw, key_press);
132 }