cleanup: indentation & redundant casts

also use 'const' bucket rect args
This commit is contained in:
Campbell Barton
2015-02-03 09:18:46 +11:00
parent 5678691fe4
commit 052a021711

View File

@@ -423,17 +423,19 @@ static int project_bucket_offset_safe(const ProjPaintState *ps, const float proj
} }
} }
static float VecZDepthOrtho(const float pt[2], static float VecZDepthOrtho(
const float v1[3], const float v2[3], const float v3[3], const float pt[2],
float w[3]) const float v1[3], const float v2[3], const float v3[3],
float w[3])
{ {
barycentric_weights_v2(v1, v2, v3, pt, w); barycentric_weights_v2(v1, v2, v3, pt, w);
return (v1[2] * w[0]) + (v2[2] * w[1]) + (v3[2] * w[2]); return (v1[2] * w[0]) + (v2[2] * w[1]) + (v3[2] * w[2]);
} }
static float VecZDepthPersp(const float pt[2], static float VecZDepthPersp(
const float v1[4], const float v2[4], const float v3[4], const float pt[2],
float w[3]) const float v1[4], const float v2[4], const float v3[4],
float w[3])
{ {
float wtot_inv, wtot; float wtot_inv, wtot;
float w_tmp[3]; float w_tmp[3];
@@ -543,8 +545,9 @@ static void uvco_to_wrapped_pxco(const float uv[2], int ibuf_x, int ibuf_y, floa
} }
/* Set the top-most face color that the screen space coord 'pt' touches (or return 0 if none touch) */ /* Set the top-most face color that the screen space coord 'pt' touches (or return 0 if none touch) */
static bool project_paint_PickColor(const ProjPaintState *ps, const float pt[2], static bool project_paint_PickColor(
float *rgba_fp, unsigned char *rgba, const bool interp) const ProjPaintState *ps, const float pt[2],
float *rgba_fp, unsigned char *rgba, const bool interp)
{ {
float w[3], uv[2]; float w[3], uv[2];
int side; int side;
@@ -638,9 +641,10 @@ static bool project_paint_PickColor(const ProjPaintState *ps, const float pt[2],
* 1 : occluded * 1 : occluded
* 2 : occluded with w[3] weights set (need to know in some cases) */ * 2 : occluded with w[3] weights set (need to know in some cases) */
static int project_paint_occlude_ptv(const float pt[3], static int project_paint_occlude_ptv(
const float v1[4], const float v2[4], const float v3[4], const float pt[3],
float w[3], const bool is_ortho) const float v1[4], const float v2[4], const float v3[4],
float w[3], const bool is_ortho)
{ {
/* if all are behind us, return false */ /* if all are behind us, return false */
if (v1[2] > pt[2] && v2[2] > pt[2] && v3[2] > pt[2]) if (v1[2] > pt[2] && v2[2] > pt[2] && v3[2] > pt[2])
@@ -670,9 +674,10 @@ static int project_paint_occlude_ptv(const float pt[3],
} }
static int project_paint_occlude_ptv_clip(const ProjPaintState *ps, const MFace *mf, static int project_paint_occlude_ptv_clip(
const float pt[3], const float v1[4], const float v2[4], const float v3[4], const ProjPaintState *ps, const MFace *mf,
const int side) const float pt[3], const float v1[4], const float v2[4], const float v3[4],
const int side)
{ {
float w[3], wco[3]; float w[3], wco[3];
int ret = project_paint_occlude_ptv(pt, v1, v2, v3, w, ps->is_ortho); int ret = project_paint_occlude_ptv(pt, v1, v2, v3, w, ps->is_ortho);
@@ -700,8 +705,9 @@ static int project_paint_occlude_ptv_clip(const ProjPaintState *ps, const MFace
/* Check if a screenspace location is occluded by any other faces /* Check if a screenspace location is occluded by any other faces
* check, pixelScreenCo must be in screenspace, its Z-Depth only needs to be used for comparison * check, pixelScreenCo must be in screenspace, its Z-Depth only needs to be used for comparison
* and doesn't need to be correct in relation to X and Y coords (this is the case in perspective view) */ * and doesn't need to be correct in relation to X and Y coords (this is the case in perspective view) */
static bool project_bucket_point_occluded(const ProjPaintState *ps, LinkNode *bucketFace, static bool project_bucket_point_occluded(
const int orig_face, const float pixelScreenCo[4]) const ProjPaintState *ps, LinkNode *bucketFace,
const int orig_face, const float pixelScreenCo[4])
{ {
MFace *mf; MFace *mf;
int face_index; int face_index;
@@ -913,9 +919,10 @@ static void project_face_winding_init(const ProjPaintState *ps, const int face_i
/* This function returns 1 if this face has a seam along the 2 face-vert indices /* This function returns 1 if this face has a seam along the 2 face-vert indices
* 'orig_i1_fidx' and 'orig_i2_fidx' */ * 'orig_i1_fidx' and 'orig_i2_fidx' */
static bool check_seam(const ProjPaintState *ps, static bool check_seam(
const int orig_face, const int orig_i1_fidx, const int orig_i2_fidx, const ProjPaintState *ps,
int *other_face, int *orig_fidx) const int orig_face, const int orig_i1_fidx, const int orig_i2_fidx,
int *other_face, int *orig_fidx)
{ {
LinkNode *node; LinkNode *node;
int face_index; int face_index;
@@ -1004,8 +1011,9 @@ BLI_INLINE float shell_v2v2_normal_dir_to_dist(float n[2], float d[2])
/* Calculate outset UV's, this is not the same as simply scaling the UVs, /* Calculate outset UV's, this is not the same as simply scaling the UVs,
* since the outset coords are a margin that keep an even distance from the original UV's, * since the outset coords are a margin that keep an even distance from the original UV's,
* note that the image aspect is taken into account */ * note that the image aspect is taken into account */
static void uv_image_outset(float (*orig_uv)[2], float (*outset_uv)[2], const float scaler, static void uv_image_outset(
const int ibuf_x, const int ibuf_y, const bool is_quad, const bool cw) float (*orig_uv)[2], float (*outset_uv)[2], const float scaler,
const int ibuf_x, const int ibuf_y, const bool is_quad, const bool cw)
{ {
float a1, a2, a3, a4 = 0.0f; float a1, a2, a3, a4 = 0.0f;
float puv[4][2]; /* pixelspace uv's */ float puv[4][2]; /* pixelspace uv's */
@@ -1213,8 +1221,9 @@ static void screen_px_from_persp(
} }
static void project_face_pixel(const MTFace *tf_other, ImBuf *ibuf_other, const float w[3], static void project_face_pixel(
int side, unsigned char rgba_ub[4], float rgba_f[4]) const MTFace *tf_other, ImBuf *ibuf_other, const float w[3],
int side, unsigned char rgba_ub[4], float rgba_f[4])
{ {
const float *uvCo1, *uvCo2, *uvCo3; const float *uvCo1, *uvCo2, *uvCo3;
float uv_other[2], x, y; float uv_other[2], x, y;
@@ -1455,7 +1464,7 @@ static ProjPixel *project_paint_uvpixel_init(
y_px = mod_i(y_px, ibuf->y); y_px = mod_i(y_px, ibuf->y);
BLI_assert(ps->pixel_sizeof == project_paint_pixel_sizeof(ps->tool)); BLI_assert(ps->pixel_sizeof == project_paint_pixel_sizeof(ps->tool));
projPixel = (ProjPixel *)BLI_memarena_alloc(arena, ps->pixel_sizeof); projPixel = BLI_memarena_alloc(arena, ps->pixel_sizeof);
/* calculate the undo tile offset of the pixel, used to store the original /* calculate the undo tile offset of the pixel, used to store the original
* pixel color and accumulated mask if any */ * pixel color and accumulated mask if any */
@@ -1586,7 +1595,7 @@ static ProjPixel *project_paint_uvpixel_init(
} }
static bool line_clip_rect2f( static bool line_clip_rect2f(
rctf *rect, const rctf *rect,
const float l1[2], const float l2[2], const float l1[2], const float l2[2],
float l1_clip[2], float l2_clip[2]) float l1_clip[2], float l2_clip[2])
{ {
@@ -1801,7 +1810,7 @@ static float len_squared_v2v2_alt(const float v1[2], const float v2_1, const flo
/* note, use a squared value so we can use len_squared_v2v2 /* note, use a squared value so we can use len_squared_v2v2
* be sure that you have done a bounds check first or this may fail */ * be sure that you have done a bounds check first or this may fail */
/* only give bucket_bounds as an arg because we need it elsewhere */ /* only give bucket_bounds as an arg because we need it elsewhere */
static bool project_bucket_isect_circle(const float cent[2], const float radius_squared, rctf *bucket_bounds) static bool project_bucket_isect_circle(const float cent[2], const float radius_squared, const rctf *bucket_bounds)
{ {
/* Would normally to a simple intersection test, however we know the bounds of these 2 already intersect /* Would normally to a simple intersection test, however we know the bounds of these 2 already intersect
@@ -1856,7 +1865,7 @@ static bool project_bucket_isect_circle(const float cent[2], const float radius_
* however switching back to this for ortho is always an option */ * however switching back to this for ortho is always an option */
static void rect_to_uvspace_ortho( static void rect_to_uvspace_ortho(
rctf *bucket_bounds, const rctf *bucket_bounds,
const float *v1coSS, const float *v2coSS, const float *v3coSS, const float *v1coSS, const float *v2coSS, const float *v3coSS,
const float *uv1co, const float *uv2co, const float *uv3co, const float *uv1co, const float *uv2co, const float *uv3co,
float bucket_bounds_uv[4][2], float bucket_bounds_uv[4][2],
@@ -1889,7 +1898,7 @@ static void rect_to_uvspace_ortho(
/* same as above but use barycentric_weights_v2_persp */ /* same as above but use barycentric_weights_v2_persp */
static void rect_to_uvspace_persp( static void rect_to_uvspace_persp(
rctf *bucket_bounds, const rctf *bucket_bounds,
const float *v1coSS, const float *v2coSS, const float *v3coSS, const float *v1coSS, const float *v2coSS, const float *v3coSS,
const float *uv1co, const float *uv2co, const float *uv3co, const float *uv1co, const float *uv2co, const float *uv3co,
float bucket_bounds_uv[4][2], float bucket_bounds_uv[4][2],
@@ -1965,7 +1974,7 @@ static int float_z_sort(const void *p1, const void *p2)
/* assumes one point is within the rectangle */ /* assumes one point is within the rectangle */
static void line_rect_clip( static void line_rect_clip(
rctf *rect, const rctf *rect,
const float l1[4], const float l2[4], const float l1[4], const float l2[4],
const float uv1[2], const float uv2[2], const float uv1[2], const float uv2[2],
float uv[2], bool is_ortho) float uv[2], bool is_ortho)
@@ -1997,7 +2006,7 @@ static void line_rect_clip(
static void project_bucket_clip_face( static void project_bucket_clip_face(
const bool is_ortho, const bool is_ortho,
rctf *bucket_bounds, const rctf *bucket_bounds,
float *v1coSS, float *v2coSS, float *v3coSS, float *v1coSS, float *v2coSS, float *v3coSS,
const float *uv1co, const float *uv2co, const float *uv3co, const float *uv1co, const float *uv2co, const float *uv3co,
float bucket_bounds_uv[8][2], float bucket_bounds_uv[8][2],
@@ -2005,7 +2014,8 @@ static void project_bucket_clip_face(
{ {
int inside_bucket_flag = 0; int inside_bucket_flag = 0;
int inside_face_flag = 0; int inside_face_flag = 0;
const int flip = ((line_point_side_v2(v1coSS, v2coSS, v3coSS) > 0.0f) != (line_point_side_v2(uv1co, uv2co, uv3co) > 0.0f)); const int flip = ((line_point_side_v2(v1coSS, v2coSS, v3coSS) > 0.0f) !=
(line_point_side_v2(uv1co, uv2co, uv3co) > 0.0f));
bool colinear = false; bool colinear = false;
float bucket_bounds_ss[4][2]; float bucket_bounds_ss[4][2];
@@ -2021,7 +2031,8 @@ static void project_bucket_clip_face(
inside_bucket_flag |= BLI_rctf_isect_pt_v(bucket_bounds, v3coSS) << 2; inside_bucket_flag |= BLI_rctf_isect_pt_v(bucket_bounds, v3coSS) << 2;
if (inside_bucket_flag == ISECT_ALL3) { if (inside_bucket_flag == ISECT_ALL3) {
/* all screenspace points are inside the bucket bounding box, this means we don't need to clip and can simply return the UVs */ /* all screenspace points are inside the bucket bounding box,
* this means we don't need to clip and can simply return the UVs */
if (flip) { /* facing the back? */ if (flip) { /* facing the back? */
copy_v2_v2(bucket_bounds_uv[0], uv3co); copy_v2_v2(bucket_bounds_uv[0], uv3co);
copy_v2_v2(bucket_bounds_uv[1], uv2co); copy_v2_v2(bucket_bounds_uv[1], uv2co);
@@ -2206,7 +2217,8 @@ static void project_bucket_clip_face(
for (i = 0; i < (*tot); i++) { for (i = 0; i < (*tot); i++) {
v2_clipSS[0] = isectVCosSS[i][0] - cent[0]; v2_clipSS[0] = isectVCosSS[i][0] - cent[0];
v2_clipSS[1] = isectVCosSS[i][1] - cent[1]; v2_clipSS[1] = isectVCosSS[i][1] - cent[1];
isectVCosSS[i][2] = atan2f(v1_clipSS[0] * v2_clipSS[1] - v1_clipSS[1] * v2_clipSS[0], v1_clipSS[0] * v2_clipSS[0] + v1_clipSS[1] * v2_clipSS[1]); isectVCosSS[i][2] = atan2f(v1_clipSS[0] * v2_clipSS[1] - v1_clipSS[1] * v2_clipSS[0],
v1_clipSS[0] * v2_clipSS[0] + v1_clipSS[1] * v2_clipSS[1]);
} }
if (flip) qsort(isectVCosSS, *tot, sizeof(float) * 3, float_z_sort_flip); if (flip) qsort(isectVCosSS, *tot, sizeof(float) * 3, float_z_sort_flip);
@@ -2261,7 +2273,9 @@ static void project_bucket_clip_face(
int i; int i;
if (is_ortho) rect_to_uvspace_ortho(bucket_bounds, v1coSS, v2coSS, v3coSS, uv1co, uv2co, uv3co, test_uv, flip); if (is_ortho) rect_to_uvspace_ortho(bucket_bounds, v1coSS, v2coSS, v3coSS, uv1co, uv2co, uv3co, test_uv, flip);
else rect_to_uvspace_persp(bucket_bounds, v1coSS, v2coSS, v3coSS, uv1co, uv2co, uv3co, test_uv, flip); else rect_to_uvspace_persp(bucket_bounds, v1coSS, v2coSS, v3coSS, uv1co, uv2co, uv3co, test_uv, flip);
printf("( [(%f,%f), (%f,%f), (%f,%f), (%f,%f)], ", test_uv[0][0], test_uv[0][1], test_uv[1][0], test_uv[1][1], test_uv[2][0], test_uv[2][1], test_uv[3][0], test_uv[3][1]); printf("( [(%f,%f), (%f,%f), (%f,%f), (%f,%f)], ",
test_uv[0][0], test_uv[0][1], test_uv[1][0], test_uv[1][1],
test_uv[2][0], test_uv[2][1], test_uv[3][0], test_uv[3][1]);
printf(" [(%f,%f), (%f,%f), (%f,%f)], ", uv1co[0], uv1co[1], uv2co[0], uv2co[1], uv3co[0], uv3co[1]); printf(" [(%f,%f), (%f,%f), (%f,%f)], ", uv1co[0], uv1co[1], uv2co[0], uv2co[1], uv3co[0], uv3co[1]);
@@ -2359,9 +2373,15 @@ static bool IsectPoly2Df_twoside(const float pt[2], float uv[][2], const int tot
return 1; return 1;
} }
/* One of the most important function for projection painting, since it selects the pixels to be added into each bucket. /* One of the most important function for projection painting,
* initialize pixels from this face where it intersects with the bucket_index, optionally initialize pixels for removing seams */ * since it selects the pixels to be added into each bucket.
static void project_paint_face_init(const ProjPaintState *ps, const int thread_index, const int bucket_index, const int face_index, const int image_index, rctf *bucket_bounds, ImBuf *ibuf, ImBuf **tmpibuf, const short clamp_u, const short clamp_v) *
* initialize pixels from this face where it intersects with the bucket_index,
* optionally initialize pixels for removing seams */
static void project_paint_face_init(
const ProjPaintState *ps,
const int thread_index, const int bucket_index, const int face_index, const int image_index,
const rctf *bucket_bounds, ImBuf *ibuf, ImBuf **tmpibuf, const short clamp_u, const short clamp_v)
{ {
/* Projection vars, to get the 3D locations into screen space */ /* Projection vars, to get the 3D locations into screen space */
MemArena *arena = ps->arena_mt[thread_index]; MemArena *arena = ps->arena_mt[thread_index];
@@ -2825,7 +2845,7 @@ static void project_bucket_bounds(const ProjPaintState *ps, const int bucket_x,
/* Fill this bucket with pixels from the faces that intersect it. /* Fill this bucket with pixels from the faces that intersect it.
* *
* have bucket_bounds as an argument so we don't need to give bucket_x/y the rect function needs */ * have bucket_bounds as an argument so we don't need to give bucket_x/y the rect function needs */
static void project_bucket_init(const ProjPaintState *ps, const int thread_index, const int bucket_index, rctf *bucket_bounds) static void project_bucket_init(const ProjPaintState *ps, const int thread_index, const int bucket_index, const rctf *bucket_bounds)
{ {
LinkNode *node; LinkNode *node;
int face_index, image_index = 0; int face_index, image_index = 0;
@@ -3184,9 +3204,9 @@ static void proj_paint_state_screen_coords_init(ProjPaintState *ps, const int di
static void proj_paint_state_seam_bleed_init(ProjPaintState *ps) static void proj_paint_state_seam_bleed_init(ProjPaintState *ps)
{ {
if (ps->seam_bleed_px > 0.0f) { if (ps->seam_bleed_px > 0.0f) {
ps->vertFaces = (LinkNode **)MEM_callocN(sizeof(LinkNode *) * ps->dm_totvert, "paint-vertFaces"); ps->vertFaces = MEM_callocN(sizeof(LinkNode *) * ps->dm_totvert, "paint-vertFaces");
ps->faceSeamFlags = (char *)MEM_callocN(sizeof(char) * ps->dm_totface, "paint-faceSeamFlags"); ps->faceSeamFlags = MEM_callocN(sizeof(char) * ps->dm_totface, "paint-faceSeamFlags");
ps->faceWindingFlags = (char *)MEM_callocN(sizeof(char) * ps->dm_totface, "paint-faceWindindFlags"); ps->faceWindingFlags = MEM_callocN(sizeof(char) * ps->dm_totface, "paint-faceWindindFlags");
ps->faceSeamUVs = MEM_mallocN(sizeof(float) * ps->dm_totface * 8, "paint-faceSeamUVs"); ps->faceSeamUVs = MEM_mallocN(sizeof(float) * ps->dm_totface * 8, "paint-faceSeamUVs");
} }
} }
@@ -3254,8 +3274,9 @@ static void proj_paint_state_vert_flags_init(ProjPaintState *ps)
} }
#ifndef PROJ_DEBUG_NOSEAMBLEED #ifndef PROJ_DEBUG_NOSEAMBLEED
static void project_paint_bleed_add_face_user(const ProjPaintState *ps, MemArena *arena, static void project_paint_bleed_add_face_user(
const MFace *mf, const int face_index) const ProjPaintState *ps, MemArena *arena,
const MFace *mf, const int face_index)
{ {
/* add face user if we have bleed enabled, set the UV seam flags later */ /* add face user if we have bleed enabled, set the UV seam flags later */
/* annoying but we need to add all faces even ones we never use elsewhere */ /* annoying but we need to add all faces even ones we never use elsewhere */
@@ -3288,8 +3309,8 @@ static bool proj_paint_state_dm_init(ProjPaintState *ps)
} }
else { else {
ps->dm = mesh_get_derived_final( ps->dm = mesh_get_derived_final(
ps->scene, ps->ob, ps->scene, ps->ob,
ps->scene->customdata_mask | CD_MASK_MTFACE | (ps->do_face_sel ? CD_ORIGINDEX : 0)); ps->scene->customdata_mask | CD_MASK_MTFACE | (ps->do_face_sel ? CD_ORIGINDEX : 0));
ps->dm_release = true; ps->dm_release = true;
} }
@@ -3321,8 +3342,9 @@ typedef struct {
TexPaintSlot *slot_clone; TexPaintSlot *slot_clone;
} ProjPaintLayerClone; } ProjPaintLayerClone;
static void proj_paint_layer_clone_init(ProjPaintState *ps, static void proj_paint_layer_clone_init(
ProjPaintLayerClone *layer_clone) ProjPaintState *ps,
ProjPaintLayerClone *layer_clone)
{ {
MTFace *tf_clone_base = NULL; MTFace *tf_clone_base = NULL;
@@ -3347,10 +3369,11 @@ static void proj_paint_layer_clone_init(ProjPaintState *ps,
} }
/* Return true if face should be skipped, false otherwise */ /* Return true if face should be skipped, false otherwise */
static bool project_paint_clone_face_skip(ProjPaintState *ps, static bool project_paint_clone_face_skip(
ProjPaintLayerClone *lc, ProjPaintState *ps,
const TexPaintSlot *slot, ProjPaintLayerClone *lc,
const int face_index) const TexPaintSlot *slot,
const int face_index)
{ {
if (ps->do_layer_clone) { if (ps->do_layer_clone) {
if (ps->do_material_slots) { if (ps->do_material_slots) {
@@ -3390,8 +3413,9 @@ typedef struct {
const int *index_mp_to_orig; const int *index_mp_to_orig;
} ProjPaintFaceLookup; } ProjPaintFaceLookup;
static void proj_paint_face_lookup_init(const ProjPaintState *ps, static void proj_paint_face_lookup_init(
ProjPaintFaceLookup *face_lookup) const ProjPaintState *ps,
ProjPaintFaceLookup *face_lookup)
{ {
memset(face_lookup, 0, sizeof(*face_lookup)); memset(face_lookup, 0, sizeof(*face_lookup));
if (ps->do_face_sel) { if (ps->do_face_sel) {
@@ -3407,9 +3431,10 @@ static void proj_paint_face_lookup_init(const ProjPaintState *ps,
} }
/* Return true if face should be considered selected, false otherwise */ /* Return true if face should be considered selected, false otherwise */
static bool project_paint_check_face_sel(const ProjPaintState *ps, static bool project_paint_check_face_sel(
const ProjPaintFaceLookup *face_lookup, const ProjPaintState *ps,
const MFace *mf, const int face_index) const ProjPaintFaceLookup *face_lookup,
const MFace *mf, const int face_index)
{ {
if (ps->do_face_sel) { if (ps->do_face_sel) {
int orig_index; int orig_index;
@@ -3438,8 +3463,9 @@ typedef struct {
const float *v4; const float *v4;
} ProjPaintFaceCoSS; } ProjPaintFaceCoSS;
static void proj_paint_face_coSS_init(const ProjPaintState *ps, const MFace *mf, static void proj_paint_face_coSS_init(
ProjPaintFaceCoSS *coSS) const ProjPaintState *ps, const MFace *mf,
ProjPaintFaceCoSS *coSS)
{ {
coSS->v1 = ps->screenCoords[mf->v1]; coSS->v1 = ps->screenCoords[mf->v1];
coSS->v2 = ps->screenCoords[mf->v2]; coSS->v2 = ps->screenCoords[mf->v2];
@@ -3448,8 +3474,9 @@ static void proj_paint_face_coSS_init(const ProjPaintState *ps, const MFace *mf,
} }
/* Return true if face should be culled, false otherwise */ /* Return true if face should be culled, false otherwise */
static bool project_paint_flt_max_cull(const ProjPaintState *ps, static bool project_paint_flt_max_cull(
const ProjPaintFaceCoSS *coSS) const ProjPaintState *ps,
const ProjPaintFaceCoSS *coSS)
{ {
if (!ps->is_ortho) { if (!ps->is_ortho) {
if (coSS->v1[0] == FLT_MAX || if (coSS->v1[0] == FLT_MAX ||
@@ -3465,8 +3492,9 @@ static bool project_paint_flt_max_cull(const ProjPaintState *ps,
#ifdef PROJ_DEBUG_WINCLIP #ifdef PROJ_DEBUG_WINCLIP
/* Return true if face should be culled, false otherwise */ /* Return true if face should be culled, false otherwise */
static bool project_paint_winclip(const ProjPaintState *ps, const MFace *mf, static bool project_paint_winclip(
const ProjPaintFaceCoSS *coSS) const ProjPaintState *ps, const MFace *mf,
const ProjPaintFaceCoSS *coSS)
{ {
/* ignore faces outside the view */ /* ignore faces outside the view */
return ((ps->source != PROJ_SRC_VIEW_FILL) && return ((ps->source != PROJ_SRC_VIEW_FILL) &&
@@ -3493,8 +3521,9 @@ static bool project_paint_winclip(const ProjPaintState *ps, const MFace *mf,
#endif //PROJ_DEBUG_WINCLIP #endif //PROJ_DEBUG_WINCLIP
/* Return true if face should be culled, false otherwise */ /* Return true if face should be culled, false otherwise */
static bool project_paint_backface_cull(const ProjPaintState *ps, const MFace *mf, static bool project_paint_backface_cull(
const ProjPaintFaceCoSS *coSS) const ProjPaintState *ps, const MFace *mf,
const ProjPaintFaceCoSS *coSS)
{ {
if (ps->do_backfacecull) { if (ps->do_backfacecull) {
if (ps->do_mask_normal) { if (ps->do_mask_normal) {
@@ -3520,15 +3549,16 @@ static bool project_paint_backface_cull(const ProjPaintState *ps, const MFace *m
return false; return false;
} }
static void project_paint_build_proj_ima(ProjPaintState *ps, MemArena *arena, static void project_paint_build_proj_ima(
LinkNode *image_LinkList) ProjPaintState *ps, MemArena *arena,
LinkNode *image_LinkList)
{ {
ProjPaintImage *projIma; ProjPaintImage *projIma;
LinkNode *node; LinkNode *node;
int i; int i;
/* build an array of images we use */ /* build an array of images we use */
projIma = ps->projImages = (ProjPaintImage *)BLI_memarena_alloc(arena, sizeof(ProjPaintImage) * ps->image_tot); projIma = ps->projImages = BLI_memarena_alloc(arena, sizeof(ProjPaintImage) * ps->image_tot);
for (node = image_LinkList, i = 0; node; node = node->next, i++, projIma++) { for (node = image_LinkList, i = 0; node; node = node->next, i++, projIma++) {
int size; int size;
@@ -3540,17 +3570,18 @@ static void project_paint_build_proj_ima(ProjPaintState *ps, MemArena *arena,
memset(projIma->partRedrawRect, 0, sizeof(ImagePaintPartialRedraw) * PROJ_BOUNDBOX_SQUARED); memset(projIma->partRedrawRect, 0, sizeof(ImagePaintPartialRedraw) * PROJ_BOUNDBOX_SQUARED);
projIma->undoRect = (volatile void **) BLI_memarena_alloc(arena, size); projIma->undoRect = (volatile void **) BLI_memarena_alloc(arena, size);
memset(projIma->undoRect, 0, size); memset(projIma->undoRect, 0, size);
projIma->maskRect = (unsigned short **) BLI_memarena_alloc(arena, size); projIma->maskRect = BLI_memarena_alloc(arena, size);
memset(projIma->maskRect, 0, size); memset(projIma->maskRect, 0, size);
projIma->valid = (bool **) BLI_memarena_alloc(arena, size); projIma->valid = BLI_memarena_alloc(arena, size);
memset(projIma->valid, 0, size); memset(projIma->valid, 0, size);
} }
} }
static void project_paint_prepare_all_faces(ProjPaintState *ps, MemArena *arena, static void project_paint_prepare_all_faces(
const ProjPaintFaceLookup *face_lookup, ProjPaintState *ps, MemArena *arena,
ProjPaintLayerClone *layer_clone, const ProjPaintFaceLookup *face_lookup,
MTFace *tf_base) ProjPaintLayerClone *layer_clone,
MTFace *tf_base)
{ {
/* Image Vars - keep track of images we have used */ /* Image Vars - keep track of images we have used */
LinkNode *image_LinkList = NULL; LinkNode *image_LinkList = NULL;
@@ -3601,7 +3632,7 @@ static void project_paint_prepare_all_faces(ProjPaintState *ps, MemArena *arena,
if (project_paint_clone_face_skip(ps, layer_clone, slot, face_index)) { if (project_paint_clone_face_skip(ps, layer_clone, slot, face_index)) {
continue; continue;
} }
/* tfbase here should be non-null! */ /* tfbase here should be non-null! */
BLI_assert (tf_base != NULL); BLI_assert (tf_base != NULL);
@@ -3723,10 +3754,10 @@ static void project_paint_begin(ProjPaintState *ps)
CLAMP(ps->buckets_x, PROJ_BUCKET_RECT_MIN, PROJ_BUCKET_RECT_MAX); CLAMP(ps->buckets_x, PROJ_BUCKET_RECT_MIN, PROJ_BUCKET_RECT_MAX);
CLAMP(ps->buckets_y, PROJ_BUCKET_RECT_MIN, PROJ_BUCKET_RECT_MAX); CLAMP(ps->buckets_y, PROJ_BUCKET_RECT_MIN, PROJ_BUCKET_RECT_MAX);
ps->bucketRect = (LinkNode **)MEM_callocN(sizeof(LinkNode *) * ps->buckets_x * ps->buckets_y, "paint-bucketRect"); ps->bucketRect = MEM_callocN(sizeof(LinkNode *) * ps->buckets_x * ps->buckets_y, "paint-bucketRect");
ps->bucketFaces = (LinkNode **)MEM_callocN(sizeof(LinkNode *) * ps->buckets_x * ps->buckets_y, "paint-bucketFaces"); ps->bucketFaces = MEM_callocN(sizeof(LinkNode *) * ps->buckets_x * ps->buckets_y, "paint-bucketFaces");
ps->bucketFlags = (unsigned char *)MEM_callocN(sizeof(char) * ps->buckets_x * ps->buckets_y, "paint-bucketFaces"); ps->bucketFlags = MEM_callocN(sizeof(char) * ps->buckets_x * ps->buckets_y, "paint-bucketFaces");
#ifndef PROJ_DEBUG_NOSEAMBLEED #ifndef PROJ_DEBUG_NOSEAMBLEED
proj_paint_state_seam_bleed_init(ps); proj_paint_state_seam_bleed_init(ps);
#endif #endif
@@ -3924,7 +3955,9 @@ static bool project_bucket_iter_init(ProjPaintState *ps, const float mval_f[2])
} }
static bool project_bucket_iter_next(ProjPaintState *ps, int *bucket_index, rctf *bucket_bounds, const float mval[2]) static bool project_bucket_iter_next(
ProjPaintState *ps, int *bucket_index,
rctf *bucket_bounds, const float mval[2])
{ {
const int diameter = 2 * ps->brush_size; const int diameter = 2 * ps->brush_size;
@@ -4638,13 +4671,13 @@ static bool project_paint_op(void *state, const float lastpos[2], const float po
/* thread specific */ /* thread specific */
handles[a].thread_index = a; handles[a].thread_index = a;
handles[a].projImages = (ProjPaintImage *)BLI_memarena_alloc(ps->arena_mt[a], ps->image_tot * sizeof(ProjPaintImage)); handles[a].projImages = BLI_memarena_alloc(ps->arena_mt[a], ps->image_tot * sizeof(ProjPaintImage));
memcpy(handles[a].projImages, ps->projImages, ps->image_tot * sizeof(ProjPaintImage)); memcpy(handles[a].projImages, ps->projImages, ps->image_tot * sizeof(ProjPaintImage));
/* image bounds */ /* image bounds */
for (i = 0; i < ps->image_tot; i++) { for (i = 0; i < ps->image_tot; i++) {
handles[a].projImages[i].partRedrawRect = (ImagePaintPartialRedraw *)BLI_memarena_alloc(ps->arena_mt[a], sizeof(ImagePaintPartialRedraw) * PROJ_BOUNDBOX_SQUARED); handles[a].projImages[i].partRedrawRect = BLI_memarena_alloc(ps->arena_mt[a], sizeof(ImagePaintPartialRedraw) * PROJ_BOUNDBOX_SQUARED);
memcpy(handles[a].projImages[i].partRedrawRect, ps->projImages[i].partRedrawRect, sizeof(ImagePaintPartialRedraw) * PROJ_BOUNDBOX_SQUARED); memcpy(handles[a].projImages[i].partRedrawRect, ps->projImages[i].partRedrawRect, sizeof(ImagePaintPartialRedraw) * PROJ_BOUNDBOX_SQUARED);
} }
@@ -5120,7 +5153,9 @@ static int texture_paint_image_from_view_exec(bContext *C, wmOperator *op)
memcpy(array, rv3d->winmat, sizeof(rv3d->winmat)); array += sizeof(rv3d->winmat) / sizeof(float); memcpy(array, rv3d->winmat, sizeof(rv3d->winmat)); array += sizeof(rv3d->winmat) / sizeof(float);
memcpy(array, rv3d->viewmat, sizeof(rv3d->viewmat)); array += sizeof(rv3d->viewmat) / sizeof(float); memcpy(array, rv3d->viewmat, sizeof(rv3d->viewmat)); array += sizeof(rv3d->viewmat) / sizeof(float);
is_ortho = ED_view3d_clip_range_get(v3d, rv3d, &array[0], &array[1], true); is_ortho = ED_view3d_clip_range_get(v3d, rv3d, &array[0], &array[1], true);
array[2] = is_ortho ? 1.0f : 0.0f; /* using float for a bool is dodgy but since its an extra member in the array... easier then adding a single bool prop */ /* using float for a bool is dodgy but since its an extra member in the array...
* easier then adding a single bool prop */
array[2] = is_ortho ? 1.0f : 0.0f;
IDP_AddToGroup(idgroup, view_data); IDP_AddToGroup(idgroup, view_data);