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:
authorCampbell Barton <ideasman42@gmail.com>2018-05-02 15:40:00 +0300
committerCampbell Barton <ideasman42@gmail.com>2018-05-02 15:40:00 +0300
commit5659d8bc0aa334aee20f29548e048f3002f1cff6 (patch)
tree924286c8a2cac613491de5fabb6208192960f58a /source/blender/blenkernel
parent23fe6e7eab3a728f1d1c6df2cef97ad02c222d37 (diff)
parent522bee3fc838c83b377d0e05fef8299a29ae5a16 (diff)
Merge branch 'master' into blender2.8
Diffstat (limited to 'source/blender/blenkernel')
-rw-r--r--source/blender/blenkernel/BKE_bvhutils.h7
-rw-r--r--source/blender/blenkernel/intern/bvhutils.c23
-rw-r--r--source/blender/blenkernel/intern/constraint.c4
-rw-r--r--source/blender/blenkernel/intern/mesh_remap.c33
-rw-r--r--source/blender/blenkernel/intern/paint.c3
-rw-r--r--source/blender/blenkernel/intern/shrinkwrap.c4
6 files changed, 50 insertions, 24 deletions
diff --git a/source/blender/blenkernel/BKE_bvhutils.h b/source/blender/blenkernel/BKE_bvhutils.h
index b3122f8adb9..33e88a6b8f8 100644
--- a/source/blender/blenkernel/BKE_bvhutils.h
+++ b/source/blender/blenkernel/BKE_bvhutils.h
@@ -113,8 +113,6 @@ BVHTree *bvhtree_from_editmesh_verts_ex(
const BLI_bitmap *mask, int verts_num_active,
float epsilon, int tree_type, int axis);
-BVHTree *bvhtree_from_mesh_verts(
- struct BVHTreeFromMesh *data, struct DerivedMesh *mesh, float epsilon, int tree_type, int axis);
BVHTree *bvhtree_from_mesh_verts_ex(
struct BVHTreeFromMesh *data, const struct MVert *vert, const int numVerts,
const bool vert_allocated, const BLI_bitmap *mask, int verts_num_active,
@@ -138,9 +136,6 @@ BVHTree *bvhtree_from_mesh_edges_ex(
const BLI_bitmap *edges_mask, int edges_num_active,
float epsilon, int tree_type, int axis);
-BVHTree *bvhtree_from_mesh_faces(
- struct BVHTreeFromMesh *data, struct DerivedMesh *mesh, float epsilon,
- int tree_type, int axis);
BVHTree *bvhtree_from_mesh_faces_ex(
struct BVHTreeFromMesh *data,
const struct MVert *vert, const bool vert_allocated,
@@ -166,6 +161,8 @@ BVHTree *bvhtree_from_mesh_looptri_ex(
const BLI_bitmap *mask, int looptri_num_active,
float epsilon, int tree_type, int axis);
+BVHTree *bvhtree_from_mesh_get(struct BVHTreeFromMesh *data, struct DerivedMesh *mesh, int type);
+
/**
* Frees data allocated by a call to bvhtree_from_mesh_*.
*/
diff --git a/source/blender/blenkernel/intern/bvhutils.c b/source/blender/blenkernel/intern/bvhutils.c
index cd2c7194237..90a75b8d3cc 100644
--- a/source/blender/blenkernel/intern/bvhutils.c
+++ b/source/blender/blenkernel/intern/bvhutils.c
@@ -501,7 +501,7 @@ BVHTree *bvhtree_from_editmesh_verts(
/* Builds a bvh tree where nodes are the vertices of the given dm
* and stores the BVHTree in dm->bvhCache */
-BVHTree *bvhtree_from_mesh_verts(
+static BVHTree *bvhtree_from_mesh_verts(
BVHTreeFromMesh *data, DerivedMesh *dm,
float epsilon, int tree_type, int axis)
{
@@ -859,7 +859,7 @@ static void bvhtree_from_mesh_faces_setup_data(
}
/* Builds a bvh tree where nodes are the tesselated faces of the given dm */
-BVHTree *bvhtree_from_mesh_faces(
+static BVHTree *bvhtree_from_mesh_faces(
BVHTreeFromMesh *data, DerivedMesh *dm,
float epsilon, int tree_type, int axis)
{
@@ -1225,6 +1225,25 @@ BVHTree *bvhtree_from_mesh_looptri_ex(
return tree;
}
+/**
+ * Builds or queries a bvhcache for the cache bvhtree of the request type.
+ */
+BVHTree *bvhtree_from_mesh_get(
+ struct BVHTreeFromMesh *data, struct DerivedMesh *mesh, int type)
+{
+ switch (type) {
+ case BVHTREE_FROM_VERTS:
+ return bvhtree_from_mesh_verts(data, mesh, 0.0f, 2, 6);
+ case BVHTREE_FROM_EDGES:
+ return bvhtree_from_mesh_edges(data, mesh, 0.0f, 2, 6);
+ case BVHTREE_FROM_FACES:
+ return bvhtree_from_mesh_faces(data, mesh, 0.0f, 2, 6);
+ case BVHTREE_FROM_LOOPTRI:
+ return bvhtree_from_mesh_looptri(data, mesh, 0.0f, 2, 6);
+ }
+ return NULL;
+}
+
/** \} */
diff --git a/source/blender/blenkernel/intern/constraint.c b/source/blender/blenkernel/intern/constraint.c
index b58028b4a5d..12a16e9a8b1 100644
--- a/source/blender/blenkernel/intern/constraint.c
+++ b/source/blender/blenkernel/intern/constraint.c
@@ -3431,9 +3431,9 @@ static void shrinkwrap_get_tarmat(struct Depsgraph *UNUSED(depsgraph), bConstrai
nearest.dist_sq = FLT_MAX;
if (scon->shrinkType == MOD_SHRINKWRAP_NEAREST_VERTEX)
- bvhtree_from_mesh_verts(&treeData, target, 0.0, 2, 6);
+ bvhtree_from_mesh_get(&treeData, target, BVHTREE_FROM_VERTS);
else
- bvhtree_from_mesh_looptri(&treeData, target, 0.0, 2, 6);
+ bvhtree_from_mesh_get(&treeData, target, BVHTREE_FROM_LOOPTRI);
if (treeData.tree == NULL) {
fail = true;
diff --git a/source/blender/blenkernel/intern/mesh_remap.c b/source/blender/blenkernel/intern/mesh_remap.c
index 0af4dae4506..f99dd5574b2 100644
--- a/source/blender/blenkernel/intern/mesh_remap.c
+++ b/source/blender/blenkernel/intern/mesh_remap.c
@@ -131,7 +131,7 @@ float BKE_mesh_remap_calc_difference_from_dm(
float result = 0.0f;
int i;
- bvhtree_from_mesh_verts(&treedata, dm_src, 0.0f, 2, 6);
+ bvhtree_from_mesh_get(&treedata, dm_src, BVHTREE_FROM_VERTS);
nearest.index = -1;
for (i = 0; i < numverts_dst; i++) {
@@ -460,7 +460,7 @@ void BKE_mesh_remap_calc_verts_from_dm(
float tmp_co[3], tmp_no[3];
if (mode == MREMAP_MODE_VERT_NEAREST) {
- bvhtree_from_mesh_verts(&treedata, dm_src, 0.0f, 2, 6);
+ bvhtree_from_mesh_get(&treedata, dm_src, BVHTREE_FROM_VERTS);
nearest.index = -1;
for (i = 0; i < numverts_dst; i++) {
@@ -485,7 +485,7 @@ void BKE_mesh_remap_calc_verts_from_dm(
float (*vcos_src)[3] = MEM_mallocN(sizeof(*vcos_src) * (size_t)dm_src->getNumVerts(dm_src), __func__);
dm_src->getVertCos(dm_src, vcos_src);
- bvhtree_from_mesh_edges(&treedata, dm_src, 0.0f, 2, 6);
+ bvhtree_from_mesh_get(&treedata, dm_src, BVHTREE_FROM_EDGES);
nearest.index = -1;
for (i = 0; i < numverts_dst; i++) {
@@ -543,7 +543,13 @@ void BKE_mesh_remap_calc_verts_from_dm(
float *weights = MEM_mallocN(sizeof(*weights) * tmp_buff_size, __func__);
dm_src->getVertCos(dm_src, vcos_src);
- bvhtree_from_mesh_looptri(&treedata, dm_src, (mode & MREMAP_USE_NORPROJ) ? ray_radius : 0.0f, 2, 6);
+ if (mode & MREMAP_USE_NORPROJ) {
+ bvhtree_from_mesh_looptri(
+ &treedata, dm_src, ray_radius, 2, 6);
+ }
+ else {
+ bvhtree_from_mesh_get(&treedata, dm_src, BVHTREE_FROM_LOOPTRI);
+ }
if (mode == MREMAP_MODE_VERT_POLYINTERP_VNORPROJ) {
for (i = 0; i < numverts_dst; i++) {
@@ -676,7 +682,7 @@ void BKE_mesh_remap_calc_edges_from_dm(
dm_src->getVertCos(dm_src, vcos_src);
- bvhtree_from_mesh_verts(&treedata, dm_src, 0.0f, 2, 6);
+ bvhtree_from_mesh_get(&treedata, dm_src, BVHTREE_FROM_VERTS);
nearest.index = -1;
for (i = 0; i < numedges_dst; i++) {
@@ -776,7 +782,7 @@ void BKE_mesh_remap_calc_edges_from_dm(
MEM_freeN(vert_to_edge_src_map_mem);
}
else if (mode == MREMAP_MODE_EDGE_NEAREST) {
- bvhtree_from_mesh_edges(&treedata, dm_src, 0.0f, 2, 6);
+ bvhtree_from_mesh_get(&treedata, dm_src, BVHTREE_FROM_EDGES);
nearest.index = -1;
for (i = 0; i < numedges_dst; i++) {
@@ -803,7 +809,7 @@ void BKE_mesh_remap_calc_edges_from_dm(
float (*vcos_src)[3] = MEM_mallocN(sizeof(*vcos_src) * (size_t)dm_src->getNumVerts(dm_src), __func__);
dm_src->getVertCos(dm_src, vcos_src);
- bvhtree_from_mesh_looptri(&treedata, dm_src, 0.0f, 2, 6);
+ bvhtree_from_mesh_get(&treedata, dm_src, BVHTREE_FROM_LOOPTRI);
for (i = 0; i < numedges_dst; i++) {
interp_v3_v3v3(tmp_co, verts_dst[edges_dst[i].v1].co, verts_dst[edges_dst[i].v2].co, 0.5f);
@@ -1360,7 +1366,7 @@ void BKE_mesh_remap_calc_loops_from_dm(
}
else {
BLI_assert(num_trees == 1);
- bvhtree_from_mesh_verts(&treedata[0], dm_src, bvh_epsilon, 2, 6);
+ bvhtree_from_mesh_get(&treedata[0], dm_src, BVHTREE_FROM_VERTS);
}
}
else { /* We use polygons. */
@@ -2007,10 +2013,13 @@ void BKE_mesh_remap_calc_polys_from_dm(
BVHTreeRayHit rayhit = {0};
float hit_dist;
- bvhtree_from_mesh_looptri(
- &treedata, dm_src,
- (mode & MREMAP_USE_NORPROJ) ? MREMAP_RAYCAST_APPROXIMATE_BVHEPSILON(ray_radius) : 0.0f,
- 2, 6);
+ if (mode & MREMAP_USE_NORPROJ) {
+ bvhtree_from_mesh_looptri(
+ &treedata, dm_src, MREMAP_RAYCAST_APPROXIMATE_BVHEPSILON(ray_radius), 2, 6);
+ }
+ else {
+ bvhtree_from_mesh_get(&treedata, dm_src, BVHTREE_FROM_LOOPTRI);
+ }
if (mode == MREMAP_MODE_POLY_NEAREST) {
nearest.index = -1;
diff --git a/source/blender/blenkernel/intern/paint.c b/source/blender/blenkernel/intern/paint.c
index 4056a15fe47..a63777dd5ad 100644
--- a/source/blender/blenkernel/intern/paint.c
+++ b/source/blender/blenkernel/intern/paint.c
@@ -214,7 +214,8 @@ Paint *BKE_paint_get_active_from_context(const bContext *C)
}
}
else {
- return BKE_paint_get_active(sce, view_layer);
+ /* default to image paint */
+ return &ts->imapaint.paint;
}
}
diff --git a/source/blender/blenkernel/intern/shrinkwrap.c b/source/blender/blenkernel/intern/shrinkwrap.c
index 618f495dbf1..0d381248ef2 100644
--- a/source/blender/blenkernel/intern/shrinkwrap.c
+++ b/source/blender/blenkernel/intern/shrinkwrap.c
@@ -158,7 +158,7 @@ static void shrinkwrap_calc_nearest_vertex(ShrinkwrapCalcData *calc)
return;
}
- TIMEIT_BENCH(bvhtree_from_mesh_verts(&treeData, calc->target, 0.0, 2, 6), bvhtree_verts);
+ TIMEIT_BENCH(bvhtree_from_mesh_get(&treeData, calc->target, BVHTREE_FROM_VERTS), bvhtree_verts);
if (treeData.tree == NULL) {
OUT_OF_MEMORY();
return;
@@ -588,7 +588,7 @@ static void shrinkwrap_calc_nearest_surface_point(ShrinkwrapCalcData *calc)
}
/* Create a bvh-tree of the given target */
- bvhtree_from_mesh_looptri(&treeData, calc->target, 0.0, 2, 6);
+ bvhtree_from_mesh_get(&treeData, calc->target, BVHTREE_FROM_LOOPTRI);
if (treeData.tree == NULL) {
OUT_OF_MEMORY();
return;