diff options
author | Jeroen Bakker <j.bakker@atmind.nl> | 2018-05-22 15:12:47 +0300 |
---|---|---|
committer | Jeroen Bakker <j.bakker@atmind.nl> | 2018-05-22 15:55:50 +0300 |
commit | dfe088c5d9c819e7266e8e88fb31e92ac2ee8592 (patch) | |
tree | 893d823c1957624257c3ef128422c3fa132e9049 /source/blender/draw/engines/workbench/workbench_data.c | |
parent | ff19b527e85ec5144efbd663bf9b4c338e179358 (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.c | 49 |
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); +} |