[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