diff options
author | Jeroen Bakker <j.bakker@atmind.nl> | 2018-04-19 13:44:37 +0300 |
---|---|---|
committer | Jeroen Bakker <j.bakker@atmind.nl> | 2018-04-19 13:44:37 +0300 |
commit | b0d5e74fcce929c649391a9f694ee39649a84e1c (patch) | |
tree | 19a9d2281e4c32f8edbe50f19007225fe8f79839 /source/blender/draw | |
parent | a8db1efbcf1513f7bb912c98ea9c1b7d3b333727 (diff) |
Workbench: drawtype object color from collection to v3d
Now every 3d view can have its own solid draw color setting
Diffstat (limited to 'source/blender/draw')
5 files changed, 34 insertions, 12 deletions
diff --git a/source/blender/draw/engines/workbench/solid_flat_mode.c b/source/blender/draw/engines/workbench/solid_flat_mode.c index 91557832388..e98783446d6 100644 --- a/source/blender/draw/engines/workbench/solid_flat_mode.c +++ b/source/blender/draw/engines/workbench/solid_flat_mode.c @@ -68,7 +68,7 @@ static void workbench_solid_flat_cache_init(void *vedata) static void workbench_solid_flat_cache_populate(void *vedata, Object *ob) { WORKBENCH_Data * data = (WORKBENCH_Data *)vedata; - workbench_materials_solid_cache_populate(data, ob, V3D_LIGHTING_FLAT); + workbench_materials_solid_cache_populate(data, ob); } static void workbench_solid_flat_cache_finish(void *UNUSED(vedata)) diff --git a/source/blender/draw/engines/workbench/solid_studio_mode.c b/source/blender/draw/engines/workbench/solid_studio_mode.c index 37a6f1dd4fd..046ad38fa91 100644 --- a/source/blender/draw/engines/workbench/solid_studio_mode.c +++ b/source/blender/draw/engines/workbench/solid_studio_mode.c @@ -68,7 +68,7 @@ static void workbench_solid_studio_cache_init(void *vedata) static void workbench_solid_studio_cache_populate(void *vedata, Object *ob) { WORKBENCH_Data * data = (WORKBENCH_Data *)vedata; - workbench_materials_solid_cache_populate(data, ob, V3D_LIGHTING_STUDIO); + workbench_materials_solid_cache_populate(data, ob); } static void workbench_solid_studio_cache_finish(void *UNUSED(vedata)) diff --git a/source/blender/draw/engines/workbench/workbench_engine.c b/source/blender/draw/engines/workbench/workbench_engine.c index 5a2c70ce810..2b6c95e301f 100644 --- a/source/blender/draw/engines/workbench/workbench_engine.c +++ b/source/blender/draw/engines/workbench/workbench_engine.c @@ -49,7 +49,6 @@ static void workbench_layer_collection_settings_create(RenderEngine *UNUSED(engi props->type == IDP_GROUP && props->subtype == IDP_GROUP_SUB_ENGINE_RENDER); float default_object_color[3] = {1.0, 1.0, 1.0}; - BKE_collection_engine_property_add_int(props, "object_color_type", V3D_OBJECT_COLOR_COLLECTION); BKE_collection_engine_property_add_float_array(props, "object_color", default_object_color, 3); } diff --git a/source/blender/draw/engines/workbench/workbench_materials.c b/source/blender/draw/engines/workbench/workbench_materials.c index 1c80d9c3354..1338fccf61f 100644 --- a/source/blender/draw/engines/workbench/workbench_materials.c +++ b/source/blender/draw/engines/workbench/workbench_materials.c @@ -55,11 +55,10 @@ static uint get_material_hash(const float color[3]) return r + g * 4096 + b * 4096 * 4096; } -static const float* get_material_solid_color(Object *ob) +static const float* get_material_solid_color(WORKBENCH_PrivateData *wpd, Object *ob) { IDProperty *props = BKE_layer_collection_engine_evaluated_get(ob, COLLECTION_MODE_NONE, RE_engine_id_BLENDER_WORKBENCH); - int object_color_option = BKE_collection_engine_property_value_get_int(props, "object_color_type"); - switch (object_color_option) + switch (wpd->drawtype_object_color) { default: case V3D_OBJECT_COLOR_COLLECTION: @@ -104,11 +103,33 @@ void workbench_materials_cache_init(WORKBENCH_Data *vedata) WORKBENCH_PassList *psl = vedata->psl; WORKBENCH_PrivateData *wpd = stl->g_data; + const DRWContextState *DCS = DRW_context_state_get(); + wpd->depth_shgrp = DRW_shgroup_create(e_data.depth_sh, psl->depth_pass); wpd->material_hash = BLI_ghash_ptr_new("Workbench material_hash"); + + View3D *v3d = DCS->v3d; + if (v3d) { + wpd->drawtype_object_color = v3d->drawtype_object_color; +#if 0 + /* TODO: switch implementation when OB_TEXTURE is implemented */ + switch (v3d->drawtype) { + default: + case OB_SOLID: + wpd->drawtype_lighting = v3d->drawtype_solid; + break; + } +#else + wpd->drawtype_lighting = v3d->drawtype_solid; +#endif + } + else { + wpd->drawtype_object_color = V3D_OBJECT_COLOR_COLLECTION; + wpd->drawtype_lighting = V3D_LIGHTING_STUDIO; + } } -void workbench_materials_solid_cache_populate(WORKBENCH_Data *vedata, Object *ob, int lighting_mode) +void workbench_materials_solid_cache_populate(WORKBENCH_Data *vedata, Object *ob) { WORKBENCH_StorageList *stl = vedata->stl; WORKBENCH_PassList *psl = vedata->psl; @@ -124,9 +145,9 @@ void workbench_materials_solid_cache_populate(WORKBENCH_Data *vedata, Object *ob DRW_shgroup_call_add(stl->g_data->depth_shgrp, geom, ob->obmat); /* Solid */ - GPUShader *shader = lighting_mode == V3D_LIGHTING_FLAT?e_data.solid_flat_sh:e_data.solid_studio_sh; + GPUShader *shader = wpd->drawtype_lighting == V3D_LIGHTING_FLAT?e_data.solid_flat_sh:e_data.solid_studio_sh; - const float *color = get_material_solid_color(ob); + const float *color = get_material_solid_color(wpd, ob); uint hash = get_material_hash(color); material = BLI_ghash_lookup(wpd->material_hash, SET_UINT_IN_POINTER(hash)); diff --git a/source/blender/draw/engines/workbench/workbench_private.h b/source/blender/draw/engines/workbench/workbench_private.h index fe0180e3f79..b2d79ec39ee 100644 --- a/source/blender/draw/engines/workbench/workbench_private.h +++ b/source/blender/draw/engines/workbench/workbench_private.h @@ -52,10 +52,12 @@ typedef struct WORKBENCH_Data { typedef struct WORKBENCH_PrivateData { DRWShadingGroup *depth_shgrp; - + DRWShadingGroup *shadeless_shgrp; - + struct GHash *material_hash; + short drawtype_object_color; + short drawtype_lighting; } WORKBENCH_PrivateData; /* Transient data */ typedef struct WORKBENCH_MaterialData { @@ -80,6 +82,6 @@ void workbench_materials_engine_init(void); void workbench_materials_engine_free(void); void workbench_materials_draw_scene_finish(WORKBENCH_Data *vedata); void workbench_materials_cache_init(WORKBENCH_Data *vedata); -void workbench_materials_solid_cache_populate(WORKBENCH_Data *vedata, Object *ob, int lighting_mode); +void workbench_materials_solid_cache_populate(WORKBENCH_Data *vedata, Object *ob); #endif |