[Bf-blender-cvs] [e7df5f85285] strand_editmode: Split off hair drawing code into a separate file.

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


Commit: e7df5f8528508bf93e690619f606a2d3ba50aaa2
Author: Lukas Tönne
Date:   Fri Aug 11 08:17:03 2017 +0100
Branches: strand_editmode
https://developer.blender.org/rBe7df5f8528508bf93e690619f606a2d3ba50aaa2

Split off hair drawing code into a separate file.

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

M	source/blender/blenkernel/BKE_hair.h
M	source/blender/blenkernel/CMakeLists.txt
M	source/blender/blenkernel/intern/editstrands.c
M	source/blender/blenkernel/intern/hair.c
A	source/blender/blenkernel/intern/hair_draw.c
M	source/blender/blenloader/intern/readfile.c
M	source/blender/blenloader/intern/writefile.c
M	source/blender/draw/intern/draw_cache_impl_strands.c
M	source/blender/makesdna/DNA_hair_types.h
M	source/blender/makesrna/intern/rna_hair.c

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

diff --git a/source/blender/blenkernel/BKE_hair.h b/source/blender/blenkernel/BKE_hair.h
index 0fa44b3de66..c399c78a735 100644
--- a/source/blender/blenkernel/BKE_hair.h
+++ b/source/blender/blenkernel/BKE_hair.h
@@ -73,27 +73,40 @@ bool BKE_hair_fiber_get_vectors(const struct HairFiber *fiber, struct DerivedMes
                                    float loc[3], float nor[3], float tang[3]);
 bool BKE_hair_fiber_get_matrix(const struct HairFiber *fiber, struct DerivedMesh *root_dm, float mat[4][4]);
 
-typedef struct StrandsView {
-	int (*get_num_strands)(const struct StrandsView* strands);
-	int (*get_num_verts)(const struct StrandsView* strands);
+typedef struct HairDrawDataInterface {
+	int (*get_num_strands)(const struct HairDrawDataInterface* hairdata);
+	int (*get_num_verts)(const struct HairDrawDataInterface* hairdata);
 	
-	void (*get_strand_lengths)(const struct StrandsView* strands, int *r_lengths);
-	void (*get_strand_roots)(const struct StrandsView* strands, struct MeshSample *r_roots);
-	void (*get_strand_vertices)(const struct StrandsView* strands, float (*positions)[3]);
-} StrandsView;
+	void (*get_strand_lengths)(const struct HairDrawDataInterface* hairdata, int *r_lengths);
+	void (*get_strand_roots)(const struct HairDrawDataInterface* hairdata, struct MeshSample *r_roots);
+	void (*get_strand_vertices)(const struct HairDrawDataInterface* hairdata, float (*r_positions)[3]);
+} HairDrawDataInterface;
 
-struct HairFiber* BKE_hair_fibers_create(const struct StrandsView *strands,
+struct HairFiber* BKE_hair_fibers_create(const struct HairDrawDataInterface *hairdata,
                                          struct DerivedMesh *scalp, unsigned int amount,
                                          unsigned int seed);
 
-int* BKE_hair_get_fiber_lengths(const struct HairFiber *fibers, int totfibers,
-                                 const struct StrandsView *strands, int subdiv);
+int* BKE_hair_strands_get_fiber_lengths(const struct HairFiber *fibers, int totfibers,
+                                        const struct HairDrawDataInterface *hairdata, int subdiv);
 
-void BKE_hair_get_texture_buffer_size(const struct StrandsView *strands, int totfibers, int subdiv,
-                                      int *r_size, int *r_strand_map_start,
-                                      int *r_strand_vertex_start, int *r_fiber_start);
-void BKE_hair_get_texture_buffer(const struct StrandsView *strands, struct DerivedMesh *scalp,
-                                 const struct HairFiber *fibers, int totfibers, int subdiv,
-                                 void *texbuffer);
+void BKE_hair_strands_get_texture_buffer_size(const struct HairDrawDataInterface *hairdata, int totfibers, int subdiv,
+                                              int *r_size, int *r_strand_map_start,
+                                              int *r_strand_vertex_start, int *r_fiber_start);
+void BKE_hair_strands_get_texture_buffer(const struct HairDrawDataInterface *hairdata, struct DerivedMesh *scalp,
+                                         const struct HairFiber *fibers, int totfibers, int subdiv,
+                                         void *texbuffer);
+
+/* === Draw Cache === */
+
+enum {
+	BKE_HAIR_BATCH_DIRTY_ALL = 0,
+};
+void BKE_hair_batch_cache_dirty(struct HairGroup *group, int mode);
+void BKE_hair_batch_cache_free(struct HairGroup *group);
+
+int* BKE_hair_get_fiber_lengths(struct HairGroup *group, int subdiv);
+void BKE_hair_group_get_texture_buffer_size(struct HairPattern *hair, struct HairGroup *group, int subdiv, int *r_size,
+                                            int *r_strand_map_start, int *r_strand_vertex_start, int *r_fiber_start);
+void BKE_hair_group_get_texture_buffer(struct HairPattern *hair, struct HairGroup *group, struct DerivedMesh *scalp, int subdiv, void *texbuffer);
 
 #endif
diff --git a/source/blender/blenkernel/CMakeLists.txt b/source/blender/blenkernel/CMakeLists.txt
index 40177de1128..7fbf33fb255 100644
--- a/source/blender/blenkernel/CMakeLists.txt
+++ b/source/blender/blenkernel/CMakeLists.txt
@@ -113,6 +113,7 @@ set(SRC
 	intern/gpencil.c
 	intern/group.c
 	intern/hair.c
+	intern/hair_draw.c
 	intern/icons.c
 	intern/idcode.c
 	intern/idprop.c
diff --git a/source/blender/blenkernel/intern/editstrands.c b/source/blender/blenkernel/intern/editstrands.c
index 8cfc0bb606c..723590be4a6 100644
--- a/source/blender/blenkernel/intern/editstrands.c
+++ b/source/blender/blenkernel/intern/editstrands.c
@@ -135,27 +135,27 @@ void BKE_editstrands_free(BMEditStrands *es)
 /* === Hair fibers === */
 
 typedef struct EditStrandsView {
-	StrandsView base;
+	HairDrawDataInterface base;
 	BMEditStrands *edit;
 } EditStrandsView;
 
-static int get_num_strands(const StrandsView *strands_)
+static int get_num_strands(const HairDrawDataInterface *hairdata_)
 {
-	const EditStrandsView *strands = (EditStrandsView *)strands_;
+	const EditStrandsView *strands = (EditStrandsView *)hairdata_;
 	BMesh *bm = strands->edit->base.bm;
 	return BM_strands_count(bm);
 }
 
-static int get_num_verts(const StrandsView *strands_)
+static int get_num_verts(const HairDrawDataInterface *hairdata_)
 {
-	const EditStrandsView *strands = (EditStrandsView *)strands_;
+	const EditStrandsView *strands = (EditStrandsView *)hairdata_;
 	BMesh *bm = strands->edit->base.bm;
 	return bm->totvert;
 }
 
-static void get_strand_lengths(const StrandsView* strands_, int *r_lengths)
+static void get_strand_lengths(const HairDrawDataInterface* hairdata_, int *r_lengths)
 {
-	const EditStrandsView *strands = (EditStrandsView *)strands_;
+	const EditStrandsView *strands = (EditStrandsView *)hairdata_;
 	BMesh *bm = strands->edit->base.bm;
 	BMVert *v;
 	BMIter iter;
@@ -168,9 +168,9 @@ static void get_strand_lengths(const StrandsView* strands_, int *r_lengths)
 	}
 }
 
-static void get_strand_roots(const StrandsView* strands_, struct MeshSample *r_roots)
+static void get_strand_roots(const HairDrawDataInterface* hairdata_, struct MeshSample *r_roots)
 {
-	const EditStrandsView *strands = (EditStrandsView *)strands_;
+	const EditStrandsView *strands = (EditStrandsView *)hairdata_;
 	BMesh *bm = strands->edit->base.bm;
 	BMVert *v;
 	BMIter iter;
@@ -183,14 +183,14 @@ static void get_strand_roots(const StrandsView* strands_, struct MeshSample *r_r
 	}
 }
 
-static void get_strand_vertices(const StrandsView* strands_, float (*verts)[3])
+static void get_strand_vertices(const HairDrawDataInterface* hairdata_, float (*r_verts)[3])
 {
-	const EditStrandsView *strands = (EditStrandsView *)strands_;
+	const EditStrandsView *strands = (EditStrandsView *)hairdata_;
 	BMesh *bm = strands->edit->base.bm;
 	BMVert *vert;
 	BMIter iter;
 	
-	float (*co)[3] = verts;
+	float (*co)[3] = r_verts;
 	BM_ITER_MESH(vert, &iter, bm, BM_VERTS_OF_MESH) {
 		copy_v3_v3(*co, vert->co);
 		++co;
@@ -199,14 +199,14 @@ static void get_strand_vertices(const StrandsView* strands_, float (*verts)[3])
 
 static EditStrandsView editstrands_get_view(BMEditStrands *edit)
 {
-	EditStrandsView strands;
-	strands.base.get_num_strands = get_num_strands;
-	strands.base.get_num_verts = get_num_verts;
-	strands.base.get_strand_lengths = get_strand_lengths;
-	strands.base.get_strand_roots = get_strand_roots;
-	strands.base.get_strand_vertices = get_strand_vertices;
-	strands.edit = edit;
-	return strands;
+	EditStrandsView hairdata;
+	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;
 }
 
 bool BKE_editstrands_hair_ensure(BMEditStrands *es)
@@ -236,21 +236,21 @@ void BKE_editstrands_hair_free(BMEditStrands *es)
 int* BKE_editstrands_hair_get_fiber_lengths(BMEditStrands *es, int subdiv)
 {
 	EditStrandsView strands = editstrands_get_view(es);
-	return BKE_hair_get_fiber_lengths(es->hair_fibers, es->hair_totfibers, &strands.base, subdiv);
+	return BKE_hair_strands_get_fiber_lengths(es->hair_fibers, es->hair_totfibers, &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_get_texture_buffer_size(&strands.base, es->hair_totfibers, subdiv, r_size,
+	BKE_hair_strands_get_texture_buffer_size(&strands.base, es->hair_totfibers, 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_get_texture_buffer(&strands.base, es->root_dm, es->hair_fibers, es->hair_totfibers, subdiv, texbuffer);
+	BKE_hair_strands_get_texture_buffer(&strands.base, es->root_dm, es->hair_fibers, es->hair_totfibers, subdiv, texbuffer);
 }
 
 /* === Constraints === */
diff --git a/source/blender/blenkernel/intern/hair.c b/source/blender/blenkernel/intern/hair.c
index 3802d5499f1..c559d994c90 100644
--- a/source/blender/blenkernel/intern/hair.c
+++ b/source/blender/blenkernel/intern/hair.c
@@ -25,7 +25,7 @@
  * ***** END GPL LICENSE BLOCK *****
  */
 
-/** \file blender/blenkernel/intern/strands.c
+/** \file blender/blenkernel/intern/hair.c
  *  \ingroup bke
  */
 
@@ -35,7 +35,9 @@
 
 #include "BLI_math.h"
 #include "BLI_kdtree.h"
+#include "BLI_listbase.h"
 #include "BLI_rand.h"
+#include "BLI_string_utf8.h"
 #include "BLI_string_utils.h"
 
 #include "DNA_hair_types.h"
@@ -46,8 +48,6 @@
 
 #include "BLT_translation.h"
 
-#include "bmesh.h"
-
 HairPattern* BKE_hair_new(void)
 {
 	HairPattern *hair = MEM_callocN(sizeof(HairPattern), "hair");
@@ -133,10 +133,9 @@ HairGroup* BKE_hair_group_new(HairPattern *hair, int type)
 	
 	switch (type) {
 		case HAIR_GROUP_TYPE_NORMALS:
-			group->max_length = 0.1f;
+			group->normals_max_length = 0.1f;
 			break;
 		case HAIR_GROUP_TYPE_STRANDS:
-			group->max_length = 0.5f;
 			break;
 	}
 	
@@ -1

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list