2017-06-28 17:14:40 -04:00
|
|
|
// partitionfinder/partitionfinder.h
|
|
|
|
|
|
|
|
#ifndef PARTITIONFINDER_H
|
|
|
|
#define PARTITIONFINDER_H
|
|
|
|
|
|
|
|
#include <stdint.h>
|
|
|
|
|
2017-07-05 20:03:05 -04:00
|
|
|
#define PF_ANTIALIASING_MODE_MSAA 0
|
|
|
|
#define PF_ANTIALIASING_MODE_LEVIEN 1
|
|
|
|
|
2017-06-28 17:14:40 -04:00
|
|
|
#ifdef __cplusplus
|
|
|
|
extern "C" {
|
|
|
|
#endif
|
|
|
|
|
2017-07-05 20:03:05 -04:00
|
|
|
typedef uint8_t pf_antialiasing_mode_t;
|
|
|
|
|
|
|
|
typedef uint16_t pf_float16_t;
|
|
|
|
|
2017-06-28 17:14:40 -04:00
|
|
|
struct pf_point2d_f32 {
|
|
|
|
float x, y;
|
|
|
|
};
|
|
|
|
|
|
|
|
typedef struct pf_point2d_f32 pf_point2d_f32_t;
|
|
|
|
|
2017-07-05 20:03:05 -04:00
|
|
|
struct pf_matrix2d_f32 {
|
|
|
|
float m00, m01, m02;
|
|
|
|
float m10, m11, m12;
|
|
|
|
};
|
|
|
|
|
|
|
|
typedef struct pf_matrix2d_f32 pf_matrix2d_f32_t;
|
|
|
|
|
|
|
|
struct pf_vertex {
|
|
|
|
uint32_t prev_endpoint_index;
|
|
|
|
uint32_t next_endpoint_index;
|
|
|
|
float time;
|
|
|
|
uint32_t padding;
|
|
|
|
};
|
|
|
|
|
|
|
|
typedef struct pf_vertex pf_vertex_t;
|
|
|
|
|
2017-07-07 17:19:33 -04:00
|
|
|
struct pf_edge_instance {
|
|
|
|
uint32_t prev_endpoint_index;
|
|
|
|
uint32_t next_endpoint_index;
|
|
|
|
float prev_time;
|
|
|
|
float next_time;
|
|
|
|
};
|
|
|
|
|
|
|
|
typedef struct pf_edge_instance pf_edge_instance_t;
|
|
|
|
|
2017-07-05 20:03:05 -04:00
|
|
|
struct pf_quad_tess_levels {
|
|
|
|
pf_float16_t outer[4];
|
|
|
|
pf_float16_t inner[2];
|
|
|
|
};
|
|
|
|
|
|
|
|
typedef struct pf_quad_tess_levels pf_quad_tess_levels_t;
|
|
|
|
|
2017-07-06 14:39:52 -04:00
|
|
|
struct pf_b_quad {
|
2017-06-28 17:14:40 -04:00
|
|
|
uint32_t upper_prev_endpoint, upper_next_endpoint;
|
|
|
|
uint32_t lower_prev_endpoint, lower_next_endpoint;
|
2017-07-03 15:32:22 -04:00
|
|
|
float upper_left_time, upper_right_time;
|
|
|
|
float lower_left_time, lower_right_time;
|
2017-06-28 17:14:40 -04:00
|
|
|
};
|
|
|
|
|
2017-07-06 14:39:52 -04:00
|
|
|
typedef struct pf_b_quad pf_b_quad_t;
|
2017-06-28 17:14:40 -04:00
|
|
|
|
|
|
|
struct pf_endpoint {
|
|
|
|
pf_point2d_f32_t position;
|
|
|
|
uint32_t control_points_index;
|
|
|
|
uint32_t subpath_index;
|
|
|
|
};
|
|
|
|
|
|
|
|
typedef struct pf_endpoint pf_endpoint_t;
|
|
|
|
|
|
|
|
struct pf_control_points {
|
|
|
|
pf_point2d_f32_t point1, point2;
|
|
|
|
};
|
|
|
|
|
|
|
|
typedef struct pf_control_points pf_control_points_t;
|
|
|
|
|
|
|
|
struct pf_subpath {
|
2017-07-02 16:41:33 -04:00
|
|
|
uint32_t first_endpoint_index;
|
2017-07-03 15:32:22 -04:00
|
|
|
uint32_t last_endpoint_index;
|
2017-06-28 17:14:40 -04:00
|
|
|
};
|
|
|
|
|
|
|
|
typedef struct pf_subpath pf_subpath_t;
|
|
|
|
|
2017-07-09 16:59:33 -04:00
|
|
|
struct pf_legalizer;
|
|
|
|
|
|
|
|
typedef struct pf_legalizer pf_legalizer_t;
|
|
|
|
|
2017-06-28 17:14:40 -04:00
|
|
|
struct pf_partitioner;
|
|
|
|
|
|
|
|
typedef struct pf_partitioner pf_partitioner_t;
|
|
|
|
|
2017-07-05 20:03:05 -04:00
|
|
|
struct pf_tessellator;
|
|
|
|
|
|
|
|
typedef struct pf_tessellator pf_tessellator_t;
|
|
|
|
|
2017-07-09 16:59:33 -04:00
|
|
|
pf_legalizer_t *pf_legalizer_new();
|
|
|
|
|
|
|
|
void pf_legalizer_destroy(Legalizer *legalizer);
|
|
|
|
|
|
|
|
const pf_endpoint_t *pf_legalizer_endpoints(const Legalizer *legalizer,
|
|
|
|
uint32_t *out_endpoint_count);
|
|
|
|
|
|
|
|
const pf_control_points_t *pf_legalizer_control_points(const Legalizer *legalizer,
|
|
|
|
uitn32_t *out_control_points_count);
|
|
|
|
|
|
|
|
const pf_subpath_t *pf_legalizer_subpaths(const Legalizer *legalizer,
|
|
|
|
uint32_t *out_subpaths_count);
|
|
|
|
|
|
|
|
void pf_legalizer_move_to(Legalizer *legalizer, const pf_point2d_f32_t *position);
|
|
|
|
|
|
|
|
void pf_legalizer_close_path(Legalizer *legalizer);
|
|
|
|
|
|
|
|
void pf_legalizer_line_to(Legalizer *legalizer, const pf_point2d_f32_t *endpoint);
|
|
|
|
|
|
|
|
void pf_legalizer_quadratic_curve_to(Legalizer *legalizer,
|
|
|
|
const pf_point2d_f32_t *control_point,
|
|
|
|
const pf_point2d_f32_t *endpoint);
|
|
|
|
|
|
|
|
void pf_legalizer_bezier_curve_to(Legalizer *legalizer,
|
|
|
|
const pf_point2d_f32_t *point1,
|
|
|
|
const pf_point2d_f32_t *point2,
|
|
|
|
const pf_point2d_f32_t *endpoint);
|
|
|
|
|
2017-07-03 15:32:22 -04:00
|
|
|
pf_partitioner_t *pf_partitioner_new();
|
2017-06-28 17:14:40 -04:00
|
|
|
|
|
|
|
void pf_partitioner_destroy(pf_partitioner_t *partitioner);
|
|
|
|
|
2017-07-03 15:32:22 -04:00
|
|
|
void pf_partitioner_init(pf_partitioner_t *partitioner,
|
|
|
|
const pf_endpoint_t *endpoints,
|
|
|
|
uint32_t endpoint_count,
|
|
|
|
const pf_control_points_t *control_points,
|
|
|
|
uint32_t control_points_count,
|
|
|
|
const pf_subpath_t *subpaths,
|
|
|
|
uint32_t subpath_count);
|
|
|
|
|
|
|
|
void pf_partitioner_partition(pf_partitioner_t *partitioner,
|
|
|
|
uint32_t first_subpath_index,
|
|
|
|
uint32_t last_subpath_index);
|
2017-06-28 17:14:40 -04:00
|
|
|
|
2017-07-06 14:39:52 -04:00
|
|
|
const pf_b_quad_t *pf_partitioner_b_quads(pf_partitioner_t *partitioner,
|
|
|
|
uint32_t *out_b_quad_count);
|
2017-06-28 17:14:40 -04:00
|
|
|
|
2017-07-05 20:03:05 -04:00
|
|
|
pf_tessellator_t *pf_tessellator_new(const pf_endpoint_t *endpoints,
|
|
|
|
uint32_t endpoint_count,
|
|
|
|
const pf_control_points_t *control_points,
|
|
|
|
uint32_t control_points_index,
|
2017-07-06 14:39:52 -04:00
|
|
|
const pf_b_quad_t *b_quads,
|
2017-07-05 20:03:05 -04:00
|
|
|
uint32_t b_quad_count,
|
|
|
|
pf_antialiasing_mode_t antialiasing_mode);
|
|
|
|
|
|
|
|
void pf_tessellator_destroy(pf_tessellator_t *tessellator);
|
|
|
|
|
|
|
|
void pf_tessellator_compute_hull(pf_tessellator_t *tessellator, const pf_matrix2d_f32_t *transform);
|
|
|
|
|
|
|
|
void pf_tessellator_compute_domain(pf_tessellator_t *tessellator);
|
|
|
|
|
|
|
|
const pf_quad_tess_levels_t *pf_tessellator_tess_levels(const pf_tessellator_t *tessellator,
|
|
|
|
uint32_t *out_tess_levels_count);
|
|
|
|
|
|
|
|
const pf_vertex_t *pf_tessellator_vertices(const pf_tessellator_t *tessellator,
|
|
|
|
uint32_t *out_vertex_count);
|
|
|
|
|
|
|
|
const uint32_t *pf_tessellator_msaa_indices(const pf_tessellator_t *tessellator,
|
|
|
|
uint32_t *out_msaa_index_count);
|
|
|
|
|
2017-07-07 17:19:33 -04:00
|
|
|
const pf_edge_instance_t *pf_tessellator_edge_instances(const pf_tessellator_t *tessellator,
|
|
|
|
uint32_t *out_edge_instance_count);
|
2017-07-05 20:03:05 -04:00
|
|
|
|
2017-07-03 19:26:55 -04:00
|
|
|
uint32_t pf_init_env_logger();
|
|
|
|
|
2017-06-28 17:14:40 -04:00
|
|
|
#ifdef __cplusplus
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#endif
|