[Bf-blender-cvs] [7ad71174fe9] tmp_hair_curves: Remove the parent interpolation hair shader and use the transform-feedback shader instead.

Lukas Tönne noreply at git.blender.org
Mon Jul 2 08:44:02 CEST 2018


Commit: 7ad71174fe9a55227cbcdfdbd793248a416d59c5
Author: Lukas Tönne
Date:   Sat Jun 30 15:07:03 2018 +0100
Branches: tmp_hair_curves
https://developer.blender.org/rB7ad71174fe9a55227cbcdfdbd793248a416d59c5

Remove the parent interpolation hair shader and use the transform-feedback shader instead.

===================================================================

M	source/blender/draw/CMakeLists.txt
M	source/blender/draw/engines/eevee/eevee_materials.c
M	source/blender/draw/engines/eevee/eevee_private.h
M	source/blender/draw/engines/eevee/shaders/lit_surface_vert.glsl
M	source/blender/draw/engines/eevee/shaders/prepass_vert.glsl
M	source/blender/draw/engines/workbench/shaders/workbench_prepass_vert.glsl
M	source/blender/draw/engines/workbench/workbench_deferred.c
M	source/blender/draw/engines/workbench/workbench_forward.c
M	source/blender/draw/engines/workbench/workbench_materials.c
M	source/blender/draw/engines/workbench/workbench_private.h
M	source/blender/draw/intern/draw_cache.c
M	source/blender/draw/intern/draw_cache.h
M	source/blender/draw/intern/draw_cache_impl.h
M	source/blender/draw/intern/draw_cache_impl_hair.c
M	source/blender/draw/intern/draw_cache_impl_particles.c
M	source/blender/draw/intern/draw_common.h
M	source/blender/draw/intern/draw_hair.c
D	source/blender/draw/intern/draw_hair_fibers.c
M	source/blender/draw/intern/draw_hair_private.h
M	source/blender/draw/modes/object_mode.c
D	source/blender/draw/modes/shaders/common_hair_fibers_lib.glsl

===================================================================

diff --git a/source/blender/draw/CMakeLists.txt b/source/blender/draw/CMakeLists.txt
index 8d013efc5cc..65ad5aea836 100644
--- a/source/blender/draw/CMakeLists.txt
+++ b/source/blender/draw/CMakeLists.txt
@@ -66,7 +66,6 @@ set(SRC
 	intern/draw_common.c
 	intern/draw_debug.c
 	intern/draw_hair.c
-	intern/draw_hair_fibers.c
 	intern/draw_instance_data.c
 	intern/draw_manager.c
 	intern/draw_manager_data.c
@@ -228,7 +227,6 @@ data_to_c_simple(engines/workbench/shaders/workbench_world_light_lib.glsl SRC)
 
 data_to_c_simple(modes/shaders/common_globals_lib.glsl SRC)
 data_to_c_simple(modes/shaders/common_hair_lib.glsl SRC)
-data_to_c_simple(modes/shaders/common_hair_fibers_lib.glsl SRC)
 data_to_c_simple(modes/shaders/common_hair_refine_vert.glsl SRC)
 data_to_c_simple(modes/shaders/common_view_lib.glsl SRC)
 data_to_c_simple(modes/shaders/common_fxaa_lib.glsl SRC)
diff --git a/source/blender/draw/engines/eevee/eevee_materials.c b/source/blender/draw/engines/eevee/eevee_materials.c
index ebb763e6ce1..da57225156b 100644
--- a/source/blender/draw/engines/eevee/eevee_materials.c
+++ b/source/blender/draw/engines/eevee/eevee_materials.c
@@ -43,7 +43,6 @@
 #include "DNA_hair_types.h"
 
 #include "GPU_material.h"
-#include "GPU_texture.h"
 
 #include "eevee_engine.h"
 #include "eevee_lut.h"
@@ -57,8 +56,6 @@ static struct {
 
 	struct GPUShader *default_prepass_sh;
 	struct GPUShader *default_prepass_clip_sh;
-	struct GPUShader *default_prepass_hair_fiber_sh;
-	struct GPUShader *default_prepass_hair_fiber_clip_sh;
 	struct GPUShader *default_hair_prepass_sh;
 	struct GPUShader *default_hair_prepass_clip_sh;
 	struct GPUShader *default_lit[VAR_MAT_MAX];
@@ -91,7 +88,6 @@ extern char datatoc_bsdf_common_lib_glsl[];
 extern char datatoc_bsdf_sampling_lib_glsl[];
 extern char datatoc_common_uniforms_lib_glsl[];
 extern char datatoc_common_hair_lib_glsl[];
-extern char datatoc_common_hair_fibers_lib_glsl[];
 extern char datatoc_common_view_lib_glsl[];
 extern char datatoc_irradiance_lib_glsl[];
 extern char datatoc_octahedron_lib_glsl[];
@@ -291,9 +287,6 @@ static char *eevee_get_defines(int options)
 	if ((options & VAR_MAT_HAIR) != 0) {
 		BLI_dynstr_appendf(ds, "#define HAIR_SHADER\n");
 	}
-	if ((options & VAR_MAT_HAIR_FIBERS) != 0) {
-		BLI_dynstr_append(ds, DRW_hair_shader_defines());
-	}
 	if ((options & VAR_MAT_PROBE) != 0) {
 		BLI_dynstr_appendf(ds, "#define PROBE_CAPTURE\n");
 	}
@@ -571,7 +564,7 @@ void EEVEE_materials_init(EEVEE_ViewLayerData *sldata, EEVEE_StorageList *stl, E
 		        datatoc_lit_surface_frag_glsl,
 		        datatoc_lit_surface_frag_glsl,
 		        datatoc_volumetric_lib_glsl);
-		
+
 		e_data.volume_shader_lib = BLI_string_joinN(
 		        datatoc_common_view_lib_glsl,
 		        datatoc_common_uniforms_lib_glsl,
@@ -588,7 +581,6 @@ void EEVEE_materials_init(EEVEE_ViewLayerData *sldata, EEVEE_StorageList *stl, E
 		e_data.vert_shader_str = BLI_string_joinN(
 		        datatoc_common_view_lib_glsl,
 		        datatoc_common_hair_lib_glsl,
-		        datatoc_common_hair_fibers_lib_glsl,
 		        datatoc_lit_surface_vert_glsl);
 
 		e_data.default_background = DRW_shader_create(
@@ -607,25 +599,6 @@ void EEVEE_materials_init(EEVEE_ViewLayerData *sldata, EEVEE_StorageList *stl, E
 		        datatoc_prepass_vert_glsl, NULL, datatoc_prepass_frag_glsl,
 		        "#define CLIP_PLANES\n");
 
-		char *hair_fiber_vert_str = BLI_string_joinN(
-		        datatoc_common_view_lib_glsl,
-		        datatoc_common_hair_lib_glsl,
-		        datatoc_common_hair_fibers_lib_glsl,
-		        datatoc_prepass_vert_glsl);
-
-		e_data.default_prepass_hair_fiber_sh = DRW_shader_create(
-		        hair_fiber_vert_str, NULL, datatoc_prepass_frag_glsl, DRW_hair_shader_defines());
-
-		{
-			char defines[256];
-			BLI_snprintf(defines, sizeof(defines), "#define CLIP_PLANES\n%s",
-			             DRW_hair_shader_defines());
-			e_data.default_prepass_hair_fiber_clip_sh = DRW_shader_create(
-			        hair_fiber_vert_str, NULL, datatoc_prepass_frag_glsl, defines);
-		}
-
-		MEM_freeN(hair_fiber_vert_str);
-
 		char *vert_str = BLI_string_joinN(
 		        datatoc_common_view_lib_glsl,
 		        datatoc_common_hair_lib_glsl,
@@ -829,14 +802,13 @@ struct GPUMaterial *EEVEE_material_mesh_depth_get(
 }
 
 struct GPUMaterial *EEVEE_material_hair_get(
-        struct Scene *scene, Material *ma, int shadow_method, bool use_fibers)
+        struct Scene *scene, Material *ma, int shadow_method)
 {
 	const void *engine = &DRW_engine_viewport_eevee_type;
-	int options = VAR_MAT_HAIR | VAR_MAT_MESH;
+	int options = VAR_MAT_MESH | VAR_MAT_HAIR;
+
 	options |= eevee_material_shadow_option(shadow_method);
-	if (use_fibers) {
-		options |= VAR_MAT_HAIR_FIBERS;
-	}
+
 	GPUMaterial *mat = DRW_shader_find_from_material(ma, engine, options);
 	if (mat) {
 		return mat;
@@ -854,27 +826,19 @@ struct GPUMaterial *EEVEE_material_hair_get(
 	return mat;
 }
 
-typedef enum ShaderHairType
-{
-	DRW_SHADER_HAIR_NONE,
-	DRW_SHADER_HAIR_PARTICLES,
-	DRW_SHADER_HAIR_FIBERS,
-} ShaderHairType;
-
 /**
  * Create a default shading group inside the given pass.
  **/
 static struct DRWShadingGroup *EEVEE_default_shading_group_create(
         EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata, DRWPass *pass,
-        ShaderHairType hair_type, bool is_flat_normal, bool use_blend, bool use_ssr, int shadow_method)
+        bool is_hair, bool is_flat_normal, bool use_blend, bool use_ssr, int shadow_method)
 {
 	EEVEE_EffectsInfo *effects = vedata->stl->effects;
 	static int ssr_id;
 	ssr_id = (use_ssr) ? 1 : -1;
 	int options = VAR_MAT_MESH;
 
-	if (hair_type == DRW_SHADER_HAIR_PARTICLES) options |= VAR_MAT_HAIR;
-	if (hair_type == DRW_SHADER_HAIR_FIBERS) options |= VAR_MAT_HAIR | VAR_MAT_HAIR_FIBERS;
+	if (is_hair) options |= VAR_MAT_HAIR;
 	if (is_flat_normal) options |= VAR_MAT_FLAT;
 	if (use_blend) options |= VAR_MAT_BLEND;
 	if (((effects->enabled_effects & EFFECT_VOLUMETRIC) != 0) && use_blend) options |= VAR_MAT_VOLUME;
@@ -897,16 +861,15 @@ static struct DRWShadingGroup *EEVEE_default_shading_group_create(
 static struct DRWShadingGroup *EEVEE_default_shading_group_get(
         EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata,
         Object *ob, ParticleSystem *psys, ModifierData *md,
-        ShaderHairType hair_type, bool is_flat_normal, bool use_ssr, int shadow_method)
+        bool is_hair, bool is_flat_normal, bool use_ssr, int shadow_method)
 {
 	static int ssr_id;
 	ssr_id = (use_ssr) ? 1 : -1;
 	int options = VAR_MAT_MESH;
 
-	BLI_assert(hair_type != DRW_SHADER_HAIR_PARTICLES || (ob && psys && md));
+	BLI_assert(!is_hair || (ob && psys && md));
 
-	if (hair_type == DRW_SHADER_HAIR_PARTICLES) options |= VAR_MAT_HAIR;
-	if (hair_type == DRW_SHADER_HAIR_FIBERS) options |= VAR_MAT_HAIR | VAR_MAT_HAIR_FIBERS;
+	if (is_hair) options |= VAR_MAT_HAIR;
 	if (is_flat_normal) options |= VAR_MAT_FLAT;
 
 	options |= eevee_material_shadow_option(shadow_method);
@@ -916,23 +879,22 @@ static struct DRWShadingGroup *EEVEE_default_shading_group_get(
 	}
 
 	if (vedata->psl->default_pass[options] == NULL) {
-		//DRWState state = DRW_STATE_WRITE_COLOR | DRW_STATE_DEPTH_EQUAL | DRW_STATE_CLIP_PLANES | DRW_STATE_WIRE;
-		DRWState state = DRW_STATE_WRITE_COLOR | DRW_STATE_DEPTH_EQUAL;
+		DRWState state = DRW_STATE_WRITE_COLOR | DRW_STATE_DEPTH_EQUAL | DRW_STATE_CLIP_PLANES | DRW_STATE_WIRE;
 		vedata->psl->default_pass[options] = DRW_pass_create("Default Lit Pass", state);
 
 		/* XXX / WATCH: This creates non persistent binds for the ubos and textures.
 		 * But it's currently OK because the following shgroups does not add any bind.
 		 * EDIT: THIS IS NOT THE CASE FOR HAIRS !!! DUMMY!!! */
-		if (hair_type != DRW_SHADER_HAIR_PARTICLES) {
+		if (!is_hair) {
 			DRWShadingGroup *shgrp = DRW_shgroup_create(e_data.default_lit[options], vedata->psl->default_pass[options]);
 			add_standard_uniforms(shgrp, sldata, vedata, &ssr_id, NULL, false, false);
 		}
 	}
 
-	if (hair_type == DRW_SHADER_HAIR_PARTICLES) {
-		DRWShadingGroup *shgrp = DRW_shgroup_hair_create(ob, psys, md,
-		                                                 vedata->psl->default_pass[options],
-		                                                 e_data.default_lit[options]);
+	if (is_hair) {
+		DRWShadingGroup *shgrp = DRW_shgroup_particle_hair_create(ob, psys, md,
+		                                                          vedata->psl->default_pass[options],
+		                                                          e_data.default_lit[options]);
 		add_standard_uniforms(shgrp, sldata, vedata, &ssr_id, NULL, false, false);
 		return shgrp;
 	}
@@ -1287,7 +1249,7 @@ static void material_opaque(
 		bool use_ssr = ((effects->enabled_effects & EFFECT_SSR) != 0);
 		*shgrp = EEVEE_default_shading_group_get(sldata, vedata,
 		                                         NULL, NULL, NULL,
-		                                         DRW_SHADER_HAIR_NONE, use_flat_nor, use_ssr, linfo->shadow_method);
+		                                         false, use_flat_nor, use_ssr, linfo->shadow_method);
 		DRW_shgroup_uniform_vec3(*shgrp, "basecol", color_p, 1);
 		DRW_shgroup_uniform_float(*shgrp, "metallic", metal_p, 1);
 		DRW_shgroup_uniform_float(*shgrp, "specular", spec_p, 1);
@@ -1373,7 +1335,7 @@ static void material_transparent(
 	if (*shgrp == NULL) {
 		*shgrp = EEVEE_default_shading_group_create(
 		        sldata, vedata, psl->transparent_pass,
-		        DRW_SHADER_HAIR_NONE, use_flat_nor, true, false, linfo->shadow_method);
+		        false, use_flat_nor, true, false, linfo->shadow_method);
 		DRW_shgroup_uniform_vec3(*shgrp, "basecol", color_p, 1);
 		DRW_shgroup_uniform_float(*shgrp, "metallic", metal_p, 1);
 		DRW_shgroup_uniform_float(*shgrp, "specular", spec_p, 1);
@@ -1461,12 +1423,12 @@ static void material_particle_hair(
 	float *spec_p = &ma->spec;
 	float *rough_p = &ma->roughness;
 
-	shgrp = DRW_shgroup_hair_create(
+	shgrp = DRW_shgroup_particle_hair_create(
 	        ob, psys, md,
 	        psl->depth_pass,
 	        e_data.default_hair_prepass_sh);
 
-	shgrp = DRW_shgroup_hair_create(
+	shgrp = DRW_shgroup_particle_hair_create(
 	        ob, psys, md,
 	        psl->depth_pass_clip,
 	        e_data.default_hair_prepass_cl

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list