[Bf-blender-cvs] [80e6638ad3] blender2.8: Object Mode Engine: Support for active color.

Clément Foucault noreply at git.blender.org
Tue Mar 21 18:32:46 CET 2017


Commit: 80e6638ad3367ee56d40cbe8669b5e3adf9796c2
Author: Clément Foucault
Date:   Tue Mar 21 17:47:22 2017 +0100
Branches: blender2.8
https://developer.blender.org/rB80e6638ad3367ee56d40cbe8669b5e3adf9796c2

Object Mode Engine: Support for active color.

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

M	source/blender/draw/intern/draw_armature.c
M	source/blender/draw/intern/draw_common.c
M	source/blender/draw/intern/draw_common.h
M	source/blender/draw/modes/object_mode.c

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

diff --git a/source/blender/draw/intern/draw_armature.c b/source/blender/draw/intern/draw_armature.c
index 51c269a7b9..4a700388a7 100644
--- a/source/blender/draw/intern/draw_armature.c
+++ b/source/blender/draw/intern/draw_armature.c
@@ -419,10 +419,10 @@ static void DRW_shgroup_armature(
 }
 
 void DRW_shgroup_armature_object(
-    Object *ob, DRWPass *pass_bone_solid, DRWPass *pass_bone_wire, DRWShadingGroup *shgrp_relationship_lines)
+    Object *ob, SceneLayer *sl, DRWPass *pass_bone_solid, DRWPass *pass_bone_wire, DRWShadingGroup *shgrp_relationship_lines)
 {
 	float *color;
-	DRW_object_wire_theme_get(ob, &color);
+	DRW_object_wire_theme_get(ob, sl, &color);
 
 	DRW_shgroup_armature(ob, pass_bone_solid, pass_bone_wire, shgrp_relationship_lines);
 	draw_armature_pose(ob, color);
diff --git a/source/blender/draw/intern/draw_common.c b/source/blender/draw/intern/draw_common.c
index 6a8848a06b..d56c1569c4 100644
--- a/source/blender/draw/intern/draw_common.c
+++ b/source/blender/draw/intern/draw_common.c
@@ -249,7 +249,7 @@ DRWShadingGroup *shgroup_spot_instance(DRWPass *pass, struct Batch *geom)
 /* TODO FINISH */
 /* Get the wire color theme_id of an object based on it's state
  * **color is a way to get a pointer to the static color var associated */
-int DRW_object_wire_theme_get(Object *ob, float **color)
+int DRW_object_wire_theme_get(Object *ob, SceneLayer *sl, float **color)
 {
 	const bool is_edit = (ob->mode & OB_MODE_EDIT) != 0;
 	/* confusing logic here, there are 2 methods of setting the color
@@ -271,7 +271,7 @@ int DRW_object_wire_theme_get(Object *ob, float **color)
 				/* uses darker active color for non-active + selected */
 				theme_id = TH_GROUP_ACTIVE;
 
-				// if (scene->basact != base) {
+				// if (sl->basact->object != ob) {
 				// 	theme_shade = -16;
 				// }
 			}
@@ -281,8 +281,7 @@ int DRW_object_wire_theme_get(Object *ob, float **color)
 		}
 		else {
 			if ((ob->base_flag & BASE_SELECTED) != 0) {
-				theme_id = //scene->basact == base ? TH_ACTIVE :
-				TH_SELECT;
+				theme_id = (sl->basact->object == ob) ? TH_ACTIVE : TH_SELECT;
 			}
 			else {
 				if (ob->type == OB_LAMP) theme_id = TH_LAMP;
diff --git a/source/blender/draw/intern/draw_common.h b/source/blender/draw/intern/draw_common.h
index ad155224cd..09d176c2b8 100644
--- a/source/blender/draw/intern/draw_common.h
+++ b/source/blender/draw/intern/draw_common.h
@@ -30,6 +30,7 @@ struct DRWPass;
 struct DRWShadingGroup;
 struct Batch;
 struct Object;
+struct SceneLayer;
 
 /* Used as ubo but colors can be directly
  * referenced as well */
@@ -88,11 +89,11 @@ struct DRWShadingGroup *shgroup_camera_instance(struct DRWPass *pass, struct Bat
 struct DRWShadingGroup *shgroup_distance_lines_instance(struct DRWPass *pass, struct Batch *geom);
 struct DRWShadingGroup *shgroup_spot_instance(struct DRWPass *pass, struct Batch *geom);
 
-int DRW_object_wire_theme_get(struct Object *ob, float **color);
+int DRW_object_wire_theme_get(struct Object *ob, struct SceneLayer *sl, float **color);
 
 /* draw_armature.c */
 void DRW_shgroup_armature_object(
-    struct Object *ob, struct DRWPass *pass_bone_solid,
+    struct Object *ob, struct SceneLayer *sl, struct DRWPass *pass_bone_solid,
     struct DRWPass *pass_bone_wire, struct DRWShadingGroup *shgrp_relationship_lines);
 
 void DRW_shgroup_armature_pose(
diff --git a/source/blender/draw/modes/object_mode.c b/source/blender/draw/modes/object_mode.c
index 51d800ba6d..33ecde5fd7 100644
--- a/source/blender/draw/modes/object_mode.c
+++ b/source/blender/draw/modes/object_mode.c
@@ -441,11 +441,11 @@ static void OBJECT_cache_init(void)
 	}
 }
 
-static void DRW_shgroup_lamp(Object *ob)
+static void DRW_shgroup_lamp(Object *ob, SceneLayer *sl)
 {
 	Lamp *la = ob->data;
 	float *color;
-	int theme_id = DRW_object_wire_theme_get(ob, &color);
+	int theme_id = DRW_object_wire_theme_get(ob, sl, &color);
 	static float zero = 0.0f;
 
 	/* Don't draw the center if it's selected or active */
@@ -537,7 +537,7 @@ static void DRW_shgroup_lamp(Object *ob)
 	DRW_shgroup_dynamic_call_add(g_data.lamp_groundpoint, ob->obmat[3]);
 }
 
-static void DRW_shgroup_camera(Object *ob)
+static void DRW_shgroup_camera(Object *ob, SceneLayer *sl)
 {
 	const struct bContext *C = DRW_get_context();
 	View3D *v3d = CTX_wm_view3d(C);
@@ -546,7 +546,7 @@ static void DRW_shgroup_camera(Object *ob)
 	Camera *cam = ob->data;
 	const bool is_active = (ob == v3d->camera);
 	float *color;
-	DRW_object_wire_theme_get(ob, &color);
+	DRW_object_wire_theme_get(ob, sl, &color);
 
 	float vec[4][3], asp[2], shift[2], scale[3], drawsize;
 
@@ -611,10 +611,10 @@ static void DRW_shgroup_camera(Object *ob)
 	}
 }
 
-static void DRW_shgroup_empty(Object *ob)
+static void DRW_shgroup_empty(Object *ob, SceneLayer *sl)
 {
 	float *color;
-	DRW_object_wire_theme_get(ob, &color);
+	DRW_object_wire_theme_get(ob, sl, &color);
 
 	switch (ob->empty_drawtype) {
 		case OB_PLAINAXES:
@@ -643,11 +643,11 @@ static void DRW_shgroup_empty(Object *ob)
 	}
 }
 
-static void DRW_shgroup_speaker(Object *ob)
+static void DRW_shgroup_speaker(Object *ob, SceneLayer *sl)
 {
 	float *color;
 	static float one = 1.0f;
-	DRW_object_wire_theme_get(ob, &color);
+	DRW_object_wire_theme_get(ob, sl, &color);
 
 	DRW_shgroup_dynamic_call_add(g_data.speaker, color, &one, ob->obmat);
 }
@@ -674,6 +674,7 @@ static void OBJECT_cache_populate(Object *ob)
 {
 	const struct bContext *C = DRW_get_context();
 	Scene *scene = CTX_data_scene(C);
+	SceneLayer *sl = CTX_data_scene_layer(C);
 
 	//CollectionEngineSettings *ces_mode_ob = BKE_object_collection_engine_get(ob, COLLECTION_MODE_OBJECT, "");
 
@@ -684,7 +685,7 @@ static void OBJECT_cache_populate(Object *ob)
 		case OB_MESH:
 			{
 				Object *obedit = scene->obedit;
-				int theme_id = DRW_object_wire_theme_get(ob, NULL);
+				int theme_id = DRW_object_wire_theme_get(ob, sl, NULL);
 				if (ob != obedit) {
 					if (do_outlines) {
 						struct Batch *geom = DRW_cache_surface_get(ob);
@@ -707,24 +708,24 @@ static void OBJECT_cache_populate(Object *ob)
 			}
 			break;
 		case OB_LAMP:
-			DRW_shgroup_lamp(ob);
+			DRW_shgroup_lamp(ob, sl);
 			break;
 		case OB_CAMERA:
-			DRW_shgroup_camera(ob);
+			DRW_shgroup_camera(ob, sl);
 			break;
 		case OB_EMPTY:
-			DRW_shgroup_empty(ob);
+			DRW_shgroup_empty(ob, sl);
 			break;
 		case OB_SPEAKER:
-			DRW_shgroup_speaker(ob);
+			DRW_shgroup_speaker(ob, sl);
 			break;
 		case OB_ARMATURE:
 			{
 				bArmature *arm = ob->data;
 				if (arm->edbo == NULL) {
-					DRW_shgroup_armature_object(ob, g_data.vedata->psl->bone_solid,
-					                                g_data.vedata->psl->bone_wire,
-					                                g_data.relationship_lines);
+					DRW_shgroup_armature_object(ob, sl, g_data.vedata->psl->bone_solid,
+					                                    g_data.vedata->psl->bone_wire,
+					                                    g_data.relationship_lines);
 				}
 			}
 			break;
@@ -755,9 +756,6 @@ static void OBJECT_draw_scene(void)
 	DRW_framebuffer_clear(true, true, false, clearcol, 1.0f);
 	DRW_draw_pass(psl->outlines);
 
-	/* detach textures */
-	DRW_framebuffer_texture_detach(dtxl->depth);
-
 	/* Expand filled color by 1px and modulate if occluded */
 	DRW_framebuffer_bind(fbl->blur);
 	DRW_draw_pass(psl->outlines_expand);
@@ -777,7 +775,6 @@ static void OBJECT_draw_scene(void)
 
 	/* Combine with scene buffer */
 	DRW_framebuffer_bind(dfbl->default_fb);
-	DRW_framebuffer_texture_attach(dfbl->default_fb, dtxl->depth, 0);
 	DRW_draw_pass(psl->outlines_resolve);
 }




More information about the Bf-blender-cvs mailing list