[Bf-blender-cvs] [6faa4d77c11] strand_editmode: Removed fiber drawing from the strand edit mode to simplify code.

Lukas Tönne noreply at git.blender.org
Mon Aug 14 09:23:28 CEST 2017


Commit: 6faa4d77c11ec6b0bf8e77f50fa7bb87e54dc039
Author: Lukas Tönne
Date:   Mon Aug 14 08:19:54 2017 +0100
Branches: strand_editmode
https://developer.blender.org/rB6faa4d77c11ec6b0bf8e77f50fa7bb87e54dc039

Removed fiber drawing from the strand edit mode to simplify code.

For rendering hair fibers the edit mode should just use the underlying data.

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

M	source/blender/blenkernel/BKE_editstrands.h
M	source/blender/blenkernel/intern/editstrands.c
M	source/blender/draw/engines/eevee/eevee_materials.c
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_strands.c

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

diff --git a/source/blender/blenkernel/BKE_editstrands.h b/source/blender/blenkernel/BKE_editstrands.h
index 991776deda3..be04edb9fc6 100644
--- a/source/blender/blenkernel/BKE_editstrands.h
+++ b/source/blender/blenkernel/BKE_editstrands.h
@@ -51,8 +51,6 @@ typedef struct BMEditStrands {
 	
 	/* Scalp mesh for fixing root vertices */
 	struct DerivedMesh *root_dm;
-	struct HairPattern *hair_pattern;
-	struct HairGroup *hair_group;
 	
 	int flag;
 	
@@ -60,7 +58,6 @@ typedef struct BMEditStrands {
 	unsigned int elem_glbuf; // legacy gpu code
 	unsigned int dot_glbuf; // legacy gpu code
 	void *batch_cache;
-	void *texture;
 } BMEditStrands;
 
 /* BMEditStrands->flag */
@@ -76,13 +73,6 @@ struct BMEditStrands *BKE_editstrands_from_object(struct Object *ob);
 void BKE_editstrands_update_linked_customdata(struct BMEditStrands *es);
 void BKE_editstrands_free(struct BMEditStrands *es);
 
-/* === Hair Fibers === */
-
-int* BKE_editstrands_hair_get_fiber_lengths(struct BMEditStrands *es, int subdiv);
-void BKE_editstrands_hair_get_texture_buffer_size(struct BMEditStrands *es, int subdiv, int *r_size,
-                                                  int *r_strand_map_start, int *r_strand_vertex_start, int *r_fiber_start);
-void BKE_editstrands_hair_get_texture_buffer(struct BMEditStrands *es, int subdiv, void *texbuffer);
-
 /* === Constraints === */
 
 /* Stores vertex locations for temporary reference:
diff --git a/source/blender/blenkernel/intern/editstrands.c b/source/blender/blenkernel/intern/editstrands.c
index adbb4b707aa..74d300751d3 100644
--- a/source/blender/blenkernel/intern/editstrands.c
+++ b/source/blender/blenkernel/intern/editstrands.c
@@ -131,104 +131,6 @@ void BKE_editstrands_free(BMEditStrands *es)
 		es->root_dm->release(es->root_dm);
 }
 
-/* === Hair fibers === */
-
-typedef struct EditStrandsView {
-	HairDrawDataInterface base;
-	BMEditStrands *edit;
-} EditStrandsView;
-
-static int get_num_strands(const HairDrawDataInterface *hairdata_)
-{
-	const EditStrandsView *strands = (EditStrandsView *)hairdata_;
-	BMesh *bm = strands->edit->base.bm;
-	return BM_strands_count(bm);
-}
-
-static int get_num_verts(const HairDrawDataInterface *hairdata_)
-{
-	const EditStrandsView *strands = (EditStrandsView *)hairdata_;
-	BMesh *bm = strands->edit->base.bm;
-	return bm->totvert;
-}
-
-static void get_strand_lengths(const HairDrawDataInterface* hairdata_, int *r_lengths)
-{
-	const EditStrandsView *strands = (EditStrandsView *)hairdata_;
-	BMesh *bm = strands->edit->base.bm;
-	BMVert *v;
-	BMIter iter;
-	int i;
-	
-	int *length = r_lengths;
-	BM_ITER_STRANDS_INDEX(v, &iter, bm, BM_STRANDS_OF_MESH, i) {
-		*length = BM_strands_keys_count(v);
-		++length;
-	}
-}
-
-static void get_strand_roots(const HairDrawDataInterface* hairdata_, struct MeshSample *r_roots)
-{
-	const EditStrandsView *strands = (EditStrandsView *)hairdata_;
-	BMesh *bm = strands->edit->base.bm;
-	BMVert *v;
-	BMIter iter;
-	int i;
-	
-	MeshSample *root = r_roots;
-	BM_ITER_STRANDS_INDEX(v, &iter, bm, BM_STRANDS_OF_MESH, i) {
-		BM_elem_meshsample_data_named_get(&bm->vdata, v, CD_MSURFACE_SAMPLE, CD_HAIR_ROOT_LOCATION, root);
-		++root;
-	}
-}
-
-static void get_strand_vertices(const HairDrawDataInterface* hairdata_, float (*r_verts)[3])
-{
-	const EditStrandsView *strands = (EditStrandsView *)hairdata_;
-	BMesh *bm = strands->edit->base.bm;
-	BMVert *vert;
-	BMIter iter;
-	
-	float (*co)[3] = r_verts;
-	BM_ITER_MESH(vert, &iter, bm, BM_VERTS_OF_MESH) {
-		copy_v3_v3(*co, vert->co);
-		++co;
-	}
-}
-
-static EditStrandsView editstrands_get_view(BMEditStrands *edit)
-{
-	EditStrandsView hairdata;
-	hairdata.base.group = edit->hair_group;
-	hairdata.base.get_num_strands = get_num_strands;
-	hairdata.base.get_num_verts = get_num_verts;
-	hairdata.base.get_strand_lengths = get_strand_lengths;
-	hairdata.base.get_strand_roots = get_strand_roots;
-	hairdata.base.get_strand_vertices = get_strand_vertices;
-	hairdata.edit = edit;
-	return hairdata;
-}
-
-int* BKE_editstrands_hair_get_fiber_lengths(BMEditStrands *es, int subdiv)
-{
-	EditStrandsView strands = editstrands_get_view(es);
-	return BKE_hair_strands_get_fiber_lengths(&strands.base, subdiv);
-}
-
-void BKE_editstrands_hair_get_texture_buffer_size(BMEditStrands *es, int subdiv, int *r_size,
-                                                  int *r_strand_map_start, int *r_strand_vertex_start, int *r_fiber_start)
-{
-	EditStrandsView strands = editstrands_get_view(es);
-	BKE_hair_strands_get_texture_buffer_size(&strands.base, subdiv,
-	                                         r_size, r_strand_map_start, r_strand_vertex_start, r_fiber_start);
-}
-
-void BKE_editstrands_hair_get_texture_buffer(BMEditStrands *es, int subdiv, void *texbuffer)
-{
-	EditStrandsView strands = editstrands_get_view(es);
-	BKE_hair_strands_get_texture_buffer(&strands.base, subdiv, es->root_dm, texbuffer);
-}
-
 /* === Constraints === */
 
 BMEditStrandsLocations BKE_editstrands_get_locations(BMEditStrands *edit)
diff --git a/source/blender/draw/engines/eevee/eevee_materials.c b/source/blender/draw/engines/eevee/eevee_materials.c
index 3cc6ca81171..836f111d977 100644
--- a/source/blender/draw/engines/eevee/eevee_materials.c
+++ b/source/blender/draw/engines/eevee/eevee_materials.c
@@ -1021,35 +1021,15 @@ static void material_particle_hair(EEVEE_SceneLayerData *sldata, EEVEE_Data *ved
 	}
 	
 	ParticleSettings *part = psys->part;
-	bool use_hair = false;
-	bool use_fibers = false;
 	float mat[4][4];
-	struct Gwn_Batch *hair_geom = NULL;
-	const DRWHairFiberTextureBuffer *fiber_buffer = NULL;
-	GPUTexture **fiber_texture = NULL;
+	unit_m4(mat);
 	
-	if (ob->mode & OB_MODE_HAIR_EDIT) {
-		BMEditStrands *edit = psys->hairedit;
-		const HairEditSettings *tsettings = &scene->toolsettings->hair_edit;
-		if (edit &&tsettings->hair_draw_mode == HAIR_DRAW_FIBERS && edit->hair_group) {
-			use_hair = true;
-			use_fibers = true;
-			copy_m4_m4(mat, ob->obmat);
-			
-			hair_geom = DRW_cache_editstrands_get_hair_fibers(edit, true, tsettings->hair_draw_subdiv, &fiber_buffer);
-			
-			if (!edit->texture) {
-				edit->texture = DRW_texture_create_2D(fiber_buffer->width, fiber_buffer->height,
-				                                      DRW_TEX_RG_32, 0, fiber_buffer->data);
-			}
-			fiber_texture = (GPUTexture **)(&edit->texture);
-		}
-	}
-	else {
+	bool use_hair = false;
+	struct Gwn_Batch *hair_geom = NULL;
+	if ((ob->mode & OB_MODE_HAIR_EDIT) == 0) {
 		int draw_as = (part->draw_as == PART_DRAW_REND) ? part->ren_as : part->draw_as;
 		if (draw_as == PART_DRAW_PATH && (psys->pathcache || psys->childcache)) {
 			use_hair = true;
-			unit_m4(mat);
 			hair_geom = DRW_cache_particles_get_hair(psys, md);
 		}
 	}
@@ -1060,19 +1040,8 @@ static void material_particle_hair(EEVEE_SceneLayerData *sldata, EEVEE_Data *ved
 			ma = &defmaterial;
 		}
 		
-		if (!use_fibers) {
-			DRW_shgroup_call_add(stl->g_data->depth_shgrp, hair_geom, mat);
-			DRW_shgroup_call_add(stl->g_data->depth_shgrp_clip, hair_geom, mat);
-		}
-		else {
-			DRW_shgroup_call_add(stl->g_data->depth_shgrp_hair_fibers, hair_geom, mat);
-			DRW_hair_shader_uniforms(stl->g_data->depth_shgrp_hair_fibers, scene,
-			                         fiber_texture, fiber_buffer);
-			
-			DRW_shgroup_call_add(stl->g_data->depth_shgrp_hair_fibers_clip, hair_geom, mat);
-			DRW_hair_shader_uniforms(stl->g_data->depth_shgrp_hair_fibers_clip, scene,
-			                         fiber_texture, fiber_buffer);
-		}
+		DRW_shgroup_call_add(stl->g_data->depth_shgrp, hair_geom, mat);
+		DRW_shgroup_call_add(stl->g_data->depth_shgrp_clip, hair_geom, mat);
 		
 		DRWShadingGroup *shgrp = BLI_ghash_lookup(material_hash, (const void *)ma);
 		if (!shgrp) {
@@ -1083,7 +1052,7 @@ static void material_particle_hair(EEVEE_SceneLayerData *sldata, EEVEE_Data *ved
 			
 			if (ma->use_nodes && ma->nodetree) {
 				struct GPUMaterial *gpumat = EEVEE_material_hair_get(scene, ma,
-				                                                     use_fibers, stl->effects->use_ao, stl->effects->use_bent_normals);
+				        false, stl->effects->use_ao, stl->effects->use_bent_normals);
 				
 				shgrp = DRW_shgroup_material_create(gpumat, psl->material_pass);
 				if (shgrp) {
@@ -1103,8 +1072,8 @@ static void material_particle_hair(EEVEE_SceneLayerData *sldata, EEVEE_Data *ved
 			
 			/* Fallback to default shader */
 			if (shgrp == NULL) {
-				shgrp = EEVEE_default_shading_group_get(sldata, vedata, true, use_fibers,
-				                                        false, stl->effects->use_ao, stl->effects->use_bent_normals, stl->effects->use_ssr);
+				shgrp = EEVEE_default_shading_group_get(sldata, vedata, true, false,
+				        false, stl->effects->use_ao, stl->effects->use_bent_normals, stl->effects->use_ssr);
 				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);
@@ -1116,11 +1085,6 @@ static void material_particle_hair(EEVEE_SceneLayerData *sldata, EEVEE_Data *ved
 		
 		if (shgrp) {
 			DRW_shgroup_call_add(shgrp, hair_geom, mat);
-			
-			if (use_fibers) {
-				DRW_hair_shader_uniforms(shgrp, scene,
-				                         fiber_texture, fiber_buffer);
-			}
 		}
 	}
 }
diff --git a/source/blender/draw/intern/draw_cache.c b/source/blender/draw/intern/draw_cache.c
index 9a4000cc0f2..fb7773d4b71 100644
--- a/source/blender/draw/intern/draw_cache.c
+++ b/source/blender/draw/intern/draw_cache.c
@@ -2610,12 +2610,6 @@ Gwn_Batch *DRW_cache_editstrands_get_wires(struct BMEditStrands *es)
 	return DRW_editstrands_batch_cache_get_wires(es);
 }
 
-Gwn_Batch *DRW_cache_editstrands_get_hair_fibers(struct BMEditStrands *es, bool use_ribbons, int subdiv,
-                                                 const struct DRWHairFiberTextureBuffer **r_buffer)
-{
-	return DRW_editstrands_batch_cache_get_hair_fibers(es, use_ribbons, subdiv, r_buffer);
-}
-
 /* -------------------------------------------------------------------- */
 
 /** \name Hair */
diff --git a/source/blender/draw/intern/draw_cache.h b/source/blender/draw/intern/draw_cache.h
index b6853c1fd3c..5e4dc14fc2e 100644
--- a/source/blender/draw/intern/draw_ca

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list