Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAntonio Vazquez <blendergit@gmail.com>2020-08-18 12:03:29 +0300
committerAntonio Vazquez <blendergit@gmail.com>2020-08-18 12:03:29 +0300
commitde7470645a30e7bc6db67eff64d11778fb5ee3f2 (patch)
tree0e63bf0108c952ac7ada93a368cd1291d0555ac3 /source/blender/blenkernel
parent3f0e2dba681f04bb70e06328d5c6439ce1290896 (diff)
parentbe30023c68d463ec8d12b1b848bebf5fa7a2c288 (diff)
Merge branch 'master' into greasepencil-edit-curve
Diffstat (limited to 'source/blender/blenkernel')
-rw-r--r--source/blender/blenkernel/intern/cloth.c13
-rw-r--r--source/blender/blenkernel/intern/seqcache.c1
-rw-r--r--source/blender/blenkernel/intern/seqeffects.c67
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;