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);
 }

_______________________________________________
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to