[Bf-blender-cvs] [248c049b70b] blender2.8: Camera Reconstruction: Draw solid spheres

Dalai Felinto noreply at git.blender.org
Thu Aug 16 00:28:29 CEST 2018


Commit: 248c049b70ba6cc877e322d3a968d0dae713b749
Author: Dalai Felinto
Date:   Wed Aug 15 19:05:20 2018 -0300
Branches: blender2.8
https://developer.blender.org/rB248c049b70ba6cc877e322d3a968d0dae713b749

Camera Reconstruction: Draw solid spheres

If in SOLID "mode", and x-ray, draw the empty spheres still.

===================================================================

M	source/blender/draw/modes/object_mode.c

===================================================================

diff --git a/source/blender/draw/modes/object_mode.c b/source/blender/draw/modes/object_mode.c
index 826d9df204d..290f5d308df 100644
--- a/source/blender/draw/modes/object_mode.c
+++ b/source/blender/draw/modes/object_mode.c
@@ -150,6 +150,7 @@ typedef struct OBJECT_PrivateData {
 	DRWShadingGroup *cube;
 	DRWShadingGroup *circle;
 	DRWShadingGroup *sphere;
+	DRWShadingGroup *sphere_solid;
 	DRWShadingGroup *cylinder;
 	DRWShadingGroup *capsule_cap;
 	DRWShadingGroup *capsule_body;
@@ -1103,6 +1104,9 @@ static void OBJECT_cache_init(void *vedata)
 		geom = DRW_cache_empty_sphere_get();
 		stl->g_data->sphere = shgroup_instance(psl->non_meshes, geom);
 
+		geom = DRW_cache_sphere_get();
+		stl->g_data->sphere_solid = shgroup_instance_solid(psl->non_meshes, geom);
+
 		geom = DRW_cache_empty_cylinder_get();
 		stl->g_data->cylinder = shgroup_instance(psl->non_meshes, geom);
 
@@ -1620,21 +1624,30 @@ static void DRW_shgroup_camera(OBJECT_StorageList *stl, Object *ob, ViewLayer *v
 	MovieClip *clip = BKE_object_movieclip_get(scene, ob, false);
 	if ((v3d->flag2 & V3D_SHOW_RECONSTRUCTION) && (clip != NULL)){
 		const bool is_select = DRW_state_is_select();
+		const bool is_solid_bundle = (v3d->bundle_drawtype == OB_EMPTY_SPHERE) &&
+		                             ((v3d->shading.type != OB_SOLID) ||
+		                              ((v3d->shading.flag & V3D_SHADING_XRAY) == 0));
 
 		MovieTracking *tracking = &clip->tracking;
 		/* Index must start in 1, to mimic BKE_tracking_track_get_indexed. */
 		int track_index = 1;
 
 		uchar text_color_selected[4], text_color_unselected[4];
-		float bundle_color_unselected[4];
+		float bundle_color_unselected[4], bundle_color_solid[4];
 
 		UI_GetThemeColor4ubv(TH_SELECT, text_color_selected);
 		UI_GetThemeColor4ubv(TH_TEXT, text_color_unselected);
 		UI_GetThemeColor4fv(TH_WIRE, bundle_color_unselected);
+		UI_GetThemeColor4fv(TH_BUNDLE_SOLID, bundle_color_solid);
 
 		float camera_mat[4][4];
 		BKE_tracking_get_camera_object_matrix(draw_ctx->depsgraph, scene, ob, camera_mat);
 
+		float bundle_scale_mat[4][4];
+		if (is_solid_bundle) {
+			scale_m4_fl(bundle_scale_mat, v3d->bundle_size);
+		}
+
 		for (MovieTrackingObject *tracking_object = tracking->objects.first;
 		     tracking_object != NULL;
 		     tracking_object = tracking_object->next)
@@ -1670,6 +1683,9 @@ static void DRW_shgroup_camera(OBJECT_StorageList *stl, Object *ob, ViewLayer *v
 				if (track->flag & TRACK_CUSTOMCOLOR) {
 					bundle_color = track->color;
 				}
+				else if (is_solid_bundle) {
+					bundle_color = bundle_color_solid;
+				}
 				else if (is_selected) {
 					bundle_color = color;
 				}
@@ -1682,11 +1698,35 @@ static void DRW_shgroup_camera(OBJECT_StorageList *stl, Object *ob, ViewLayer *v
 					track_index++;
 				}
 
-				DRW_shgroup_empty_ex(stl,
-				                     bundle_mat,
-				                     &v3d->bundle_size,
-				                     v3d->bundle_drawtype,
-				                     bundle_color);
+				if (is_solid_bundle) {
+
+					if (is_selected) {
+						DRW_shgroup_empty_ex(stl,
+						                     bundle_mat,
+						                     &v3d->bundle_size,
+						                     v3d->bundle_drawtype,
+						                     color);
+					}
+
+					float bundle_color_v4[4] = {
+					    bundle_color[0],
+					    bundle_color[1],
+					    bundle_color[2],
+					    1.0f,
+					};
+
+					mul_m4_m4m4(bundle_mat, bundle_mat, bundle_scale_mat);
+					DRW_shgroup_call_dynamic_add(stl->g_data->sphere_solid,
+					                             bundle_mat,
+					                             bundle_color_v4);
+				}
+				else {
+					DRW_shgroup_empty_ex(stl,
+					                     bundle_mat,
+					                     &v3d->bundle_size,
+					                     v3d->bundle_drawtype,
+					                     bundle_color);
+				}
 
 				if ((v3d->flag2 & V3D_SHOW_BUNDLENAME) && !is_select) {
 					struct DRWTextStore *dt = DRW_text_cache_ensure();



More information about the Bf-blender-cvs mailing list