140 lines
3.2 KiB
C
140 lines
3.2 KiB
C
#include "eglcommon.h"
|
|
|
|
#include <VG/openvg.h>
|
|
#include <math.h>
|
|
|
|
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);
|
|
}
|