29 float max_segment = 0.01f;
30 unsigned int i, resol = 1;
40 unsigned int cur_resol;
42 bezt_curr = &
point->bezt;
45 if (bezt_next ==
NULL) {
54 cur_resol =
len / max_segment;
56 resol =
MAX2(resol, cur_resol);
68 const float max_segment = 0.005;
70 float max_jump = 0.0f;
77 for (
int i = 0; i < spline->
tot_point; i++) {
81 float prev_w =
point->bezt.weight;
83 for (
int j = 0; j <
point->tot_uw; j++) {
84 const float w_diff = (
point->uw[j].w - prev_w);
85 const float u_diff = (
point->uw[j].u - prev_u);
89 if (u_diff > FLT_EPSILON) {
95 prev_u =
point->uw[j].u;
96 prev_w =
point->uw[j].w;
100 resol += max_jump / max_segment;
111 return ((spline->
tot_point - 1) * resol) + 1;
115 const unsigned int resol,
116 unsigned int *r_tot_diff_point))[2]
121 float(*diff_points)[2], (*fp)[2];
125 if (spline->tot_point <= 1) {
127 *r_tot_diff_point = 0;
132 *r_tot_diff_point = tot;
133 diff_points = fp =
MEM_mallocN((tot + 1) *
sizeof(*diff_points),
"mask spline vets");
135 a = spline->tot_point - 1;
140 point_prev = points_array;
141 point_curr = point_prev + 1;
149 point_curr = points_array;
152 bezt_prev = &point_prev->
bezt;
153 bezt_curr = &point_curr->
bezt;
155 for (j = 0; j < 2; j++) {
157 bezt_prev->
vec[2][j],
158 bezt_curr->
vec[0][j],
159 bezt_curr->
vec[1][j],
171 point_prev = point_curr;
196 const int alloc_delta = 256;
201 "feather bucket segments");
218 int tot_feather_point,
223 const float *
v1 = (
float *)feather_points[cur_a];
224 const float *
v2 = (
float *)feather_points[cur_b];
227 int check_a = bucket->
segments[i][0];
228 int check_b = bucket->
segments[i][1];
230 const float *v3 = (
float *)feather_points[check_a];
231 const float *v4 = (
float *)feather_points[check_b];
233 if (check_a >= cur_a - 1 || cur_b == check_a) {
240 float min_a[2], max_a[2];
241 float min_b[2], max_b[2];
249 for (k = 0; k < tot_feather_point; k++) {
250 if (k >= check_b && k <= cur_a) {
258 if (max_a[0] - min_a[0] < max_b[0] - min_b[0] || max_a[1] - min_a[1] < max_b[1] - min_b[1]) {
259 for (k = check_b; k <= cur_a; k++) {
264 for (k = 0; k <= check_a; k++) {
269 for (k = cur_b; k < tot_feather_point; k++) {
280 const float bucket_scale[2],
281 const int buckets_per_side)
283 int x = (int)((co[0] -
min[0]) * bucket_scale[0]);
284 int y = (int)((co[1] -
min[1]) * bucket_scale[1]);
286 if (
x == buckets_per_side) {
290 if (
y == buckets_per_side) {
294 return y * buckets_per_side +
x;
298 int start_bucket_index,
299 int end_bucket_index,
300 int buckets_per_side,
304 int start_bucket_x = start_bucket_index % buckets_per_side;
305 int start_bucket_y = start_bucket_index / buckets_per_side;
307 int end_bucket_x = end_bucket_index % buckets_per_side;
308 int end_bucket_y = end_bucket_index / buckets_per_side;
310 int diagonal_bucket_a_index = start_bucket_y * buckets_per_side + end_bucket_x;
311 int diagonal_bucket_b_index = end_bucket_y * buckets_per_side + start_bucket_x;
313 *r_diagonal_bucket_a = &buckets[diagonal_bucket_a_index];
314 *r_diagonal_bucket_b = &buckets[diagonal_bucket_b_index];
318 float (*feather_points)[2],
319 const unsigned int tot_feather_point)
321 #define BUCKET_INDEX(co) feather_bucket_index_from_coord(co, min, bucket_scale, buckets_per_side)
323 int buckets_per_side, tot_bucket;
324 float bucket_size, bucket_scale[2];
329 float max_delta_x = -1.0f, max_delta_y = -1.0f, max_delta;
331 if (tot_feather_point < 4) {
342 for (
uint i = 0; i < tot_feather_point; i++) {
343 unsigned int next = i + 1;
348 if (
next == tot_feather_point) {
357 delta =
fabsf(feather_points[i][0] - feather_points[
next][0]);
358 if (delta > max_delta_x) {
362 delta =
fabsf(feather_points[i][1] - feather_points[
next][1]);
363 if (delta > max_delta_y) {
369 if (
max[0] -
min[0] < FLT_EPSILON) {
374 if (
max[1] -
min[1] < FLT_EPSILON) {
384 max_delta_x /=
max[0] -
min[0];
385 max_delta_y /=
max[1] -
min[1];
387 max_delta =
MAX2(max_delta_x, max_delta_y);
389 buckets_per_side =
min_ii(512, 0.9f / max_delta);
391 if (buckets_per_side == 0) {
394 buckets_per_side = 1;
397 tot_bucket = buckets_per_side * buckets_per_side;
398 bucket_size = 1.0f / buckets_per_side;
401 bucket_scale[0] = 1.0f / ((
max[0] -
min[0]) * bucket_size);
402 bucket_scale[1] = 1.0f / ((
max[1] -
min[1]) * bucket_size);
407 for (
int i = 0; i < tot_feather_point; i++) {
408 int start = i, end = i + 1;
409 int start_bucket_index, end_bucket_index;
411 if (end == tot_feather_point) {
420 start_bucket_index =
BUCKET_INDEX(feather_points[start]);
425 if (start_bucket_index != end_bucket_index) {
443 for (
int i = 0; i < tot_feather_point; i++) {
444 int cur_a = i, cur_b = i + 1;
445 int start_bucket_index, end_bucket_index;
449 if (cur_b == tot_feather_point) {
453 start_bucket_index =
BUCKET_INDEX(feather_points[cur_a]);
456 start_bucket = &buckets[start_bucket_index];
460 if (start_bucket_index != end_bucket_index) {
473 feather_points, tot_feather_point, diagonal_bucket_a, cur_a, cur_b);
475 feather_points, tot_feather_point, diagonal_bucket_b, cur_a, cur_b);
480 for (
int i = 0; i < tot_bucket; i++) {
481 if (buckets[i].segments) {
494 const unsigned int resol,
495 const bool do_feather_isect,
496 unsigned int *r_tot_feather_point))[2]
500 float(*feather)[2], (*fp)[2];
506 feather = fp =
MEM_mallocN((tot + 1) *
sizeof(*feather),
"mask spline feather diff points");
513 point_prev = points_array;
514 point_curr = point_prev + 1;
522 point_curr = points_array;
528 for (j = 0; j < resol; j++, fp++) {
529 float u = (
float)j / resol, weight;
542 float u = 1.0f, weight;
552 point_prev = point_curr;
556 *r_tot_feather_point = tot;
568 const unsigned int resol,
569 const bool do_feather_isect,
570 unsigned int *r_tot_feather_point))[2]
575 float(*feather)[2], (*fp)[2];
581 *r_tot_feather_point = 0;
586 *r_tot_feather_point = tot;
587 feather = fp =
MEM_mallocN((tot + 1) *
sizeof(*feather),
"mask spline vets");
594 point_prev = points_array;
595 point_curr = point_prev + 1;
600 float point_prev_n[2], point_curr_n[2], tvec[2];
601 float weight_prev, weight_curr;
602 float len_base, len_feather, len_scalar;
609 point_curr = points_array;
612 bezt_prev = &point_prev->
bezt;
613 bezt_curr = &point_curr->
bezt;
616 local_prevbezt = *bezt_prev;
617 local_bezt = *bezt_curr;
619 bezt_prev = &local_prevbezt;
620 bezt_curr = &local_bezt;
625 point_prev_n[0] = -tvec[1];
626 point_prev_n[1] = tvec[0];
630 point_curr_n[0] = -tvec[1];
631 point_curr_n[1] = tvec[0];
633 weight_prev = bezt_prev->
weight;
634 weight_curr = bezt_curr->
weight;
653 len_scalar = len_feather / len_base;
661 for (j = 0; j < 2; j++) {
663 bezt_prev->
vec[2][j],
664 bezt_curr->
vec[0][j],
665 bezt_curr->
vec[1][j],
673 for (j = 0; j < resol; j++, fp++) {
674 float u = (
float)j / resol;
675 float weight_uw, weight_scalar;
696 point_prev = point_curr;
709 const unsigned int resol,
710 const bool do_feather_isect,
711 unsigned int *r_tot_feather_point))[2]
716 spline, resol, do_feather_isect, r_tot_feather_point);
720 spline, resol, do_feather_isect, r_tot_feather_point);
729 float(*feather)[2], (*fp)[2];
732 for (i = 0; i < spline->
tot_point; i++) {
735 tot +=
point->tot_uw + 1;
739 feather = fp =
MEM_mallocN(tot *
sizeof(*feather),
"mask spline feather points");
741 for (i = 0; i < spline->
tot_point; i++) {
753 for (j = 0; j <
point->tot_uw; j++) {
754 float u =
point->uw[j].u;
766 *r_tot_feather_point = tot;
775 unsigned int *r_tot_feather_point)
780 feather = fp =
MEM_callocN(2 * resol *
sizeof(
float),
"mask point spline feather diff points");
782 for (
uint i = 0; i < resol; i++, fp += 2) {
783 float u = (
float)(i % resol) / resol, weight;
790 fp[0] = co[0] + n[0] * weight;
791 fp[1] = co[1] + n[1] * weight;
794 *r_tot_feather_point = resol;
803 unsigned int *r_tot_diff_point)
808 float *diff_points, *fp;
819 *r_tot_diff_point = resol + 1;
820 diff_points = fp =
MEM_callocN(
sizeof(
float[2]) * (resol + 1),
"mask segment vets");
822 for (j = 0; j < 2; j++) {
825 bezt_next->
vec[0][j],
826 bezt_next->
vec[1][j],
839 float parent_matrix[3][3];
853 masklay, ctime, &masklay_shape_a, &masklay_shape_b))) {
856 printf(
"%s: exact %d %d (%d)\n",
860 masklay_shape_a->
frame);
864 else if (found == 2) {
865 float w = masklay_shape_b->
frame - masklay_shape_a->
frame;
867 printf(
"%s: tween %d %d (%d %d)\n",
871 masklay_shape_a->
frame,
872 masklay_shape_b->
frame);
875 masklay, masklay_shape_a, masklay_shape_b, (ctime - masklay_shape_a->
frame) /
w);
888 bool need_handle_recalc =
false;
890 for (
int i = 0; i < spline->
tot_point; i++) {
894 *point_deform = *
point;
898 need_handle_recalc =
true;
904 if (need_handle_recalc) {
905 for (
int i = 0; i < spline->
tot_point; i++) {
921 mask_layer = mask_layer->next) {
932 mask_layer = mask_layer->next) {
936 if (is_depsgraph_active) {
939 *masklay_eval =
mask->masklayers.first;
940 masklay_orig !=
NULL;
941 masklay_orig = masklay_orig->next, masklay_eval = masklay_eval->next) {
942 for (
MaskSpline *spline_orig = masklay_orig->splines.first,
943 *spline_eval = masklay_eval->splines.first;
945 spline_orig = spline_orig->next, spline_eval = spline_eval->next) {
946 for (
int i = 0; i < spline_eval->tot_point; i++) {
949 point_orig->
bezt = point_eval->
bezt;
typedef float(TangentPoint)[2]
void BKE_curve_forward_diff_bezier(float q0, float q1, float q2, float q3, float *p, int it, int stride)
void BKE_mask_layer_shape_to_mask(struct MaskLayer *masklay, struct MaskLayerShape *masklay_shape)
void BKE_mask_layer_shape_to_mask_interp(struct MaskLayer *masklay, struct MaskLayerShape *masklay_shape_a, struct MaskLayerShape *masklay_shape_b, float fac)
void BKE_mask_calc_handle_point(struct MaskSpline *spline, struct MaskSplinePoint *point)
void BKE_mask_point_free(struct MaskSplinePoint *point)
int BKE_mask_layer_shape_find_frame_range(struct MaskLayer *masklay, float frame, struct MaskLayerShape **r_masklay_shape_a, struct MaskLayerShape **r_masklay_shape_b)
void BKE_mask_spline_ensure_deform(struct MaskSpline *spline)
float BKE_mask_point_weight(struct MaskSpline *spline, struct MaskSplinePoint *point, float u)
float BKE_mask_point_weight_scalar(struct MaskSpline *spline, struct MaskSplinePoint *point, float u)
void BKE_mask_layer_calc_handles(struct MaskLayer *masklay)
struct MaskSplinePoint * BKE_mask_spline_point_array_from_point(struct MaskSpline *spline, const struct MaskSplinePoint *point_ref)
void BKE_mask_point_parent_matrix_get(struct MaskSplinePoint *point, float ctime, float parent_matrix[3][3])
void BKE_mask_point_normal(struct MaskSpline *spline, struct MaskSplinePoint *point, float u, float n[2])
void BKE_mask_point_segment_co(struct MaskSpline *spline, struct MaskSplinePoint *point, float u, float co[2])
struct MaskSplinePoint * BKE_mask_spline_point_array(struct MaskSpline *spline)
struct BezTriple * BKE_mask_spline_point_next_bezt(struct MaskSpline *spline, struct MaskSplinePoint *points_array, struct MaskSplinePoint *point)
int BLI_listbase_count(const struct ListBase *listbase) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
MINLINE float max_ff(float a, float b)
MINLINE int min_ii(int a, int b)
MINLINE int max_ii(int a, int b)
bool isect_seg_seg_v2_simple(const float v1[2], const float v2[2], const float v3[2], const float v4[2])
int isect_seg_seg_v2_point(const float v0[2], const float v1[2], const float v2[2], const float v3[2], float vi[2])
void mul_m3_v2(const float m[3][3], float r[2])
MINLINE float len_v3v3(const float a[3], const float b[3]) ATTR_WARN_UNUSED_RESULT
MINLINE void madd_v2_v2v2fl(float r[2], const float a[2], const float b[2], float f)
MINLINE void mul_v2_fl(float r[2], float f)
MINLINE void copy_v2_v2(float r[2], const float a[2])
void dist_ensure_v2_v2fl(float v1[2], const float v2[2], float dist)
void minmax_v2v2_v2(float min[2], float max[2], const float vec[2])
MINLINE void add_v2_v2(float r[2], const float a[2])
MINLINE void sub_v2_v2v2(float r[2], const float a[2], const float b[2])
MINLINE float len_v2v2(const float a[2], const float b[2]) ATTR_WARN_UNUSED_RESULT
MINLINE float normalize_v2(float r[2])
#define INIT_MINMAX2(min, max)
struct Depsgraph Depsgraph
bool DEG_is_active(const struct Depsgraph *depsgraph)
void DEG_debug_print_eval(struct Depsgraph *depsgraph, const char *function_name, const char *object_name, const void *object_address)
float DEG_get_ctime(const Depsgraph *graph)
struct ID * DEG_get_original_id(struct ID *id)
@ MASK_SPLINE_NOINTERSECT
@ MASK_SPLINE_OFFSET_SMOOTH
@ MASK_SPLINE_OFFSET_EVEN
Object is a sort of wrapper for general info.
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei height
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum const void *lists _GL_VOID_RET _GL_VOID const GLdouble *equation _GL_VOID_RET _GL_VOID GLdouble GLdouble blue _GL_VOID_RET _GL_VOID GLfloat GLfloat blue _GL_VOID_RET _GL_VOID GLint GLint blue _GL_VOID_RET _GL_VOID GLshort GLshort blue _GL_VOID_RET _GL_VOID GLubyte GLubyte blue _GL_VOID_RET _GL_VOID GLuint GLuint blue _GL_VOID_RET _GL_VOID GLushort GLushort blue _GL_VOID_RET _GL_VOID GLbyte GLbyte GLbyte alpha _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble alpha _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat alpha _GL_VOID_RET _GL_VOID GLint GLint GLint alpha _GL_VOID_RET _GL_VOID GLshort GLshort GLshort alpha _GL_VOID_RET _GL_VOID GLubyte GLubyte GLubyte alpha _GL_VOID_RET _GL_VOID GLuint GLuint GLuint alpha _GL_VOID_RET _GL_VOID GLushort GLushort GLushort alpha _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLint y
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum const void *lists _GL_VOID_RET _GL_VOID const GLdouble *equation _GL_VOID_RET _GL_VOID GLdouble GLdouble blue _GL_VOID_RET _GL_VOID GLfloat GLfloat blue _GL_VOID_RET _GL_VOID GLint GLint blue _GL_VOID_RET _GL_VOID GLshort GLshort blue _GL_VOID_RET _GL_VOID GLubyte GLubyte blue _GL_VOID_RET _GL_VOID GLuint GLuint blue _GL_VOID_RET _GL_VOID GLushort GLushort blue _GL_VOID_RET _GL_VOID GLbyte GLbyte GLbyte alpha _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble alpha _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat alpha _GL_VOID_RET _GL_VOID GLint GLint GLint alpha _GL_VOID_RET _GL_VOID GLshort GLshort GLshort alpha _GL_VOID_RET _GL_VOID GLubyte GLubyte GLubyte alpha _GL_VOID_RET _GL_VOID GLuint GLuint GLuint alpha _GL_VOID_RET _GL_VOID GLushort GLushort GLushort alpha _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLint GLsizei width
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum const void *lists _GL_VOID_RET _GL_VOID const GLdouble *equation _GL_VOID_RET _GL_VOID GLdouble GLdouble blue _GL_VOID_RET _GL_VOID GLfloat GLfloat blue _GL_VOID_RET _GL_VOID GLint GLint blue _GL_VOID_RET _GL_VOID GLshort GLshort blue _GL_VOID_RET _GL_VOID GLubyte GLubyte blue _GL_VOID_RET _GL_VOID GLuint GLuint blue _GL_VOID_RET _GL_VOID GLushort GLushort blue _GL_VOID_RET _GL_VOID GLbyte GLbyte GLbyte alpha _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble alpha _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat alpha _GL_VOID_RET _GL_VOID GLint GLint GLint alpha _GL_VOID_RET _GL_VOID GLshort GLshort GLshort alpha _GL_VOID_RET _GL_VOID GLubyte GLubyte GLubyte alpha _GL_VOID_RET _GL_VOID GLuint GLuint GLuint alpha _GL_VOID_RET _GL_VOID GLushort GLushort GLushort alpha _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLint GLsizei GLsizei GLenum type _GL_VOID_RET _GL_VOID GLsizei GLenum GLenum const void *pixels _GL_VOID_RET _GL_VOID const void *pointer _GL_VOID_RET _GL_VOID GLdouble v _GL_VOID_RET _GL_VOID GLfloat v _GL_VOID_RET _GL_VOID GLint GLint i2 _GL_VOID_RET _GL_VOID GLint j _GL_VOID_RET _GL_VOID GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble GLdouble GLdouble zFar _GL_VOID_RET _GL_UINT GLdouble *equation _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLenum GLfloat *v _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLfloat *values _GL_VOID_RET _GL_VOID GLushort *values _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLenum GLdouble *params _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_BOOL GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLenum GLfloat param _GL_VOID_RET _GL_VOID GLenum GLint param _GL_VOID_RET _GL_VOID GLushort pattern _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLint const GLdouble *points _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLint GLdouble v1
Read Guarded memory(de)allocation.
#define MEM_reallocN(vmemh, len)
in reality light always falls off quadratically Particle Retrieve the data of the particle that spawned the object for example to give variation to multiple instances of an object Point Retrieve information about points in a point cloud Retrieve the edges of an object as it appears to Cycles topology will always appear triangulated Convert a blackbody temperature to an RGB value Normal Generate a perturbed normal from an RGB normal map image Typically used for faking highly detailed surfaces Generate an OSL shader from a file or text data block Image Sample an image file as a texture Sky Generate a procedural sky texture Noise Generate fractal Perlin noise Wave Generate procedural bands or rings with noise Voronoi Generate Worley noise based on the distance to random points Typically used to generate textures such as or biological cells Brick Generate a procedural texture producing bricks Texture Retrieve multiple types of texture coordinates nTypically used as inputs for texture nodes Vector Convert a point
ATTR_WARN_UNUSED_RESULT const BMVert * v2
void jump(const btVector3 &v=btVector3(0, 0, 0))
SIMD_FORCE_INLINE const btScalar & w() const
Return the w value.
const Depsgraph * depsgraph
void(* MEM_freeN)(void *vmemh)
void *(* MEM_dupallocN)(const void *vmemh)
void *(* MEM_callocN)(size_t len, const char *str)
void *(* MEM_mallocN)(size_t len, const char *str)
float(* BKE_mask_spline_differentiate_with_resolution(MaskSpline *spline, const unsigned int resol, unsigned int *r_tot_diff_point))[2]
static void feather_bucket_get_diagonal(FeatherEdgesBucket *buckets, int start_bucket_index, int end_bucket_index, int buckets_per_side, FeatherEdgesBucket **r_diagonal_bucket_a, FeatherEdgesBucket **r_diagonal_bucket_b)
static float(* mask_spline_feather_differentiated_points_with_resolution__double(MaskSpline *spline, const unsigned int resol, const bool do_feather_isect, unsigned int *r_tot_feather_point))[2]
float(* BKE_mask_spline_feather_points(MaskSpline *spline, int *r_tot_feather_point))[2]
void BKE_mask_layer_evaluate_animation(MaskLayer *masklay, const float ctime)
int BKE_mask_spline_differentiate_calc_total(const MaskSpline *spline, const unsigned int resol)
void BKE_mask_eval_update(struct Depsgraph *depsgraph, Mask *mask)
static void mask_evaluate_apply_point_parent(MaskSplinePoint *point, float ctime)
float * BKE_mask_point_segment_feather_diff(MaskSpline *spline, MaskSplinePoint *point, int width, int height, unsigned int *r_tot_feather_point)
unsigned int BKE_mask_spline_feather_resolution(MaskSpline *spline, int width, int height)
void BKE_mask_spline_feather_collapse_inner_loops(MaskSpline *spline, float(*feather_points)[2], const unsigned int tot_feather_point)
void BKE_mask_eval_animation(struct Depsgraph *depsgraph, Mask *mask)
float(* BKE_mask_spline_differentiate(MaskSpline *spline, int width, int height, unsigned int *r_tot_diff_point))[2]
static void feather_bucket_check_intersect(float(*feather_points)[2], int tot_feather_point, FeatherEdgesBucket *bucket, int cur_a, int cur_b)
float * BKE_mask_point_segment_diff(MaskSpline *spline, MaskSplinePoint *point, int width, int height, unsigned int *r_tot_diff_point)
void BKE_mask_layer_evaluate_deform(MaskLayer *masklay, const float ctime)
struct FeatherEdgesBucket FeatherEdgesBucket
static float(* mask_spline_feather_differentiated_points_with_resolution__even(MaskSpline *spline, const unsigned int resol, const bool do_feather_isect, unsigned int *r_tot_feather_point))[2]
static void feather_bucket_add_edge(FeatherEdgesBucket *bucket, int start, int end)
static int feather_bucket_index_from_coord(const float co[2], const float min[2], const float bucket_scale[2], const int buckets_per_side)
unsigned int BKE_mask_spline_resolution(MaskSpline *spline, int width, int height)
float(* BKE_mask_spline_feather_differentiated_points_with_resolution(MaskSpline *spline, const unsigned int resol, const bool do_feather_isect, unsigned int *r_tot_feather_point))[2]
ccl_device_inline float4 mask(const int4 &mask, const float4 &a)
static const pxr::TfToken b("b", pxr::TfToken::Immortal)
MaskSplinePoint * points_deform