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-05-22 15:12:47 +0300
committerJeroen Bakker <j.bakker@atmind.nl>2018-05-22 15:55:50 +0300
commitdfe088c5d9c819e7266e8e88fb31e92ac2ee8592 (patch)
tree893d823c1957624257c3ef128422c3fa132e9049 /source/blender/draw/engines/workbench/workbench_data.c
parentff19b527e85ec5144efbd663bf9b4c338e179358 (diff)
Workbench: SeeThrough draw option
Option to see through all meshes (transparency) Works for OB_SOLID and OB_TEXTURED. Does not work for V3D_SHADING_SHADOW. TODO: Fresnel effect
Diffstat (limited to 'source/blender/draw/engines/workbench/workbench_data.c')
-rw-r--r--source/blender/draw/engines/workbench/workbench_data.c49
1 files changed, 49 insertions, 0 deletions
diff --git a/source/blender/draw/engines/workbench/workbench_data.c b/source/blender/draw/engines/workbench/workbench_data.c
new file mode 100644
index 00000000000..c3671fa37b1
--- /dev/null
+++ b/source/blender/draw/engines/workbench/workbench_data.c
@@ -0,0 +1,49 @@
+#include "workbench_private.h"
+
+#include "UI_resources.h"
+
+void workbench_private_data_init(WORKBENCH_PrivateData *wpd)
+{
+ const DRWContextState *draw_ctx = DRW_context_state_get();
+ wpd->material_hash = BLI_ghash_ptr_new(__func__);
+
+ View3D *v3d = draw_ctx->v3d;
+ if (v3d) {
+ wpd->shading = v3d->shading;
+ wpd->drawtype = v3d->drawtype;
+ wpd->studio_light = BKE_studiolight_find(wpd->shading.studio_light);
+ }
+ else {
+ memset(&wpd->shading, 0, sizeof(wpd->shading));
+ wpd->shading.light = V3D_LIGHTING_STUDIO;
+ wpd->shading.shadow_intensity = 0.5;
+ copy_v3_fl(wpd->shading.single_color, 0.8f);
+ wpd->drawtype = OB_SOLID;
+ wpd->studio_light = BKE_studiolight_findindex(0);
+ wpd->shading.see_through_transparency = 0.3f;
+ }
+ wpd->shadow_multiplier = 1.0 - wpd->shading.shadow_intensity;
+
+ WORKBENCH_UBO_World *wd = &wpd->world_data;
+ UI_GetThemeColor3fv(UI_GetThemeValue(TH_SHOW_BACK_GRAD) ? TH_LOW_GRAD : TH_HIGH_GRAD, wd->background_color_low);
+ UI_GetThemeColor3fv(TH_HIGH_GRAD, wd->background_color_high);
+
+ /* XXX: Really quick conversion to avoid washed out background.
+ * Needs to be adressed properly (color managed using ocio). */
+ srgb_to_linearrgb_v3_v3(wd->background_color_high, wd->background_color_high);
+ srgb_to_linearrgb_v3_v3(wd->background_color_low, wd->background_color_low);
+
+ studiolight_update_world(wpd->studio_light, wd);
+
+ wd->see_through_transparency = wpd->shading.see_through_transparency;
+ copy_v3_v3(wd->object_outline_color, wpd->shading.object_outline_color);
+ wd->object_outline_color[3] = 1.0f;
+
+ wpd->world_ubo = DRW_uniformbuffer_create(sizeof(WORKBENCH_UBO_World), &wpd->world_data);
+}
+
+void workbench_private_data_free(WORKBENCH_PrivateData *wpd)
+{
+ BLI_ghash_free(wpd->material_hash, NULL, MEM_freeN);
+ DRW_UBO_FREE_SAFE(wpd->world_ubo);
+}