[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