59 lines
1.6 KiB
C
59 lines
1.6 KiB
C
#include "utils.h"
|
|
#include <stdio.h>
|
|
|
|
int
|
|
main ()
|
|
{
|
|
static const pixman_point_fixed_t inner = { 0x0000, 0x0000 };
|
|
static const pixman_point_fixed_t outer = { 0x0000, 0x0000 };
|
|
static const pixman_fixed_t r_inner = 0;
|
|
static const pixman_fixed_t r_outer = 64 << 16;
|
|
static const pixman_gradient_stop_t stops[] = {
|
|
{ 0x00000, { 0x6666, 0x6666, 0x6666, 0xffff } },
|
|
{ 0x10000, { 0x0000, 0x0000, 0x0000, 0xffff } }
|
|
};
|
|
static const pixman_transform_t transform = {
|
|
{ { 0x0, 0x26ee, 0x0},
|
|
{ 0xffffeeef, 0x0, 0x0},
|
|
{ 0x0, 0x0, 0x10000}
|
|
}
|
|
};
|
|
static const pixman_color_t z = { 0x0000, 0x0000, 0x0000, 0x0000 };
|
|
pixman_image_t *dest, *radial, *zero;
|
|
int i;
|
|
double before, after;
|
|
|
|
dest = pixman_image_create_bits (
|
|
PIXMAN_x8r8g8b8, 640, 429, NULL, -1);
|
|
zero = pixman_image_create_solid_fill (&z);
|
|
radial = pixman_image_create_radial_gradient (
|
|
&inner, &outer, r_inner, r_outer, stops, ARRAY_LENGTH (stops));
|
|
pixman_image_set_transform (radial, &transform);
|
|
pixman_image_set_repeat (radial, PIXMAN_REPEAT_PAD);
|
|
|
|
#define N_COMPOSITE 500
|
|
|
|
before = gettime();
|
|
for (i = 0; i < N_COMPOSITE; ++i)
|
|
{
|
|
before -= gettime();
|
|
|
|
pixman_image_composite (
|
|
PIXMAN_OP_SRC, zero, NULL, dest,
|
|
0, 0, 0, 0, 0, 0, 640, 429);
|
|
|
|
before += gettime();
|
|
|
|
pixman_image_composite32 (
|
|
PIXMAN_OP_OVER, radial, NULL, dest,
|
|
- 150, -158, 0, 0, 0, 0, 640, 361);
|
|
}
|
|
|
|
after = gettime();
|
|
|
|
write_png (dest, "radial.png");
|
|
|
|
printf ("Average time to composite: %f\n", (after - before) / N_COMPOSITE);
|
|
return 0;
|
|
}
|