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-31 14:32:53 +0300
committerJeroen Bakker <j.bakker@atmind.nl>2018-06-01 12:01:55 +0300
commitc450966e9562eb352b869f3b554d60a42dea2fa1 (patch)
tree8cdf507041087221dbf07c66f476b8618312872d /source/blender/draw/engines/workbench/workbench_private.h
parent3b2d3a3cd11d07945b18252359378ffadddfe3bd (diff)
Workbench: Material specific settings for the specular
- Uses the roughness setting of the basic eevee material - renamed gloss_mir to roughness - set default of roughness to 0.25 - renamed ray_mirror to metallic - cleaned up material rna (BI mirror struct) - use BLINN phong model - normalize incoming/outgoing specular light - when using camera oriented studiolight, the SolidLight will be used for specular highlights - EXPERIMENT: when in world oriented studiolight only the shadow direction will be used. - change the settings of the internal light to make scenes more readable
Diffstat (limited to 'source/blender/draw/engines/workbench/workbench_private.h')
-rw-r--r--source/blender/draw/engines/workbench/workbench_private.h26
1 files changed, 22 insertions, 4 deletions
diff --git a/source/blender/draw/engines/workbench/workbench_private.h b/source/blender/draw/engines/workbench/workbench_private.h
index d40db7f248d..6fc3251a085 100644
--- a/source/blender/draw/engines/workbench/workbench_private.h
+++ b/source/blender/draw/engines/workbench/workbench_private.h
@@ -48,6 +48,7 @@
#define NORMAL_ENCODING_ENABLED() (true)
#define WORKBENCH_REVEALAGE_ENABLED
#define STUDIOLIGHT_ORIENTATION_WORLD_ENABLED(wpd) (wpd->studio_light->flag & STUDIOLIGHT_ORIENTATION_WORLD)
+#define STUDIOLIGHT_ORIENTATION_CAMERA_ENABLED(wpd) (wpd->studio_light->flag & STUDIOLIGHT_ORIENTATION_CAMERA)
typedef struct WORKBENCH_FramebufferList {
@@ -98,6 +99,12 @@ typedef struct WORKBENCH_Data {
WORKBENCH_StorageList *stl;
} WORKBENCH_Data;
+typedef struct WORKBENCH_UBO_Light {
+ float light_direction_vs[4];
+ float specular_color[3];
+ float energy;
+} WORKBENCH_UBO_Light;
+
typedef struct WORKBENCH_UBO_World {
float diffuse_light_x_pos[4];
float diffuse_light_x_neg[4];
@@ -109,11 +116,20 @@ typedef struct WORKBENCH_UBO_World {
float background_color_high[4];
float object_outline_color[4];
float light_direction_vs[4];
- float specular_sharpness;
- float pad[3];
+ WORKBENCH_UBO_Light lights[3];
+ int num_lights;
+ int pad[3];
} WORKBENCH_UBO_World;
BLI_STATIC_ASSERT_ALIGN(WORKBENCH_UBO_World, 16)
+typedef struct WORKBENCH_UBO_Material {
+ float diffuse_color[4];
+ float specular_color[4];
+ float roughness;
+ float pad[3];
+} WORKBENCH_UBO_Material;
+BLI_STATIC_ASSERT_ALIGN(WORKBENCH_UBO_Material, 16)
+
typedef struct WORKBENCH_PrivateData {
struct GHash *material_hash;
struct GPUShader *prepass_solid_sh;
@@ -144,7 +160,9 @@ typedef struct WORKBENCH_PrivateData {
typedef struct WORKBENCH_MaterialData {
/* Solid color */
- float color[4];
+ WORKBENCH_UBO_Material material_data;
+ struct GPUUniformBuffer *material_ubo;
+
int object_id;
int drawtype;
Image *ima;
@@ -199,7 +217,7 @@ void workbench_forward_cache_finish(WORKBENCH_Data *vedata);
/* workbench_materials.c */
char *workbench_material_build_defines(WORKBENCH_PrivateData *wpd, int drawtype);
-void workbench_material_get_solid_color(WORKBENCH_PrivateData *wpd, Object *ob, Material *mat, float *color);
+void workbench_material_update_data(WORKBENCH_PrivateData *wpd, Object *ob, Material *mat, WORKBENCH_MaterialData *data);
uint workbench_material_get_hash(WORKBENCH_MaterialData *material_template);
int workbench_material_get_shader_index(WORKBENCH_PrivateData *wpd, int drawtype);
void workbench_material_set_normal_world_matrix(