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. @@

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to