diff options
author | Antonio Vazquez <blendergit@gmail.com> | 2020-08-18 12:03:29 +0300 |
---|---|---|
committer | Antonio Vazquez <blendergit@gmail.com> | 2020-08-18 12:03:29 +0300 |
commit | de7470645a30e7bc6db67eff64d11778fb5ee3f2 (patch) | |
tree | 0e63bf0108c952ac7ada93a368cd1291d0555ac3 /source/blender/blenkernel | |
parent | 3f0e2dba681f04bb70e06328d5c6439ce1290896 (diff) | |
parent | be30023c68d463ec8d12b1b848bebf5fa7a2c288 (diff) |
Merge branch 'master' into greasepencil-edit-curve
Diffstat (limited to 'source/blender/blenkernel')
-rw-r--r-- | source/blender/blenkernel/intern/cloth.c | 13 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/seqcache.c | 1 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/seqeffects.c | 67 |
3 files changed, 38 insertions, 43 deletions
diff --git a/source/blender/blenkernel/intern/cloth.c b/source/blender/blenkernel/intern/cloth.c index 027761335b0..24b4b85d0d4 100644 --- a/source/blender/blenkernel/intern/cloth.c +++ b/source/blender/blenkernel/intern/cloth.c @@ -1611,7 +1611,6 @@ static int cloth_build_springs(ClothModifierData *clmd, Mesh *mesh) if (use_internal_springs && numpolys > 0) { BVHTreeFromMesh treedata = {NULL}; unsigned int tar_v_idx; - BLI_bitmap *verts_used = NULL; Mesh *tmp_mesh = NULL; RNG *rng; @@ -1622,7 +1621,7 @@ static int cloth_build_springs(ClothModifierData *clmd, Mesh *mesh) BKE_mesh_calc_normals(tmp_mesh); } - verts_used = BLI_BITMAP_NEW(mvert_num * mvert_num, __func__); + EdgeSet *existing_vert_pairs = BLI_edgeset_new("cloth_sewing_edges_graph"); BKE_bvhtree_from_mesh_get(&treedata, tmp_mesh ? tmp_mesh : mesh, BVHTREE_FROM_LOOPTRI, 2); rng = BLI_rng_new_srandom(0); @@ -1635,12 +1634,12 @@ static int cloth_build_springs(ClothModifierData *clmd, Mesh *mesh) clmd->sim_parms->internal_spring_max_diversion, (clmd->sim_parms->flags & CLOTH_SIMSETTINGS_FLAG_INTERNAL_SPRINGS_NORMAL), &tar_v_idx)) { - if (BLI_BITMAP_TEST_BOOL(verts_used, i * mvert_num + tar_v_idx)) { + if (BLI_edgeset_haskey(existing_vert_pairs, i, tar_v_idx)) { + /* We have already created a spring between these verts! */ continue; } - BLI_BITMAP_ENABLE(verts_used, i * mvert_num + tar_v_idx); - BLI_BITMAP_ENABLE(verts_used, tar_v_idx * mvert_num + i); + BLI_edgeset_insert(existing_vert_pairs, i, tar_v_idx); spring = (ClothSpring *)MEM_callocN(sizeof(ClothSpring), "cloth spring"); @@ -1666,7 +1665,7 @@ static int cloth_build_springs(ClothModifierData *clmd, Mesh *mesh) } else { cloth_free_errorsprings(cloth, edgelist, spring_ref); - MEM_freeN(verts_used); + BLI_edgeset_free(existing_vert_pairs); free_bvhtree_from_mesh(&treedata); if (tmp_mesh) { BKE_mesh_free(tmp_mesh); @@ -1675,7 +1674,7 @@ static int cloth_build_springs(ClothModifierData *clmd, Mesh *mesh) } } } - MEM_freeN(verts_used); + BLI_edgeset_free(existing_vert_pairs); free_bvhtree_from_mesh(&treedata); if (tmp_mesh) { BKE_mesh_free(tmp_mesh); diff --git a/source/blender/blenkernel/intern/seqcache.c b/source/blender/blenkernel/intern/seqcache.c index 3d1f33190dc..7d2858050be 100644 --- a/source/blender/blenkernel/intern/seqcache.c +++ b/source/blender/blenkernel/intern/seqcache.c @@ -1326,6 +1326,7 @@ void BKE_sequencer_cache_put(const SeqRenderData *context, context = BKE_sequencer_prefetch_get_original_context(context); scene = context->scene; seq = BKE_sequencer_prefetch_get_original_sequence(seq, scene); + BLI_assert(seq != NULL); } /* Prevent reinserting, it breaks cache key linking. */ diff --git a/source/blender/blenkernel/intern/seqeffects.c b/source/blender/blenkernel/intern/seqeffects.c index afec9b835a5..c6daecbcee6 100644 --- a/source/blender/blenkernel/intern/seqeffects.c +++ b/source/blender/blenkernel/intern/seqeffects.c @@ -2387,6 +2387,8 @@ static void copy_transform_effect(Sequence *dst, Sequence *src, const int UNUSED static void transform_image(int x, int y, + int start_line, + int total_lines, ImBuf *ibuf1, ImBuf *out, float scale_x, @@ -2396,34 +2398,27 @@ static void transform_image(int x, float rotate, int interpolation) { - int xo, yo, xi, yi; - float xt, yt, xr, yr; - float s, c; - - xo = x; - yo = y; - /* Rotate */ - s = sinf(rotate); - c = cosf(rotate); + float s = sinf(rotate); + float c = cosf(rotate); - for (yi = 0; yi < yo; yi++) { - for (xi = 0; xi < xo; xi++) { + for (int yi = start_line; yi < start_line + total_lines; yi++) { + for (int xi = 0; xi < x; xi++) { /* translate point */ - xt = xi - translate_x; - yt = yi - translate_y; + float xt = xi - translate_x; + float yt = yi - translate_y; /* rotate point with center ref */ - xr = c * xt + s * yt; - yr = -s * xt + c * yt; + float xr = c * xt + s * yt; + float yr = -s * xt + c * yt; /* scale point with center ref */ xt = xr / scale_x; yt = yr / scale_y; /* undo reference center point */ - xt += (xo / 2.0f); - yt += (yo / 2.0f); + xt += (x / 2.0f); + yt += (y / 2.0f); /* interpolate */ switch (interpolation) { @@ -2441,9 +2436,19 @@ static void transform_image(int x, } } -static void do_transform( - Scene *scene, Sequence *seq, float UNUSED(facf0), int x, int y, ImBuf *ibuf1, ImBuf *out) +static void do_transform_effect(const SeqRenderData *context, + Sequence *seq, + float UNUSED(cfra), + float UNUSED(facf0), + float UNUSED(facf1), + ImBuf *ibuf1, + ImBuf *UNUSED(ibuf2), + ImBuf *UNUSED(ibuf3), + int start_line, + int total_lines, + ImBuf *out) { + Scene *scene = context->scene; TransformVars *transform = (TransformVars *)seq->effectdata; float scale_x, scale_y, translate_x, translate_y, rotate_radians; @@ -2456,6 +2461,9 @@ static void do_transform( scale_y = transform->ScaleyIni; } + int x = context->rectx; + int y = context->recty; + /* Translate */ if (!transform->percent) { float rd_s = (scene->r.size / 100.0f); @@ -2473,6 +2481,8 @@ static void do_transform( transform_image(x, y, + start_line, + total_lines, ibuf1, out, scale_x, @@ -2483,22 +2493,6 @@ static void do_transform( transform->interpolation); } -static ImBuf *do_transform_effect(const SeqRenderData *context, - Sequence *seq, - float UNUSED(cfra), - float facf0, - float UNUSED(facf1), - ImBuf *ibuf1, - ImBuf *ibuf2, - ImBuf *ibuf3) -{ - ImBuf *out = prepare_effect_imbufs(context, ibuf1, ibuf2, ibuf3); - - do_transform(context->scene, seq, facf0, context->rectx, context->recty, ibuf1, out); - - return out; -} - /*********************** Glow *************************/ static void RVBlurBitmap2_float(float *map, int width, int height, float blur, int quality) @@ -4183,11 +4177,12 @@ static struct SeqEffectHandle get_sequence_effect_impl(int seq_type) rval.execute = do_glow_effect; break; case SEQ_TYPE_TRANSFORM: + rval.multithreaded = true; rval.init = init_transform_effect; rval.num_inputs = num_inputs_transform; rval.free = free_transform_effect; rval.copy = copy_transform_effect; - rval.execute = do_transform_effect; + rval.execute_slice = do_transform_effect; break; case SEQ_TYPE_SPEED: rval.init = init_speed_effect; |