[Bf-blender-cvs] [6af06e3c910] hair_guides_grooming: Merge branch 'blender2.8' into hair_guides
Lukas Tönne
noreply at git.blender.org
Tue Jun 26 23:40:20 CEST 2018
Commit: 6af06e3c9107f89257e5adac7ec9ffeaa2791eb6
Author: Lukas Tönne
Date: Tue Jun 26 22:23:49 2018 +0100
Branches: hair_guides_grooming
https://developer.blender.org/rB6af06e3c9107f89257e5adac7ec9ffeaa2791eb6
Merge branch 'blender2.8' into hair_guides
===================================================================
===================================================================
diff --cc source/blender/draw/engines/workbench/shaders/workbench_prepass_vert.glsl
index fb051bddb1c,66b529fcf5e..03d9b02a654
--- a/source/blender/draw/engines/workbench/shaders/workbench_prepass_vert.glsl
+++ b/source/blender/draw/engines/workbench/shaders/workbench_prepass_vert.glsl
@@@ -39,43 -34,28 +39,43 @@@ float integer_noise(int n
void main()
{
#ifdef HAIR_SHADER
-# ifdef V3D_SHADING_TEXTURE_COLOR
+ 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 OB_TEXTURE
++# ifdef V3D_SHADING_TEXTURE_COLOR
vec2 uv = hair_get_customdata_vec2(u);
-# endif
+# endif
float time, thick_time, thickness;
- vec3 pos, tan, binor;
+ vec3 pos, tang, binor;
hair_get_pos_tan_binor_time(
- (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. */
+ 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());
- tan = normalize(tan);
- vec3 nor = normalize(cross(binor, tan));
- nor = normalize(mix(nor, -tan, hair_rand * 0.10));
+# endif
+ /* 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));
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;
- gl_Position = ViewProjectionMatrix * vec4(pos, 1.0);
-#else
+#else /* HAIR_SHADER */
gl_Position = ModelViewProjectionMatrix * vec4(pos, 1.0);
-#endif
+#endif /* HAIR_SHADER */
+
- #ifdef OB_TEXTURE
+ #ifdef V3D_SHADING_TEXTURE_COLOR
uv_interp = uv;
#endif
diff --cc source/blender/draw/engines/workbench/workbench_deferred.c
index c832da4ce39,96ed345ed45..d35cd3b8ba6
--- a/source/blender/draw/engines/workbench/workbench_deferred.c
+++ b/source/blender/draw/engines/workbench/workbench_deferred.c
@@@ -85,10 -84,7 +84,8 @@@ static struct
} e_data = {{NULL}};
/* Shaders */
- extern char datatoc_common_fxaa_lib_glsl[];
- extern char datatoc_common_fullscreen_vert_glsl[];
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[];
@@@ -177,17 -171,17 +173,17 @@@ static char *workbench_build_cavity_fra
return str;
}
- static void ensure_deferred_shaders(WORKBENCH_PrivateData *wpd, int index, int drawtype, DRWShaderHairType hair_type)
-static void ensure_deferred_shaders(WORKBENCH_PrivateData *wpd, int index, bool use_textures, bool is_hair)
++static void ensure_deferred_shaders(WORKBENCH_PrivateData *wpd, int index, bool use_textures, DRWShaderHairType hair_type)
{
if (e_data.prepass_sh_cache[index] == NULL) {
- char *defines = workbench_material_build_defines(wpd, drawtype, hair_type);
- char *defines = workbench_material_build_defines(wpd, use_textures, is_hair);
++ char *defines = workbench_material_build_defines(wpd, use_textures, hair_type);
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 (drawtype == OB_SOLID && hair_type == DRW_SHADER_HAIR_NONE) {
- if (!use_textures && !is_hair) {
++ if (!use_textures && hair_type == DRW_SHADER_HAIR_NONE) {
e_data.composite_sh_cache[index] = DRW_shader_create_fullscreen(composite_frag, defines);
}
MEM_freeN(prepass_vert);
@@@ -199,19 -193,15 +195,19 @@@
static void select_deferred_shaders(WORKBENCH_PrivateData *wpd)
{
- int index_solid = workbench_material_get_shader_index(wpd, OB_SOLID, DRW_SHADER_HAIR_NONE);
- int index_solid_hair = workbench_material_get_shader_index(wpd, OB_SOLID, DRW_SHADER_HAIR_PARTICLES);
- int index_solid_hair_fibers = workbench_material_get_shader_index(wpd, OB_SOLID, DRW_SHADER_HAIR_FIBERS);
- int index_texture = workbench_material_get_shader_index(wpd, OB_TEXTURE, DRW_SHADER_HAIR_NONE);
- int index_texture_hair = workbench_material_get_shader_index(wpd, OB_TEXTURE, DRW_SHADER_HAIR_PARTICLES);
- int index_texture_hair_fibers = workbench_material_get_shader_index(wpd, OB_TEXTURE, 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, OB_SOLID, DRW_SHADER_HAIR_NONE);
- ensure_deferred_shaders(wpd, index_solid_hair, OB_SOLID, DRW_SHADER_HAIR_PARTICLES);
- ensure_deferred_shaders(wpd, index_solid_hair_fibers, OB_SOLID, DRW_SHADER_HAIR_FIBERS);
- ensure_deferred_shaders(wpd, index_texture, OB_TEXTURE, DRW_SHADER_HAIR_NONE);
- ensure_deferred_shaders(wpd, index_texture_hair, OB_TEXTURE, DRW_SHADER_HAIR_PARTICLES);
- ensure_deferred_shaders(wpd, index_texture_hair_fibers, OB_TEXTURE, DRW_SHADER_HAIR_FIBERS);
- 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);
++ 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);
wpd->prepass_solid_sh = e_data.prepass_sh_cache[index_solid];
wpd->prepass_solid_hair_sh = e_data.prepass_sh_cache[index_solid_hair];
diff --cc source/blender/draw/engines/workbench/workbench_forward.c
index c61efd95269,dd57bec05f6..daeb2cb1ffa
--- a/source/blender/draw/engines/workbench/workbench_forward.c
+++ b/source/blender/draw/engines/workbench/workbench_forward.c
@@@ -65,7 -66,7 +67,8 @@@ 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[];
extern char datatoc_workbench_forward_transparent_accum_frag_glsl[];
@@@ -214,10 -207,10 +210,10 @@@ static WORKBENCH_MaterialData *get_or_c
return material;
}
- static void ensure_forward_shaders(WORKBENCH_PrivateData *wpd, int index, int drawtype, DRWShaderHairType hair_type)
-static void ensure_forward_shaders(WORKBENCH_PrivateData *wpd, int index, bool use_textures, bool is_hair)
++static void ensure_forward_shaders(WORKBENCH_PrivateData *wpd, int index, bool use_textures, DRWShaderHairType hair_type)
{
- if (e_data.composite_sh_cache[index] == NULL && drawtype == OB_SOLID && hair_type == DRW_SHADER_HAIR_NONE) {
- char *defines = workbench_material_build_defines(wpd, drawtype, 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);
++ 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);
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);
@@@ -225,7 -218,7 +221,7 @@@
}
if (e_data.transparent_accum_sh_cache[index] == NULL) {
- char *defines = workbench_material_build_defines(wpd, drawtype, hair_type);
- char *defines = workbench_material_build_defines(wpd, use_textures, is_hair);
++ char *defines = workbench_material_build_defines(wpd, use_textures, hair_type);
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(
@@@ -239,19 -232,15 +235,19 @@@
static void select_forward_shaders(WORKBENCH_PrivateData *wpd)
{
- int index_solid = workbench_material_get_shader_index(wpd, OB_SOLID, DRW_SHADER_HAIR_NONE);
- int index_solid_hair = workbench_material_get_shader_index(wpd, OB_SOLID, DRW_SHADER_HAIR_PARTICLES);
- int index_solid_hair_fibers = workbench_material_get_shader_index(wpd, OB_SOLID,
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list