PDA

View Full Version : What's wrong with this code?



Nils Pipenbrinck
03-21-2006, 08:46 AM
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);
}

Nils Pipenbrinck
03-21-2006, 08:53 AM
nevermind - I found it - my rampstop-definition wasn't correct.