[Bf-blender-cvs] [7282ecc6727] tmp-overlay-engine: Overlay Engine: MetaBall
Clément Foucault
noreply at git.blender.org
Mon Nov 18 20:15:22 CET 2019
Commit: 7282ecc6727867216243fe351c28455dac05e716
Author: Clément Foucault
Date: Sat Nov 16 17:26:31 2019 +0100
Branches: tmp-overlay-engine
https://developer.blender.org/rB7282ecc6727867216243fe351c28455dac05e716
Overlay Engine: MetaBall
Note: This also improve handles positioning using the armature point shader
===================================================================
M source/blender/draw/CMakeLists.txt
M source/blender/draw/engines/overlay/overlay_armature.c
M source/blender/draw/engines/overlay/overlay_engine.c
M source/blender/draw/engines/overlay/overlay_extra.c
A source/blender/draw/engines/overlay/overlay_metaball.c
M source/blender/draw/engines/overlay/overlay_private.h
===================================================================
diff --git a/source/blender/draw/CMakeLists.txt b/source/blender/draw/CMakeLists.txt
index 5843fe9710e..180588c4c06 100644
--- a/source/blender/draw/CMakeLists.txt
+++ b/source/blender/draw/CMakeLists.txt
@@ -143,6 +143,7 @@ set(SRC
engines/overlay/overlay_facing.c
engines/overlay/overlay_grid.c
engines/overlay/overlay_image.c
+ engines/overlay/overlay_metaball.c
engines/overlay/overlay_motion_path.c
engines/overlay/overlay_outline.c
engines/overlay/overlay_shader.c
diff --git a/source/blender/draw/engines/overlay/overlay_armature.c b/source/blender/draw/engines/overlay/overlay_armature.c
index a5f42360727..dd64dbc22bc 100644
--- a/source/blender/draw/engines/overlay/overlay_armature.c
+++ b/source/blender/draw/engines/overlay/overlay_armature.c
@@ -243,25 +243,6 @@ void OVERLAY_armature_cache_init(OVERLAY_Data *vedata)
/** \name Shader Groups (DRW_shgroup)
* \{ */
-typedef struct BoneInstanceData {
- /* Keep sync with bone instance vertex format (OVERLAY_InstanceFormats) */
- union {
- float mat[4][4];
- struct {
- float _pad0[3], color_hint_a;
- float _pad1[3], color_hint_b;
- float _pad2[3], color_a;
- float _pad3[3], color_b;
- };
- struct {
- float _pad00[3], amin_a;
- float _pad01[3], amin_b;
- float _pad02[3], amax_a;
- float _pad03[3], amax_b;
- };
- };
-} BoneInstanceData;
-
static void bone_instance_data_set_angle_minmax(BoneInstanceData *data,
const float aminx,
const float aminz,
@@ -274,14 +255,14 @@ static void bone_instance_data_set_angle_minmax(BoneInstanceData *data,
data->amax_b = amaxz;
}
-static void bone_instance_data_set_color_hint(BoneInstanceData *data, const float hint_color[4])
+void OVERLAY_bone_instance_data_set_color_hint(BoneInstanceData *data, const float hint_color[4])
{
/* Encoded color into 2 floats to be able to use the obmat to color the custom bones. */
data->color_hint_a = (hint_color[0] * 254.0f / 255.0f) + floorf(hint_color[1] * 255.0f);
data->color_hint_b = (hint_color[2] * 254.0f / 255.0f) + floorf(hint_color[3] * 255.0f);
}
-static void bone_instance_data_set_color(BoneInstanceData *data, const float bone_color[4])
+void OVERLAY_bone_instance_data_set_color(BoneInstanceData *data, const float bone_color[4])
{
/* Encoded color into 2 floats to be able to use the obmat to color the custom bones. */
data->color_a = (bone_color[0] * 254.0f / 255.0f) + floorf(bone_color[1] * 255.0f);
@@ -298,12 +279,12 @@ static void drw_shgroup_bone_octahedral(ArmatureDrawContext *ctx,
BoneInstanceData inst_data;
mul_m4_m4m4(inst_data.mat, ctx->ob->obmat, bone_mat);
if (ctx->solid) {
- bone_instance_data_set_color(&inst_data, bone_color);
- bone_instance_data_set_color_hint(&inst_data, hint_color);
+ OVERLAY_bone_instance_data_set_color(&inst_data, bone_color);
+ OVERLAY_bone_instance_data_set_color_hint(&inst_data, hint_color);
DRW_buffer_add_entry_struct(ctx->solid, &inst_data);
}
if (outline_color[3] > 0.0f) {
- bone_instance_data_set_color(&inst_data, outline_color);
+ OVERLAY_bone_instance_data_set_color(&inst_data, outline_color);
DRW_buffer_add_entry_struct(ctx->outline, &inst_data);
}
}
@@ -318,12 +299,12 @@ static void drw_shgroup_bone_box(ArmatureDrawContext *ctx,
BoneInstanceData inst_data;
mul_m4_m4m4(inst_data.mat, ctx->ob->obmat, bone_mat);
if (ctx->solid) {
- bone_instance_data_set_color(&inst_data, bone_color);
- bone_instance_data_set_color_hint(&inst_data, hint_color);
+ OVERLAY_bone_instance_data_set_color(&inst_data, bone_color);
+ OVERLAY_bone_instance_data_set_color_hint(&inst_data, hint_color);
DRW_buffer_add_entry_struct(ctx->solid, &inst_data);
}
if (outline_color[3] > 0.0f) {
- bone_instance_data_set_color(&inst_data, outline_color);
+ OVERLAY_bone_instance_data_set_color(&inst_data, outline_color);
DRW_buffer_add_entry_struct(ctx->outline, &inst_data);
}
}
@@ -418,12 +399,12 @@ static void drw_shgroup_bone_envelope(ArmatureDrawContext *ctx,
}
if (ctx->point_solid) {
- bone_instance_data_set_color(&inst_data, bone_col);
- bone_instance_data_set_color_hint(&inst_data, hint_col);
+ OVERLAY_bone_instance_data_set_color(&inst_data, bone_col);
+ OVERLAY_bone_instance_data_set_color_hint(&inst_data, hint_col);
DRW_buffer_add_entry_struct(ctx->point_solid, &inst_data);
}
if (outline_col[3] > 0.0f) {
- bone_instance_data_set_color(&inst_data, outline_col);
+ OVERLAY_bone_instance_data_set_color(&inst_data, outline_col);
DRW_buffer_add_entry_struct(ctx->point_outline, &inst_data);
}
}
@@ -454,12 +435,12 @@ static void drw_shgroup_bone_envelope(ArmatureDrawContext *ctx,
scale_m4_fl(inst_data.mat, tmp_sph[3] / PT_DEFAULT_RAD);
copy_v3_v3(inst_data.mat[3], tmp_sph);
if (ctx->point_solid) {
- bone_instance_data_set_color(&inst_data, bone_col);
- bone_instance_data_set_color_hint(&inst_data, hint_col);
+ OVERLAY_bone_instance_data_set_color(&inst_data, bone_col);
+ OVERLAY_bone_instance_data_set_color_hint(&inst_data, hint_col);
DRW_buffer_add_entry_struct(ctx->point_solid, &inst_data);
}
if (outline_col[3] > 0.0f) {
- bone_instance_data_set_color(&inst_data, outline_col);
+ OVERLAY_bone_instance_data_set_color(&inst_data, outline_col);
DRW_buffer_add_entry_struct(ctx->point_outline, &inst_data);
}
}
@@ -492,19 +473,19 @@ static void drw_shgroup_bone_custom_solid(ArmatureDrawContext *ctx,
}
if (surf && ctx->custom_solid) {
- bone_instance_data_set_color_hint(&inst_data, hint_color);
- bone_instance_data_set_color(&inst_data, bone_color);
+ OVERLAY_bone_instance_data_set_color_hint(&inst_data, hint_color);
+ OVERLAY_bone_instance_data_set_color(&inst_data, bone_color);
DRW_shgroup_call_obmat(ctx->custom_solid, surf, inst_data.mat);
}
if (edges && ctx->custom_outline) {
- bone_instance_data_set_color(&inst_data, outline_color);
+ OVERLAY_bone_instance_data_set_color(&inst_data, outline_color);
DRW_shgroup_call_obmat(ctx->custom_outline, edges, inst_data.mat);
}
if (ledges) {
- bone_instance_data_set_color_hint(&inst_data, outline_color);
- bone_instance_data_set_color(&inst_data, outline_color);
+ OVERLAY_bone_instance_data_set_color_hint(&inst_data, outline_color);
+ OVERLAY_bone_instance_data_set_color(&inst_data, outline_color);
DRW_shgroup_call_obmat(ctx->custom_wire, ledges, inst_data.mat);
}
@@ -526,8 +507,8 @@ static void drw_shgroup_bone_custom_wire(ArmatureDrawContext *ctx,
if (geom) {
BoneInstanceData inst_data;
mul_m4_m4m4(inst_data.mat, ctx->ob->obmat, bone_mat);
- bone_instance_data_set_color_hint(&inst_data, color);
- bone_instance_data_set_color(&inst_data, color);
+ OVERLAY_bone_instance_data_set_color_hint(&inst_data, color);
+ OVERLAY_bone_instance_data_set_color(&inst_data, color);
DRW_shgroup_call_obmat(ctx->custom_wire, geom, inst_data.mat);
}
@@ -570,12 +551,12 @@ static void drw_shgroup_bone_point(ArmatureDrawContext *ctx,
BoneInstanceData inst_data;
mul_m4_m4m4(inst_data.mat, ctx->ob->obmat, bone_mat);
if (ctx->point_solid) {
- bone_instance_data_set_color(&inst_data, bone_color);
- bone_instance_data_set_color_hint(&inst_data, hint_color);
+ OVERLAY_bone_instance_data_set_color(&inst_data, bone_color);
+ OVERLAY_bone_instance_data_set_color_hint(&inst_data, hint_color);
DRW_buffer_add_entry_struct(ctx->point_solid, &inst_data);
}
if (outline_color[3] > 0.0f) {
- bone_instance_data_set_color(&inst_data, outline_color);
+ OVERLAY_bone_instance_data_set_color(&inst_data, outline_color);
DRW_buffer_add_entry_struct(ctx->point_outline, &inst_data);
}
}
diff --git a/source/blender/draw/engines/overlay/overlay_engine.c b/source/blender/draw/engines/overlay/overlay_engine.c
index a6a14055375..83ff341593a 100644
--- a/source/blender/draw/engines/overlay/overlay_engine.c
+++ b/source/blender/draw/engines/overlay/overlay_engine.c
@@ -158,6 +158,7 @@ static void OVERLAY_cache_init(void *vedata)
OVERLAY_facing_cache_init(vedata);
OVERLAY_grid_cache_init(vedata);
OVERLAY_image_cache_init(vedata);
+ OVERLAY_metaball_cache_init(vedata);
OVERLAY_motion_path_cache_init(vedata);
OVERLAY_outline_cache_init(vedata);
OVERLAY_wireframe_cache_init(vedata);
@@ -240,6 +241,7 @@ static void OVERLAY_cache_populate(void *vedata, Object *ob)
case OB_LATTICE:
break;
case OB_MBALL:
+ OVERLAY_edit_metaball_cache_populate(vedata, ob);
break;
case OB_FONT:
OVERLAY_edit_text_cache_populate(vedata, ob);
@@ -273,9 +275,11 @@ static void OVERLAY_cache_populate(void *vedata, Object *ob)
OVERLAY_armature_cache_populate(vedata, ob);
}
break;
- // case OB_MBALL:
- // OVERLAY_mball_cache_populate();
- // break;
+ case OB_MBALL:
+ if (!in_edit_mode) {
+ OVERLAY_metaball_cache_populate(vedata, ob);
+ }
+ break;
// case OB_FONT:
// OVERLAY_font_cache_populate();
// break;
@@ -326,6 +330,7 @@ static void OVERLAY_draw_scene(void *vedata)
OVERLAY_facing_draw(vedata);
OVERLAY_wireframe_draw(vedata);
OVERLAY_extra_draw(vedata);
+ OVERLAY_metaball_draw(vedata);
OVERLAY_armature_draw(vedata);
OVERLAY_grid_draw(vedata);
OVERLAY_motion_path_draw(vedata);
diff --git a/source/blender/draw/engines/overlay/overlay_extra.c b/source/blender/draw/engines/overlay/overlay_extra.c
index e0075b34c3f..0ce7e3f8898 100644
--- a/source/blender/draw/engines/overlay/overlay_extra.c
+++ b/source/blender/draw/engines/overlay/overlay_extra.c
@@ -110,9 +110,6 @@ void OVERLAY_extra_cache_init(OVERLAY_Data *vedata)
DRW_shgroup_state_disable(cb->points_dupli, DRW_STATE_BLEND_ALPHA);
DRW_shgroup_state_disable(cb->points_dupli_select, DRW_STATE_BLEND_ALPHA);
- /* Metaballs Handles */
- cb->mball_handle = buffer_instance_mball_handles(cb->non_meshes, draw_c
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list