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:
authorLukas Tönne <lukas.toenne@gmail.com>2018-08-12 13:05:36 +0300
committerLukas Tönne <lukas.toenne@gmail.com>2018-08-12 13:05:36 +0300
commit27b28e437d974ebbafa234205941c07aa0ab546c (patch)
tree9b05345e464e13352def8a25abafe246c451a9e1 /source/blender/draw/engines/workbench
parent4a920429161083c54805762298786a27a0d99e1c (diff)
parentf854fefa1796429907c2574ba414335eb5519714 (diff)
Merge branch 'tmp_hair_curves' into hair_guides
Diffstat (limited to 'source/blender/draw/engines/workbench')
-rw-r--r--source/blender/draw/engines/workbench/shaders/workbench_prepass_vert.glsl49
-rw-r--r--source/blender/draw/engines/workbench/workbench_deferred.c34
-rw-r--r--source/blender/draw/engines/workbench/workbench_forward.c50
-rw-r--r--source/blender/draw/engines/workbench/workbench_materials.c20
-rw-r--r--source/blender/draw/engines/workbench/workbench_private.h17
5 files changed, 56 insertions, 114 deletions
diff --git a/source/blender/draw/engines/workbench/shaders/workbench_prepass_vert.glsl b/source/blender/draw/engines/workbench/shaders/workbench_prepass_vert.glsl
index 03d9b02a654..dfc45c8d04c 100644
--- a/source/blender/draw/engines/workbench/shaders/workbench_prepass_vert.glsl
+++ b/source/blender/draw/engines/workbench/shaders/workbench_prepass_vert.glsl
@@ -2,7 +2,6 @@ uniform mat4 ModelViewProjectionMatrix;
uniform mat4 ProjectionMatrix;
uniform mat4 ViewProjectionMatrix;
uniform mat4 ViewMatrixInverse;
-uniform mat4 ModelViewMatrixInverse;
uniform mat3 NormalMatrix;
#ifndef HAIR_SHADER
@@ -14,10 +13,6 @@ in vec2 uv;
uniform samplerBuffer u; /* active texture layer */
# endif
flat out float hair_rand;
-# ifdef HAIR_SHADER_FIBERS
-in int fiber_index;
-in float curve_param;
-# endif
#endif /* HAIR_SHADER */
#ifdef NORMAL_VIEWPORT_PASS_ENABLED
@@ -28,6 +23,8 @@ out vec3 normal_viewport;
out vec2 uv_interp;
#endif
+out int DEBUG;
+
/* From http://libnoise.sourceforge.net/noisegen/index.html */
float integer_noise(int n)
{
@@ -39,42 +36,28 @@ float integer_noise(int n)
void main()
{
#ifdef HAIR_SHADER
- bool is_persp = (ProjectionMatrix[3][3] == 0.0);
-
-# ifdef HAIR_SHADER_FIBERS
- vec2 uv = vec2(0.0); /* TODO */
- float time, thick_time, thickness;
- vec3 pos, tang, binor;
- hair_fiber_get_vertex(
- fiber_index, curve_param,
- is_persp, ModelViewMatrixInverse[3].xyz, ModelViewMatrixInverse[2].xyz,
- pos, tang, binor,
- time, thickness, thick_time);
- gl_Position = ModelViewProjectionMatrix * vec4(pos, 1.0);
- hair_rand = integer_noise(fiber_index);
-# else
-# ifdef V3D_SHADING_TEXTURE_COLOR
+ DEBUG = hair_get_strand_id();
+# ifdef V3D_SHADING_TEXTURE_COLOR
vec2 uv = hair_get_customdata_vec2(u);
-# endif
+# endif
float time, thick_time, thickness;
- vec3 pos, tang, binor;
+ vec3 pos, tan, binor;
hair_get_pos_tan_binor_time(
- is_persp, ViewMatrixInverse[3].xyz, ViewMatrixInverse[2].xyz,
- pos, tang, binor, time, thickness, thick_time);
- gl_Position = ViewProjectionMatrix * vec4(pos, 1.0);
- hair_rand = integer_noise(hair_get_strand_id());
-# endif
+ (ProjectionMatrix[3][3] == 0.0),
+ ViewMatrixInverse[3].xyz, ViewMatrixInverse[2].xyz,
+ pos, tan, binor, time, thickness, thick_time);
/* To "simulate" anisotropic shading, randomize hair normal per strand. */
- tang = normalize(tang);
- vec3 nor = normalize(cross(binor, tang));
- nor = normalize(mix(nor, -tang, hair_rand * 0.10));
+ hair_rand = integer_noise(hair_get_strand_id());
+ tan = normalize(tan);
+ vec3 nor = normalize(cross(binor, tan));
+ nor = normalize(mix(nor, -tan, hair_rand * 0.10));
float cos_theta = (hair_rand*2.0 - 1.0) * 0.20;
float sin_theta = sqrt(max(0.0, 1.0f - cos_theta*cos_theta));
nor = nor * sin_theta + binor * cos_theta;
-#else /* HAIR_SHADER */
+ gl_Position = ViewProjectionMatrix * vec4(pos, 1.0);
+#else
gl_Position = ModelViewProjectionMatrix * vec4(pos, 1.0);
-#endif /* HAIR_SHADER */
-
+#endif
#ifdef V3D_SHADING_TEXTURE_COLOR
uv_interp = uv;
#endif
diff --git a/source/blender/draw/engines/workbench/workbench_deferred.c b/source/blender/draw/engines/workbench/workbench_deferred.c
index d6ecbd98b94..7625d9d1e48 100644
--- a/source/blender/draw/engines/workbench/workbench_deferred.c
+++ b/source/blender/draw/engines/workbench/workbench_deferred.c
@@ -84,7 +84,6 @@ static struct {
/* Shaders */
extern char datatoc_common_hair_lib_glsl[];
-extern char datatoc_common_hair_guides_lib_glsl[];
extern char datatoc_workbench_prepass_vert_glsl[];
extern char datatoc_workbench_prepass_frag_glsl[];
@@ -149,7 +148,6 @@ static char *workbench_build_prepass_vert(void)
DynStr *ds = BLI_dynstr_new();
BLI_dynstr_append(ds, datatoc_common_hair_lib_glsl);
- BLI_dynstr_append(ds, datatoc_common_hair_guides_lib_glsl);
BLI_dynstr_append(ds, datatoc_workbench_prepass_vert_glsl);
str = BLI_dynstr_get_cstring(ds);
@@ -172,17 +170,17 @@ static char *workbench_build_cavity_frag(void)
return str;
}
-static void ensure_deferred_shaders(WORKBENCH_PrivateData *wpd, int index, bool use_textures, DRWShaderHairType hair_type)
+static void ensure_deferred_shaders(WORKBENCH_PrivateData *wpd, int index, bool use_textures, bool is_hair)
{
if (e_data.prepass_sh_cache[index] == NULL) {
- char *defines = workbench_material_build_defines(wpd, use_textures, hair_type);
+ char *defines = workbench_material_build_defines(wpd, use_textures, is_hair);
char *composite_frag = workbench_build_composite_frag(wpd);
char *prepass_vert = workbench_build_prepass_vert();
char *prepass_frag = workbench_build_prepass_frag();
e_data.prepass_sh_cache[index] = DRW_shader_create(
prepass_vert, NULL,
prepass_frag, defines);
- if (!use_textures && hair_type == DRW_SHADER_HAIR_NONE) {
+ if (!use_textures && !is_hair) {
e_data.composite_sh_cache[index] = DRW_shader_create_fullscreen(composite_frag, defines);
}
MEM_freeN(prepass_vert);
@@ -194,26 +192,20 @@ static void ensure_deferred_shaders(WORKBENCH_PrivateData *wpd, int index, bool
static void select_deferred_shaders(WORKBENCH_PrivateData *wpd)
{
- int index_solid = workbench_material_get_shader_index(wpd, false, DRW_SHADER_HAIR_NONE);
- int index_solid_hair = workbench_material_get_shader_index(wpd, false, DRW_SHADER_HAIR_PARTICLES);
- int index_solid_hair_fibers = workbench_material_get_shader_index(wpd, false, DRW_SHADER_HAIR_FIBERS);
- int index_texture = workbench_material_get_shader_index(wpd, true, DRW_SHADER_HAIR_NONE);
- int index_texture_hair = workbench_material_get_shader_index(wpd, true, DRW_SHADER_HAIR_PARTICLES);
- int index_texture_hair_fibers = workbench_material_get_shader_index(wpd, true, DRW_SHADER_HAIR_FIBERS);
-
- ensure_deferred_shaders(wpd, index_solid, false, DRW_SHADER_HAIR_NONE);
- ensure_deferred_shaders(wpd, index_solid_hair, false, DRW_SHADER_HAIR_PARTICLES);
- ensure_deferred_shaders(wpd, index_solid_hair_fibers, false, DRW_SHADER_HAIR_FIBERS);
- ensure_deferred_shaders(wpd, index_texture, true, DRW_SHADER_HAIR_NONE);
- ensure_deferred_shaders(wpd, index_texture_hair, true, DRW_SHADER_HAIR_PARTICLES);
- ensure_deferred_shaders(wpd, index_texture_hair_fibers, true, DRW_SHADER_HAIR_FIBERS);
+ int index_solid = workbench_material_get_shader_index(wpd, false, false);
+ int index_solid_hair = workbench_material_get_shader_index(wpd, false, true);
+ int index_texture = workbench_material_get_shader_index(wpd, true, false);
+ int index_texture_hair = workbench_material_get_shader_index(wpd, true, true);
+
+ ensure_deferred_shaders(wpd, index_solid, false, false);
+ ensure_deferred_shaders(wpd, index_solid_hair, false, true);
+ ensure_deferred_shaders(wpd, index_texture, true, false);
+ ensure_deferred_shaders(wpd, index_texture_hair, true, true);
wpd->prepass_solid_sh = e_data.prepass_sh_cache[index_solid];
wpd->prepass_solid_hair_sh = e_data.prepass_sh_cache[index_solid_hair];
- wpd->prepass_solid_hair_fibers_sh = e_data.prepass_sh_cache[index_solid_hair_fibers];
wpd->prepass_texture_sh = e_data.prepass_sh_cache[index_texture];
wpd->prepass_texture_hair_sh = e_data.prepass_sh_cache[index_texture_hair];
- wpd->prepass_texture_hair_fibers_sh = e_data.prepass_sh_cache[index_texture_hair_fibers];
wpd->composite_sh = e_data.composite_sh_cache[index_solid];
}
@@ -628,7 +620,7 @@ static void workbench_cache_populate_particles(WORKBENCH_Data *vedata, Object *o
struct GPUShader *shader = (color_type != V3D_SHADING_TEXTURE_COLOR) ?
wpd->prepass_solid_hair_sh :
wpd->prepass_texture_hair_sh;
- DRWShadingGroup *shgrp = DRW_shgroup_hair_create(
+ DRWShadingGroup *shgrp = DRW_shgroup_particle_hair_create(
ob, psys, md,
psl->prepass_hair_pass,
shader);
diff --git a/source/blender/draw/engines/workbench/workbench_forward.c b/source/blender/draw/engines/workbench/workbench_forward.c
index af5ba3dc357..3cc04d7936a 100644
--- a/source/blender/draw/engines/workbench/workbench_forward.c
+++ b/source/blender/draw/engines/workbench/workbench_forward.c
@@ -53,7 +53,6 @@ static struct {
struct GPUShader *object_outline_sh;
struct GPUShader *object_outline_texture_sh;
struct GPUShader *object_outline_hair_sh;
- struct GPUShader *object_outline_hair_fibers_sh;
struct GPUShader *checker_depth_sh;
struct GPUTexture *object_id_tx; /* ref only, not alloced */
@@ -67,7 +66,6 @@ static struct {
/* Shaders */
extern char datatoc_common_hair_lib_glsl[];
-extern char datatoc_common_hair_guides_lib_glsl[];
extern char datatoc_workbench_forward_composite_frag_glsl[];
extern char datatoc_workbench_forward_depth_frag_glsl[];
@@ -88,7 +86,6 @@ static char *workbench_build_forward_vert(void)
DynStr *ds = BLI_dynstr_new();
BLI_dynstr_append(ds, datatoc_common_hair_lib_glsl);
- BLI_dynstr_append(ds, datatoc_common_hair_guides_lib_glsl);
BLI_dynstr_append(ds, datatoc_workbench_prepass_vert_glsl);
str = BLI_dynstr_get_cstring(ds);
@@ -196,10 +193,10 @@ static WORKBENCH_MaterialData *get_or_create_material_data(
return material;
}
-static void ensure_forward_shaders(WORKBENCH_PrivateData *wpd, int index, bool use_textures, DRWShaderHairType hair_type)
+static void ensure_forward_shaders(WORKBENCH_PrivateData *wpd, int index, bool use_textures, bool is_hair)
{
- if (e_data.composite_sh_cache[index] == NULL && !use_textures && hair_type == DRW_SHADER_HAIR_NONE) {
- char *defines = workbench_material_build_defines(wpd, use_textures, hair_type);
+ if (e_data.composite_sh_cache[index] == NULL && !use_textures && !is_hair) {
+ char *defines = workbench_material_build_defines(wpd, use_textures, is_hair);
char *composite_frag = workbench_build_forward_composite_frag();
e_data.composite_sh_cache[index] = DRW_shader_create_fullscreen(composite_frag, defines);
MEM_freeN(composite_frag);
@@ -207,7 +204,7 @@ static void ensure_forward_shaders(WORKBENCH_PrivateData *wpd, int index, bool u
}
if (e_data.transparent_accum_sh_cache[index] == NULL) {
- char *defines = workbench_material_build_defines(wpd, use_textures, hair_type);
+ char *defines = workbench_material_build_defines(wpd, use_textures, is_hair);
char *transparent_accum_vert = workbench_build_forward_vert();
char *transparent_accum_frag = workbench_build_forward_transparent_accum_frag();
e_data.transparent_accum_sh_cache[index] = DRW_shader_create(
@@ -221,27 +218,21 @@ static void ensure_forward_shaders(WORKBENCH_PrivateData *wpd, int index, bool u
static void select_forward_shaders(WORKBENCH_PrivateData *wpd)
{
- int index_solid = workbench_material_get_shader_index(wpd, false, DRW_SHADER_HAIR_NONE);
- int index_solid_hair = workbench_material_get_shader_index(wpd, false, DRW_SHADER_HAIR_PARTICLES);
- int index_solid_hair_fibers = workbench_material_get_shader_index(wpd, false, DRW_SHADER_HAIR_FIBERS);
- int index_texture = workbench_material_get_shader_index(wpd, true, DRW_SHADER_HAIR_NONE);
- int index_texture_hair = workbench_material_get_shader_index(wpd, true, DRW_SHADER_HAIR_PARTICLES);
- int index_texture_hair_fibers = workbench_material_get_shader_index(wpd, true, DRW_SHADER_HAIR_FIBERS);
-
- ensure_forward_shaders(wpd, index_solid, false, DRW_SHADER_HAIR_NONE);
- ensure_forward_shaders(wpd, index_solid_hair, false, DRW_SHADER_HAIR_PARTICLES);
- ensure_forward_shaders(wpd, index_solid_hair_fibers, false, DRW_SHADER_HAIR_FIBERS);
- ensure_forward_shaders(wpd, index_texture, true, DRW_SHADER_HAIR_NONE);
- ensure_forward_shaders(wpd, index_texture_hair, true, DRW_SHADER_HAIR_PARTICLES);
- ensure_forward_shaders(wpd, index_texture_hair_fibers, true, DRW_SHADER_HAIR_FIBERS);
+ int index_solid = workbench_material_get_shader_index(wpd, false, false);
+ int index_solid_hair = workbench_material_get_shader_index(wpd, false, true);
+ int index_texture = workbench_material_get_shader_index(wpd, true, false);
+ int index_texture_hair = workbench_material_get_shader_index(wpd, true, true);
+
+ ensure_forward_shaders(wpd, index_solid, false, false);
+ ensure_forward_shaders(wpd, index_solid_hair, false, true);
+ ensure_forward_shaders(wpd, index_texture, true, false);
+ ensure_forward_shaders(wpd, index_texture_hair, true, true);
wpd->composite_sh = e_data.composite_sh_cache[index_solid];
wpd->transparent_accum_sh = e_data.transparent_accum_sh_cache[index_solid];
wpd->transparent_accum_hair_sh = e_data.transparent_accum_sh_cache[index_solid_hair];
- wpd->transparent_accum_hair_fibers_sh = e_data.transparent_accum_sh_cache[index_solid_hair_fibers];
wpd->transparent_accum_texture_sh = e_data.transparent_accum_sh_cache[index_texture];
wpd->transparent_accum_texture_hair_sh = e_data.transparent_accum_sh_cache[index_texture_hair];
- wpd->transparent_accum_texture_hair_fibers_sh = e_data.transparent_accum_sh_cache[index_texture_hair_fibers];
}
/* public functions */
@@ -271,10 +262,9 @@ void workbench_forward_engine_init(WORKBENCH_Data *vedata)
memset(e_data.composite_sh_cache, 0x00, sizeof(struct GPUShader *) * MAX_SHADERS);
memset(e_data.transparent_accum_sh_cache, 0x00, sizeof(struct GPUShader *) * MAX_SHADERS);
- char *defines = workbench_material_build_defines(wpd, false, DRW_SHADER_HAIR_NONE);
- char *defines_texture = workbench_material_build_defines(wpd, true, DRW_SHADER_HAIR_NONE);
- char *defines_hair = workbench_material_build_defines(wpd, false, DRW_SHADER_HAIR_PARTICLES);
- char *defines_hair_fibers = workbench_material_build_defines(wpd, false, DRW_SHADER_HAIR_FIBERS);
+ char *defines = workbench_material_build_defines(wpd, false, false);
+ char *defines_texture = workbench_material_build_defines(wpd, true, false);
+ char *defines_hair = workbench_material_build_defines(wpd, false, true);
char *forward_vert = workbench_build_forward_vert();
e_data.object_outline_sh = DRW_shader_create(
forward_vert, NULL,
@@ -285,9 +275,6 @@ void workbench_forward_engine_init(WORKBENCH_Data *vedata)
e_data.object_outline_hair_sh = DRW_shader_create(
forward_vert, NULL,
datatoc_workbench_forward_depth_frag_glsl, defines_hair);
- e_data.object_outline_hair_fibers_sh = DRW_shader_create(
- forward_vert, NULL,
- forward_vert, defines_hair_fibers);
e_data.checker_depth_sh = DRW_shader_create_fullscreen(
@@ -383,7 +370,6 @@ void workbench_forward_engine_free()
DRW_SHADER_FREE_SAFE(e_data.object_outline_sh);
DRW_SHADER_FREE_SAFE(e_data.object_outline_texture_sh);
DRW_SHADER_FREE_SAFE(e_data.object_outline_hair_sh);
- DRW_SHADER_FREE_SAFE(e_data.object_outline_hair_fibers_sh);
DRW_SHADER_FREE_SAFE(e_data.checker_depth_sh);
workbench_fxaa_engine_free();
@@ -427,7 +413,7 @@ static void workbench_forward_cache_populate_particles(WORKBENCH_Data *vedata, O
struct GPUShader *shader = (color_type != V3D_SHADING_TEXTURE_COLOR)
? wpd->transparent_accum_hair_sh
: wpd->transparent_accum_texture_hair_sh;
- DRWShadingGroup *shgrp = DRW_shgroup_hair_create(
+ DRWShadingGroup *shgrp = DRW_shgroup_particle_hair_create(
ob, psys, md,
psl->transparent_accum_pass,
shader);
@@ -446,7 +432,7 @@ static void workbench_forward_cache_populate_particles(WORKBENCH_Data *vedata, O
if (SPECULAR_HIGHLIGHT_ENABLED(wpd) || MATCAP_ENABLED(wpd)) {
DRW_shgroup_uniform_vec2(shgrp, "invertedViewportSize", DRW_viewport_invert_size_get(), 1);
}
- shgrp = DRW_shgroup_hair_create(ob, psys, md,
+ shgrp = DRW_shgroup_particle_hair_create(ob, psys, md,
vedata->psl->object_outline_pass,
e_data.object_outline_hair_sh);
DRW_shgroup_uniform_int(shgrp, "object_id", &material->object_id, 1);
diff --git a/source/blender/draw/engines/workbench/workbench_materials.c b/source/blender/draw/engines/workbench/workbench_materials.c
index e2131db30c0..54e8aa1c3b3 100644
--- a/source/blender/draw/engines/workbench/workbench_materials.c
+++ b/source/blender/draw/engines/workbench/workbench_materials.c
@@ -42,7 +42,7 @@ void workbench_material_update_data(WORKBENCH_PrivateData *wpd, Object *ob, Mate
}
}
-char *workbench_material_build_defines(WORKBENCH_PrivateData *wpd, bool use_textures, DRWShaderHairType hair_type)
+char *workbench_material_build_defines(WORKBENCH_PrivateData *wpd, bool use_textures, bool is_hair)
{
char *str = NULL;
@@ -87,16 +87,8 @@ char *workbench_material_build_defines(WORKBENCH_PrivateData *wpd, bool use_text
if (NORMAL_ENCODING_ENABLED()) {
BLI_dynstr_appendf(ds, "#define WORKBENCH_ENCODE_NORMALS\n");
}
-
- switch (hair_type) {
- case DRW_SHADER_HAIR_NONE:
- break;
- case DRW_SHADER_HAIR_PARTICLES:
- BLI_dynstr_appendf(ds, "#define HAIR_SHADER\n");
- break;
- case DRW_SHADER_HAIR_FIBERS:
- BLI_dynstr_append(ds, DRW_hair_shader_defines());
- break;
+ if (is_hair) {
+ BLI_dynstr_appendf(ds, "#define HAIR_SHADER\n");
}
#if STUDIOLIGHT_SPHERICAL_HARMONICS_LEVEL == 0
@@ -144,7 +136,7 @@ uint workbench_material_get_hash(WORKBENCH_MaterialData *material_template)
return result;
}
-int workbench_material_get_shader_index(WORKBENCH_PrivateData *wpd, bool use_textures, DRWShaderHairType hair_type)
+int workbench_material_get_shader_index(WORKBENCH_PrivateData *wpd, bool use_textures, bool is_hair)
{
/* NOTE: change MAX_SHADERS accordingly when modifying this function. */
int index = 0;
@@ -160,8 +152,8 @@ int workbench_material_get_shader_index(WORKBENCH_PrivateData *wpd, bool use_tex
/* 2 bits STUDIOLIGHT_ORIENTATION */
SET_FLAG_FROM_TEST(index, wpd->studio_light->flag & STUDIOLIGHT_ORIENTATION_WORLD, 1 << 7);
SET_FLAG_FROM_TEST(index, wpd->studio_light->flag & STUDIOLIGHT_ORIENTATION_VIEWNORMAL, 1 << 8);
- /* 2 bits for hair */
- SET_FLAG_FROM_TEST(index, hair_type, hair_type << 9);
+ /* 1 bit for hair */
+ SET_FLAG_FROM_TEST(index, is_hair, 1 << 9);
return index;
}
diff --git a/source/blender/draw/engines/workbench/workbench_private.h b/source/blender/draw/engines/workbench/workbench_private.h
index fb5bcfd432f..4210e03f470 100644
--- a/source/blender/draw/engines/workbench/workbench_private.h
+++ b/source/blender/draw/engines/workbench/workbench_private.h
@@ -39,7 +39,7 @@
#define WORKBENCH_ENGINE "BLENDER_WORKBENCH"
#define M_GOLDEN_RATION_CONJUGATE 0.618033988749895
-#define MAX_SHADERS (1 << 11)
+#define MAX_SHADERS (1 << 10)
#define TEXTURE_DRAWING_ENABLED(wpd) (wpd->shading.color_type & V3D_SHADING_TEXTURE_COLOR)
#define FLAT_ENABLED(wpd) (wpd->shading.light == V3D_LIGHTING_FLAT)
@@ -142,17 +142,13 @@ typedef struct WORKBENCH_PrivateData {
struct GHash *material_hash;
struct GPUShader *prepass_solid_sh;
struct GPUShader *prepass_solid_hair_sh;
- struct GPUShader *prepass_solid_hair_fibers_sh;
struct GPUShader *prepass_texture_sh;
struct GPUShader *prepass_texture_hair_sh;
- struct GPUShader *prepass_texture_hair_fibers_sh;
struct GPUShader *composite_sh;
struct GPUShader *transparent_accum_sh;
struct GPUShader *transparent_accum_hair_sh;
- struct GPUShader *transparent_accum_hair_fibers_sh;
struct GPUShader *transparent_accum_texture_sh;
struct GPUShader *transparent_accum_texture_hair_sh;
- struct GPUShader *transparent_accum_texture_hair_fibers_sh;
View3DShading shading;
StudioLight *studio_light;
UserDef *user_preferences;
@@ -261,18 +257,11 @@ void workbench_taa_view_updated(WORKBENCH_Data *vedata);
int workbench_taa_calculate_num_iterations(WORKBENCH_Data *vedata);
/* workbench_materials.c */
-typedef enum DRWShaderHairType
-{
- DRW_SHADER_HAIR_NONE = 0,
- DRW_SHADER_HAIR_PARTICLES = 1,
- DRW_SHADER_HAIR_FIBERS = 2,
-} DRWShaderHairType;
-
int workbench_material_determine_color_type(WORKBENCH_PrivateData *wpd, Image *ima);
-char *workbench_material_build_defines(WORKBENCH_PrivateData *wpd, bool use_textures, DRWShaderHairType hair_type);
+char *workbench_material_build_defines(WORKBENCH_PrivateData *wpd, bool use_textures, bool is_hair);
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, bool use_textures, DRWShaderHairType hair_type);
+int workbench_material_get_shader_index(WORKBENCH_PrivateData *wpd, bool use_textures, bool is_hair);
void workbench_material_set_normal_world_matrix(
DRWShadingGroup *grp, WORKBENCH_PrivateData *wpd, float persistent_matrix[3][3]);
void workbench_material_shgroup_uniform(WORKBENCH_PrivateData *wpd, DRWShadingGroup *grp, WORKBENCH_MaterialData *material);