Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeroen Bakker <j.bakker@atmind.nl>2018-04-19 13:44:37 +0300
committerJeroen Bakker <j.bakker@atmind.nl>2018-04-19 13:44:37 +0300
commitb0d5e74fcce929c649391a9f694ee39649a84e1c (patch)
tree19a9d2281e4c32f8edbe50f19007225fe8f79839 /source/blender/draw
parenta8db1efbcf1513f7bb912c98ea9c1b7d3b333727 (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')
-rw-r--r--source/blender/draw/engines/workbench/solid_flat_mode.c2
-rw-r--r--source/blender/draw/engines/workbench/solid_studio_mode.c2
-rw-r--r--source/blender/draw/engines/workbench/workbench_engine.c1
-rw-r--r--source/blender/draw/engines/workbench/workbench_materials.c33
-rw-r--r--source/blender/draw/engines/workbench/workbench_private.h8
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