diff options
Diffstat (limited to 'source/blender/draw/engines/workbench/workbench_data.c')
-rw-r--r-- | source/blender/draw/engines/workbench/workbench_data.c | 29 |
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); |