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-30 15:40:57 +0300
committerJeroen Bakker <j.bakker@atmind.nl>2018-05-30 15:42:07 +0300
commitacaf46db0ea7103aaa3f46092b3582611d37ca0f (patch)
treebfd0adacdbbb6852c49cbf9b3ac73503e62bb638 /source/blender/draw/engines/workbench/workbench_data.c
parent29f9a197088e0e1ea56cae675803f61165d790c1 (diff)
Workbench: Specular Highlights
Added specular highlights for: - Solid studio shading - Texture studio shading
Diffstat (limited to 'source/blender/draw/engines/workbench/workbench_data.c')
-rw-r--r--source/blender/draw/engines/workbench/workbench_data.c29
1 files changed, 29 insertions, 0 deletions
diff --git a/source/blender/draw/engines/workbench/workbench_data.c b/source/blender/draw/engines/workbench/workbench_data.c
index bbd8c57a5b9..062a5b04988 100644
--- a/source/blender/draw/engines/workbench/workbench_data.c
+++ b/source/blender/draw/engines/workbench/workbench_data.c
@@ -5,6 +5,7 @@
void workbench_private_data_init(WORKBENCH_PrivateData *wpd)
{
const DRWContextState *draw_ctx = DRW_context_state_get();
+ Scene *scene = draw_ctx->scene;
wpd->material_hash = BLI_ghash_ptr_new(__func__);
View3D *v3d = draw_ctx->v3d;
@@ -36,10 +37,38 @@ void workbench_private_data_init(WORKBENCH_PrivateData *wpd)
copy_v3_v3(wd->object_outline_color, wpd->shading.object_outline_color);
wd->object_outline_color[3] = 1.0f;
+ wd->specular_sharpness = 100 - sqrtf(scene->display.roughness)* 100;
wpd->world_ubo = DRW_uniformbuffer_create(sizeof(WORKBENCH_UBO_World), &wpd->world_data);
}
+void workbench_private_data_get_light_direction(WORKBENCH_PrivateData *wpd, float light_direction[3])
+{
+ const DRWContextState *draw_ctx = DRW_context_state_get();
+ Scene *scene = draw_ctx->scene;
+
+#if 0
+ if (STUDIOLIGHT_ORIENTATION_WORLD_ENABLED(wpd)) {
+ BKE_studiolight_ensure_flag(wpd->studio_light, STUDIOLIGHT_LIGHT_DIRECTION_CALCULATED);
+ float rot_matrix[3][3];
+ axis_angle_to_mat3_single(rot_matrix, 'Z', wpd->shading.studiolight_rot_z);
+ mul_v3_m3v3(e_data.display.light_direction, rot_matrix, wpd->studio_light->light_direction);
+ }
+ else {
+#else
+ {
+#endif
+ copy_v3_v3(light_direction, scene->display.light_direction);
+ negate_v3(light_direction);
+ }
+
+ float view_matrix[4][4];
+ DRW_viewport_matrix_get(view_matrix, DRW_MAT_VIEW);
+ mul_v3_mat3_m4v3(wpd->world_data.light_direction_vs, view_matrix, light_direction);
+ wpd->world_data.light_direction_vs[3] = 0.0;
+ DRW_uniformbuffer_update(wpd->world_ubo, &wpd->world_data);
+}
+
void workbench_private_data_free(WORKBENCH_PrivateData *wpd)
{
BLI_ghash_free(wpd->material_hash, NULL, MEM_freeN);