forked from bartvdbraak/blender
107 lines
2.8 KiB
C
107 lines
2.8 KiB
C
/*
|
|
* ***** BEGIN GPL LICENSE BLOCK *****
|
|
*
|
|
* This program is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU General Public License
|
|
* as published by the Free Software Foundation; either version 2
|
|
* of the License, or (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program; if not, write to the Free Software Foundation,
|
|
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
*
|
|
* The Original Code is Copyright (C) 2012 Blender Foundation.
|
|
* All rights reserved.
|
|
*
|
|
* The Original Code is: all of this file.
|
|
*
|
|
* Contributor(s): Peter Larabell.
|
|
*
|
|
* ***** END GPL LICENSE BLOCK *****
|
|
*/
|
|
/** \file raskter.h
|
|
* \ingroup RASKTER
|
|
*/
|
|
/* from BLI_utildefines.h */
|
|
#define MIN2(x, y) ( (x) < (y) ? (x) : (y) )
|
|
#define MAX2(x, y) ( (x) > (y) ? (x) : (y) )
|
|
#define ABS(a) ( (a) < 0 ? (-(a)) : (a) )
|
|
|
|
struct poly_vert {
|
|
int x;
|
|
int y;
|
|
};
|
|
|
|
struct scan_line {
|
|
int xstart;
|
|
int xend;
|
|
};
|
|
|
|
struct scan_line_batch {
|
|
int num;
|
|
int ystart;
|
|
struct scan_line *slines;
|
|
};
|
|
|
|
struct e_status {
|
|
int x;
|
|
int ybeg;
|
|
int xshift;
|
|
int xdir;
|
|
int drift;
|
|
int drift_inc;
|
|
int drift_dec;
|
|
int num;
|
|
struct e_status *e_next;
|
|
};
|
|
|
|
struct r_buffer_stats {
|
|
float *buf;
|
|
int sizex;
|
|
int sizey;
|
|
int ymin;
|
|
int ymax;
|
|
int xmin;
|
|
int xmax;
|
|
};
|
|
|
|
struct r_fill_context {
|
|
struct e_status *all_edges, *possible_edges;
|
|
struct r_buffer_stats rb;
|
|
struct scan_line *bounds;
|
|
void *kdo; //only used with kd tree
|
|
void *kdi; //only used with kd tree
|
|
int *bound_indexes;
|
|
int bounds_length;
|
|
};
|
|
|
|
struct layer_init_data {
|
|
struct poly_vert *imask;
|
|
struct poly_vert *omask;
|
|
struct scan_line *bounds;
|
|
int *bound_indexes;
|
|
int bounds_length;
|
|
};
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
void preprocess_all_edges(struct r_fill_context *ctx, struct poly_vert *verts, int num_verts, struct e_status *open_edge);
|
|
int PLX_init_base_data(struct layer_init_data *mlayer_data, float(*base_verts)[2], int num_base_verts,
|
|
float *buf, int buf_x, int buf_y);
|
|
int PLX_raskterize(float (*base_verts)[2], int num_base_verts,
|
|
float *buf, int buf_x, int buf_y, int do_mask_AA);
|
|
int PLX_raskterize_feather(float (*base_verts)[2], int num_base_verts,
|
|
float (*feather_verts)[2], int num_feather_verts,
|
|
float *buf, int buf_x, int buf_y);
|
|
int PLX_antialias_buffer(float *buf, int buf_x, int buf_y);
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|