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:
authorGermano <germano.costa@ig.com.br>2018-05-03 03:26:43 +0300
committerGermano <germano.costa@ig.com.br>2018-05-03 03:26:43 +0300
commite4774c0b2d02d3231c1bdc0097d879b77daa5651 (patch)
treeecd8b972fcca0f954b5ad9c4d0127910a35a3d11 /source/blender/draw/modes/edit_metaball_mode.c
parent36bbf8092903f55a317db94c4f7ca48c216b1a89 (diff)
Metaball: pointers used in `DRW_shgroup_call_dynamic_add` don't need to hold the reference.
Diffstat (limited to 'source/blender/draw/modes/edit_metaball_mode.c')
-rw-r--r--source/blender/draw/modes/edit_metaball_mode.c93
1 files changed, 48 insertions, 45 deletions
diff --git a/source/blender/draw/modes/edit_metaball_mode.c b/source/blender/draw/modes/edit_metaball_mode.c
index f7b7113a4d6..e7b07c36882 100644
--- a/source/blender/draw/modes/edit_metaball_mode.c
+++ b/source/blender/draw/modes/edit_metaball_mode.c
@@ -120,48 +120,10 @@ static void EDIT_METABALL_cache_init(void *vedata)
psl->pass = DRW_pass_create("My Pass", state);
/* Create a shadingGroup using a function in draw_common.c or custom one */
- stl->g_data->group = shgroup_instance_mball_handles(psl->pass, DRW_cache_screenspace_circle_get());
+ stl->g_data->group = shgroup_instance_mball_handles(psl->pass);
}
}
-static void EDIT_METABALL_cache_populate_radius(
- DRWShadingGroup *group, MetaElem *ml, const float scale_xform[3][4],
- const float *radius, const int selection_id)
-{
- const float *color;
- static const float col_radius[3] = {0.63, 0.19, 0.19}; /* 0x3030A0 */
- static const float col_radius_select[3] = {0.94, 0.63, 0.63}; /* 0xA0A0F0 */
-
- if ((ml->flag & SELECT) && (ml->flag & MB_SCALE_RAD)) color = col_radius_select;
- else color = col_radius;
-
- if (selection_id != -1) {
- ml->selcol1 = selection_id;
- DRW_select_load_id(selection_id);
- }
-
- DRW_shgroup_call_dynamic_add(group, scale_xform, radius, color);
-}
-
-static void EDIT_METABALL_cache_populate_stiffness(
- DRWShadingGroup *group, MetaElem *ml, const float scale_xform[3][4],
- const float *radius, const int selection_id)
-{
- const float *color;
- static const float col_stiffness[3] = {0.19, 0.63, 0.19}; /* 0x30A030 */
- static const float col_stiffness_select[3] = {0.63, 0.94, 0.63}; /* 0xA0F0A0 */
-
- if ((ml->flag & SELECT) && !(ml->flag & MB_SCALE_RAD)) color = col_stiffness_select;
- else color = col_stiffness;
-
- if (selection_id != -1) {
- ml->selcol2 = selection_id;
- DRW_select_load_id(selection_id);
- }
-
- DRW_shgroup_call_dynamic_add(group, scale_xform, radius, color);
-}
-
/* Add geometry to shadingGroups. Execute for each objects */
static void EDIT_METABALL_cache_populate(void *vedata, Object *ob)
{
@@ -175,19 +137,60 @@ static void EDIT_METABALL_cache_populate(void *vedata, Object *ob)
if ((ob == draw_ctx->object_edit) || BKE_object_is_in_editmode_and_selected(ob)) {
MetaBall *mb = ob->data;
+ const float *color;
+ const float col_radius[3] = {0.63, 0.19, 0.19}; /* 0x3030A0 */
+ const float col_radius_select[3] = {0.94, 0.63, 0.63}; /* 0xA0A0F0 */
+ const float col_stiffness[3] = {0.19, 0.63, 0.19}; /* 0x30A030 */
+ const float col_stiffness_select[3] = {0.63, 0.94, 0.63}; /* 0xA0F0A0 */
+
const bool is_select = DRW_state_is_select();
int selection_id = 0;
+ float draw_scale_xform[3][4]; /* Matrix of Scale and Translation */
+ {
+ float scamat[3][3];
+ copy_m3_m4(scamat, ob->obmat);
+ /* Get the normalized inverse matrix to extract only
+ * the scale of Scamat */
+ float iscamat[3][3];
+ invert_m3_m3(iscamat, scamat);
+ normalize_m3(iscamat);
+ mul_m3_m3_post(scamat, iscamat);
+
+ copy_v3_v3(draw_scale_xform[0], scamat[0]);
+ copy_v3_v3(draw_scale_xform[1], scamat[1]);
+ copy_v3_v3(draw_scale_xform[2], scamat[2]);
+ }
+
for (MetaElem *ml = mb->editelems->first; ml != NULL; ml = ml->next) {
- BKE_mball_element_calc_scale_xform(ml->draw_scale_xform, ob->obmat, &ml->x);
- ml->draw_stiffness_radius = ml->rad * atanf(ml->s) / (float)M_PI_2;
+ float world_pos[3];
+ mul_v3_m4v3(world_pos, ob->obmat, &ml->x);
+ draw_scale_xform[0][3] = world_pos[0];
+ draw_scale_xform[1][3] = world_pos[1];
+ draw_scale_xform[2][3] = world_pos[2];
+
+ float draw_stiffness_radius = ml->rad * atanf(ml->s) / (float)M_PI_2;
+
+ if ((ml->flag & SELECT) && (ml->flag & MB_SCALE_RAD)) color = col_radius_select;
+ else color = col_radius;
+
+ if (is_select) {
+ ml->selcol1 = ++selection_id;
+ DRW_select_load_id(selection_id);
+ }
+
+ DRW_shgroup_call_dynamic_add(group, draw_scale_xform, &ml->rad, color);
+
+ if ((ml->flag & SELECT) && !(ml->flag & MB_SCALE_RAD)) color = col_stiffness_select;
+ else color = col_stiffness;
- EDIT_METABALL_cache_populate_radius(
- group, ml, ml->draw_scale_xform, &ml->rad, is_select ? ++selection_id : -1);
+ if (is_select) {
+ ml->selcol2 = ++selection_id;
+ DRW_select_load_id(selection_id);
+ }
- EDIT_METABALL_cache_populate_stiffness(
- group, ml, ml->draw_scale_xform, &ml->draw_stiffness_radius, is_select ? ++selection_id : -1);
+ DRW_shgroup_call_dynamic_add(group, draw_scale_xform, &draw_stiffness_radius, color);
}
}
}