Object Mode Engine: Support for active color.
This commit is contained in:
parent
d409c48310
commit
80e6638ad3
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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(
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue