#include "eglcommon.h" #include #include const VGfloat clear_color[4] = {1.0, 1.0, 1.0, 1.0}; const VGfloat color[4] = {1.0, 1.0, 1.0, 0.5}; VGPath vgPath; static void ellipse(VGPath vgPath, VGfloat rx, VGfloat ry, VGfloat angle) { static const VGubyte cmd[] = { VG_MOVE_TO_ABS, VG_SCCWARC_TO_REL, VG_SCCWARC_TO_REL, VG_CLOSE_PATH }; VGfloat val[12]; VGfloat c = cos(angle) * rx; VGfloat s = sin(angle) * rx; val[0] = c; val[1] = s; val[2] = rx; val[3] = ry; val[4] = angle; val[5] = -2.0f * c; val[6] = -2.0f * s; val[7] = rx; val[8] = ry; val[9] = angle; val[10] = 2.0f * c; val[11] = 2.0f * s; vgClearPath(vgPath, VG_PATH_CAPABILITY_ALL); vgAppendPathData(vgPath, sizeof(cmd), cmd, val); vgDrawPath(vgPath, VG_FILL_PATH | VG_STROKE_PATH); } static void init(void) { VGPaint vgPaint; vgSetfv(VG_CLEAR_COLOR, 4, clear_color); vgPath = vgCreatePath(VG_PATH_FORMAT_STANDARD, VG_PATH_DATATYPE_F, 1.0f, 0.0f, 0, 0, VG_PATH_CAPABILITY_ALL); vgPaint = vgCreatePaint(); vgSetParameteri(vgPaint, VG_PAINT_TYPE, VG_PAINT_TYPE_COLOR); vgSetColor(vgPaint, 0x00ff00ff); vgSetPaint(vgPaint, VG_FILL_PATH); vgSeti(VG_RENDERING_QUALITY, VG_RENDERING_QUALITY_NONANTIALIASED); vgSeti(VG_BLEND_MODE, VG_BLEND_SRC_OVER); vgSetf(VG_STROKE_LINE_WIDTH, 2.0f); vgSeti(VG_STROKE_CAP_STYLE, VG_CAP_SQUARE); vgSeti(VG_STROKE_JOIN_STYLE, VG_JOIN_MITER); vgSetf(VG_STROKE_MITER_LIMIT, 4.0f); vgSeti(VG_MATRIX_MODE, VG_MATRIX_PATH_USER_TO_SURFACE); } /* new window size or exposure */ static void reshape(int w, int h) { } static void draw(void) { vgClear(0, 0, window_width(), window_height()); #if 0 vgLoadIdentity(); vgTranslate(40.0f, 24.0f); vgScale(0.61804f, 0.61804f); vgShear(-1.0f, 0.0f); vgDrawPath(vgPath, VG_FILL_PATH | VG_STROKE_PATH); #else /* row 1, col 1: Identity transform. */ vgLoadIdentity(); vgTranslate(8.0f, 8.0f); ellipse(vgPath, 4.0f, 4.0f, 0.0f); /* row 1, col 2: 10^3 horizontal squeeze. */ vgLoadIdentity(); vgTranslate(24.0f, 8.0f); vgScale(1.0e-3f, 1.0f); ellipse(vgPath, 4.0e3f, 4.0f, 0.0f); /* row 1, col 3: 10^6 horizontal squeeze. */ vgLoadIdentity(); vgTranslate(40.0f, 8.0f); vgScale(1.0e-6f, 1.0f); ellipse(vgPath, 4.0e6f, 4.0f, 0.0f); /* row 1, col 4: 10^9 horizontal squeeze. */ vgLoadIdentity(); vgTranslate(56.0f, 8.0f); vgScale(1.0e-9f, 1.0f); ellipse(vgPath, 4.0e9f, 4.0f, 0.0f); /* row 2, col 1: 10^3 vertical squeeze. */ vgLoadIdentity(); vgTranslate(8.0f, 24.0f); vgScale(1.0f, 1.0e-3f); ellipse(vgPath, 4.0f, 4.0e3f, 0.0f); /* row 2, col 2: Shear 0. */ vgLoadIdentity(); vgTranslate(24.0f, 24.0f); vgShear(0.0f, 0.0f); ellipse(vgPath, 4.0f, 4.0f, 0.0f); /* row 2, col 3: Horizontal shear -1. */ vgLoadIdentity(); vgTranslate(40.0f, 24.0f); vgScale(0.61804f, 0.61804f); vgShear(-1.0f, 0.0f); ellipse(vgPath, 10.47213f, 4.0f, 31.717f); #endif vgFlush(); } int main(int argc, char **argv) { set_window_size(64, 64); return run(argc, argv, init, reshape, draw, 0); }