Hi there.
I’ve tried to use the linear gradients with the reference implementation, but somehow I don’t get them working.
The strange thing is: As soon as I comment out the vgSetParameterfv (paint, VG_PAINT_COLOR_RAMP_STOPS call I have valid results using the default ramp, but if I try to define my own I either get completely wrong output or nothing at all (depends on the spread mode).
Could someone please have a look? (code assumes no mask/scissoring or other things modified from the context creation defaults)
void gradient_test (void)
{
VGfloat color[4] =
{
1,1,1,1 // opaque white
};
VGfloat stops[10] =
{
0, 1, 0, 0, 0, // opaque red at start
1, 1, 1, 1, 1, // opaque white at end
};
VGfloat gradient[4] =
{
100, 100, 200, 200,
};
VGImage img = vgCreateImage (VG_sL_8, 256, 256, VG_IMAGE_QUALITY_NONANTIALIASED);
vgSetfv (VG_CLEAR_COLOR, 4, color);
vgClearImage (img, 0,0,256,256);
VGPaint paint = vgCreatePaint();
vgSetPaint (paint, VG_FILL_PATH);
vgSetParameteri (paint, VG_PAINT_TYPE, VG_PAINT_TYPE_LINEAR_GRADIENT);
vgSetParameteri (paint, VG_PAINT_COLOR_RAMP_SPREAD_MODE, VG_COLOR_RAMP_SPREAD_REPEAT);
vgSetParameterfv (paint, VG_PAINT_COLOR_RAMP_STOPS, 10, stops);
vgSetParameterfv (paint, VG_PAINT_LINEAR_GRADIENT, 4, gradient);
vgSeti (VG_BLEND_MODE, VG_BLEND_SRC_OVER);
vgSeti (VG_IMAGE_MODE, VG_DRAW_IMAGE_MULTIPLY);
vgSeti (VG_MATRIX_MODE, VG_MATRIX_IMAGE_USER_TO_SURFACE);
vgLoadIdentity();
vgTranslate (10,10);
vgDrawImage (img);
vgDestroyImage (img);
vgDestroyPaint (paint);
}