[Bf-blender-cvs] [fc9f6b2] soc-2016-pbvh-painting: Now free'ing maps. Removed unused function.
Nathan Vollmer
noreply at git.blender.org
Sun Jun 12 07:20:08 CEST 2016
Commit: fc9f6b216cd641251c8c92e1edf8195495edd633
Author: Nathan Vollmer
Date: Sat Jun 11 23:20:02 2016 -0600
Branches: soc-2016-pbvh-painting
https://developer.blender.org/rBfc9f6b216cd641251c8c92e1edf8195495edd633
Now free'ing maps. Removed unused function.
===================================================================
M source/blender/editors/sculpt_paint/paint_vertex.c
M source/blender/editors/sculpt_paint/sculpt_intern.h
===================================================================
diff --git a/source/blender/editors/sculpt_paint/paint_vertex.c b/source/blender/editors/sculpt_paint/paint_vertex.c
index 7272144..b22d335 100644
--- a/source/blender/editors/sculpt_paint/paint_vertex.c
+++ b/source/blender/editors/sculpt_paint/paint_vertex.c
@@ -2036,6 +2036,7 @@ static void vwpaint_update_cache_invariants(bContext *C, VPaint *vd, SculptSessi
cache->bstrength = BKE_brush_alpha_get(scene, brush);
cache->nodes = MEM_callocN(sizeof(PBVHNode*), "PBVH node ptr");
+ cache->loopsGenerated = false;
}
/* Initialize the stroke cache variants from operator properties */
@@ -3046,6 +3047,7 @@ static void do_mask_brush_draw_task_cb_ex(
unsigned int *lcol = data->lcol;
unsigned int *lcolorig = data->vp->vpaint_prev;
+ //for each vertex
PBVHVertexIter vd;
BKE_pbvh_vertex_iter_begin(ss->pbvh, data->nodes[n], vd, PBVH_ITER_UNIQUE)
{
@@ -3069,6 +3071,8 @@ static void do_mask_brush_draw_task_cb_ex(
}
BKE_pbvh_vertex_iter_end;
}
+ //Free the map
+ MEM_freeN(vert_to_loop);
}
static void vpaint_paint_leaves(Sculpt *sd, VPaint *vp, VPaintData *vpd, Object *ob, Mesh *me, PBVHNode **nodes, int totnode)
@@ -3087,51 +3091,6 @@ static void vpaint_paint_leaves(Sculpt *sd, VPaint *vp, VPaintData *vpd, Object
((sd->flags & SCULPT_USE_OPENMP) && totnode > SCULPT_THREADED_LIMIT), false);
}
-static void vpaint_paint_leaf(bContext *C, Mesh *me, VPaintData *vpd, SculptSession *ss, PointerRNA *itemptr) {
- StrokeCache* cache = ss->cache;
-
- int r_unique = 0;
- int r_total = 0;
- int* r_vert_indices;
- MeshElemMap *r_map = NULL;
- Scene *scene = CTX_data_scene(C);
- ToolSettings *ts = CTX_data_tool_settings(C);
- VPaint *vp = ts->vpaint;
- Brush *brush = BKE_paint_brush(&vp->paint);
-
- const float pressure = RNA_float_get(itemptr, "pressure");
- const float brush_size_pressure =
- BKE_brush_size_get(scene, brush) * (BKE_brush_use_size_pressure(scene, brush) ? pressure : 1.0f);
- const float brush_alpha_pressure =
- BKE_brush_alpha_get(scene, brush) * (BKE_brush_use_alpha_pressure(scene, brush) ? pressure : 1.0f);
-
- //Only recalculate the map if the PBVH nodes have changed.
- //Currently only setup to work with one selected PBVH node.
- if (cache->didNodeChange == true) {
- int *r_mem = NULL;
- MVert* r_verts;
- BKE_pbvh_node_num_verts(ss->pbvh, cache->nodes[0], &r_unique, &cache->totVerts);
- BKE_pbvh_node_get_verts(ss->pbvh, cache->nodes[0], &cache->vert_indices, &r_verts);
- BKE_mesh_vert_loop_map_create(&cache->vert_to_loop, &r_mem, me->mpoly, me->mloop, me->totvert, me->totpoly, me->totloop);
- }
-
- unsigned int* lcol = (unsigned int*)me->mloopcol;
-
- SculptBrushTest test;
- sculpt_brush_test_init(ss, &test);
- for (int i = 0; i < cache->totVerts; ++i) {
- MVert vert = me->mvert[cache->vert_indices[i]];
- //Test to see if the vertex coordinates are within the spherical brush region.
- if (sculpt_brush_test(&test, vert.co)) {
- int vertexIndex = cache->vert_indices[i];
- for (int j = 0; j < cache->vert_to_loop[vertexIndex].count; ++j) {
- int loopIndex = cache->vert_to_loop[vertexIndex].indices[j];
- vpaint_paint_loop(vp, vpd, me, loopIndex, brush_size_pressure, brush_alpha_pressure);
- }
- }
- }
-}
-
static void vpaint_stroke_update_step(bContext *C, struct PaintStroke *stroke, PointerRNA *itemptr)
{
Scene *scene = CTX_data_scene(C);
@@ -3190,7 +3149,7 @@ static void vpaint_stroke_update_step(bContext *C, struct PaintStroke *stroke, P
memset(vpd->mlooptag, 0, sizeof(bool) * me->totloop);
- //Logic will change to "for each leaf within the brush region".
+
SculptSession *ss = ob->sculpt;
SculptSearchSphereData data;
PBVHNode **nodes = NULL;
@@ -3200,18 +3159,13 @@ static void vpaint_stroke_update_step(bContext *C, struct PaintStroke *stroke, P
data.ss = ss;
data.sd = sd;
data.radius_squared = ss->cache->radius_squared;
- data.original = true;// sculpt_tool_needs_original(brush->sculpt_tool) ? true : ss->cache->original;
+ data.original = true;
BKE_pbvh_search_gather(ss->pbvh, sculpt_search_sphere_cb, &data, &nodes, &totnode);
+ //Paint those leaves.
vpaint_paint_leaves(sd, vp, vpd, ob, me, nodes, totnode);
- //vpaint_paint_leaf(C, me, vpd, ob->sculpt, itemptr);
-
- //for (index = 0; index < totindex; index++) {
- //if (indexar[index] && indexar[index] <= me->totpoly) {
- //vpaint_paint_poly(vp, vpd, me, indexar[index] - 1, mval, brush_size_pressure, brush_alpha_pressure);
- //}
- //}
-
+
+
swap_m4m4(vc->rv3d->persmat, mat);
/* was disabled because it is slow, but necessary for blur */
diff --git a/source/blender/editors/sculpt_paint/sculpt_intern.h b/source/blender/editors/sculpt_paint/sculpt_intern.h
index aa2d889..8aa5927 100644
--- a/source/blender/editors/sculpt_paint/sculpt_intern.h
+++ b/source/blender/editors/sculpt_paint/sculpt_intern.h
@@ -231,6 +231,8 @@ typedef struct StrokeCache {
int totVerts;
int* vert_indices;
MeshElemMap* vert_to_loop;
+ //Temporary fix to map generation.
+ bool loopsGenerated;
} StrokeCache;
More information about the Bf-blender-cvs
mailing list