test_loop_speed_inversetransform(void) { struct weston_matrix m; struct inverse_matrix inv; struct weston_vector v = { { 0.5, 0.5, 0.5, 1.0 } }; unsigned long count = 0; double t; printf("\nRunning 3 s test on inverse_transform()...\n"); weston_matrix_init(&m); matrix_invert(inv.LU, inv.perm, &m); running = 1; alarm(3); reset_timer(); while (running) { inverse_transform(inv.LU, inv.perm, v.f); count++; } t = read_timer(); printf("%lu iterations in %f seconds, avg. %.1f ns/iter.\n", count, t, 1e9 * t / count); }
static void slide_frame(struct weston_surface_animation *animation) { float scale; scale = animation->start + (animation->stop - animation->start) * animation->spring.current; weston_matrix_init(&animation->transform.matrix); weston_matrix_translate(&animation->transform.matrix, 0, scale, 0); }
static void zoom_frame(struct weston_surface_animation *animation) { struct weston_surface *es = animation->surface; float scale; scale = animation->start + (animation->stop - animation->start) * animation->spring.current; weston_matrix_init(&animation->transform.matrix); weston_matrix_translate(&animation->transform.matrix, -0.5f * es->geometry.width, -0.5f * es->geometry.height, 0); weston_matrix_scale(&animation->transform.matrix, scale, scale, scale); weston_matrix_translate(&animation->transform.matrix, 0.5f * es->geometry.width, 0.5f * es->geometry.height, 0); es->alpha = animation->spring.current; if (es->alpha > 1.0) es->alpha = 1.0; }
test_loop_speed_invert_explicit(void) { struct weston_matrix m; unsigned long count = 0; double t; printf("\nRunning 3 s test on weston_matrix_invert()...\n"); weston_matrix_init(&m); running = 1; alarm(3); reset_timer(); while (running) { weston_matrix_invert(&m, &m); count++; } t = read_timer(); printf("%lu iterations in %f seconds, avg. %.1f ns/iter.\n", count, t, 1e9 * t / count); }
static struct weston_surface_animation * weston_surface_animation_run(struct weston_surface *surface, float start, float stop, weston_surface_animation_frame_func_t frame, weston_surface_animation_done_func_t done, void *data) { struct weston_surface_animation *animation; animation = malloc(sizeof *animation); if (!animation) return NULL; animation->surface = surface; animation->frame = frame; animation->done = done; animation->data = data; animation->start = start; animation->stop = stop; weston_matrix_init(&animation->transform.matrix); wl_list_insert(&surface->geometry.transformation_list, &animation->transform.link); weston_spring_init(&animation->spring, 200.0, 0.0, 1.0); animation->spring.friction = 700; animation->animation.frame_counter = 0; animation->animation.frame = weston_surface_animation_frame; weston_surface_animation_frame(&animation->animation, NULL, 0); animation->listener.notify = handle_animation_surface_destroy; wl_signal_add(&surface->destroy_signal, &animation->listener); wl_list_insert(&surface->output->animation_list, &animation->animation.link); return animation; }
void Transform::reset() { weston_matrix_init(&m_transform.matrix); }