[Bf-blender-cvs] [7b7cef9] strand_gpu: Use plain vertex and curve arrays in Strands data, so that they can be used as OpenGL buffers.
Lukas Tönne
noreply at git.blender.org
Tue Jul 5 09:56:57 CEST 2016
Commit: 7b7cef9863d61c280502e92a38ded2e24b09de4e
Author: Lukas Tönne
Date: Wed Jun 29 18:02:42 2016 +0200
Branches: strand_gpu
https://developer.blender.org/rB7b7cef9863d61c280502e92a38ded2e24b09de4e
Use plain vertex and curve arrays in Strands data, so that they can be used as OpenGL buffers.
===================================================================
M source/blender/blenkernel/BKE_strands.h
M source/blender/blenkernel/intern/strands.c
M source/blender/blenloader/intern/readfile.c
M source/blender/blenloader/intern/writefile.c
M source/blender/editors/space_view3d/drawstrands.c
M source/blender/makesdna/DNA_strand_types.h
===================================================================
diff --git a/source/blender/blenkernel/BKE_strands.h b/source/blender/blenkernel/BKE_strands.h
index 2ecdaf8..dac8548 100644
--- a/source/blender/blenkernel/BKE_strands.h
+++ b/source/blender/blenkernel/BKE_strands.h
@@ -46,16 +46,18 @@ struct Strands *BKE_strands_copy(struct Strands *strands);
void BKE_strands_free(struct Strands *strands);
struct StrandInfo *BKE_strands_scatter(struct DerivedMesh *scalp, unsigned int amount,
- const ControlStrand *controls, unsigned int num_controls,
+ const StrandCurve *controls, unsigned int num_controls,
unsigned int seed);
+#if 0
typedef struct StrandCurveParams {
struct DerivedMesh *scalp;
unsigned int max_verts;
} StrandCurveParams;
struct StrandData *BKE_strand_data_interpolate(struct StrandInfo *strands, unsigned int num_strands,
- const ControlStrand *controls, struct StrandCurveParams *params);
+ const StrandCurve *controls, struct StrandCurveParams *params);
void BKE_strand_data_free(struct StrandData *data);
+#endif
#endif
diff --git a/source/blender/blenkernel/intern/strands.c b/source/blender/blenkernel/intern/strands.c
index b86421d..ea4e929 100644
--- a/source/blender/blenkernel/intern/strands.c
+++ b/source/blender/blenkernel/intern/strands.c
@@ -50,8 +50,11 @@ Strands *BKE_strands_copy(Strands *strands)
{
Strands *nstrands = MEM_dupallocN(strands);
- if (strands->controls) {
- nstrands->controls = MEM_dupallocN(strands->controls);
+ if (strands->curves) {
+ nstrands->curves = MEM_dupallocN(strands->curves);
+ }
+ if (strands->verts) {
+ nstrands->verts = MEM_dupallocN(strands->verts);
}
/* lazy initialized */
@@ -69,7 +72,7 @@ void BKE_strands_free(Strands *strands)
}
StrandInfo *BKE_strands_scatter(struct DerivedMesh *scalp, unsigned int amount,
- const ControlStrand *controls, unsigned int num_controls,
+ const StrandCurve *controls, unsigned int num_controls,
unsigned int seed)
{
MeshSampleGenerator *gen = BKE_mesh_sample_gen_surface_random(scalp, seed);
@@ -100,8 +103,9 @@ StrandInfo *BKE_strands_scatter(struct DerivedMesh *scalp, unsigned int amount,
return strands;
}
+#if 0
StrandData *BKE_strand_data_interpolate(StrandInfo *strands, unsigned int num_strands,
- const ControlStrand *controls, struct StrandCurveParams *params)
+ const StrandCurve *controls, struct StrandCurveParams *params)
{
StrandData *data = MEM_callocN(sizeof(StrandData), "strand interpolation data");
StrandInfo *s;
@@ -155,3 +159,4 @@ void BKE_strand_data_free(StrandData *data)
MEM_freeN(data);
}
}
+#endif
diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c
index 3f1c736..72d1258 100644
--- a/source/blender/blenloader/intern/readfile.c
+++ b/source/blender/blenloader/intern/readfile.c
@@ -4308,7 +4308,8 @@ static void direct_link_strands(FileData *fd, Strands *strands)
if (strands == NULL)
return;
- strands->controls = newdataadr(fd, strands->controls);
+ strands->curves = newdataadr(fd, strands->curves);
+ strands->verts = newdataadr(fd, strands->verts);
/* runtime */
strands->gpu_strands = NULL;
diff --git a/source/blender/blenloader/intern/writefile.c b/source/blender/blenloader/intern/writefile.c
index 5be45c5..e22fe6f 100644
--- a/source/blender/blenloader/intern/writefile.c
+++ b/source/blender/blenloader/intern/writefile.c
@@ -1260,8 +1260,11 @@ static void write_strands(WriteData *wd, Strands *strands)
writestruct(wd, DATA, "Strands", 1, strands);
- if (strands->controls) {
- writestruct(wd, DATA, "ControlStrand", strands->num_controls, strands->controls);
+ if (strands->curves) {
+ writestruct(wd, DATA, "StrandCurve", strands->totcurves, strands->curves);
+ }
+ if (strands->verts) {
+ writestruct(wd, DATA, "StrandVertex", strands->totverts, strands->verts);
}
}
diff --git a/source/blender/editors/space_view3d/drawstrands.c b/source/blender/editors/space_view3d/drawstrands.c
index 51b885c..88a5e3d 100644
--- a/source/blender/editors/space_view3d/drawstrands.c
+++ b/source/blender/editors/space_view3d/drawstrands.c
@@ -60,6 +60,7 @@ void draw_strands(Strands *strands, Object *ob, RegionView3D *rv3d)
GLuint vertex_buffer;
glGenBuffers(1, &vertex_buffer);
glBindBuffer(GL_ARRAY_BUFFER, vertex_buffer);
+
const size_t numverts = 4;
float verts[12] = {
0.0f, 0.0f, 0.0f,
diff --git a/source/blender/makesdna/DNA_strand_types.h b/source/blender/makesdna/DNA_strand_types.h
index 3d07419..e41f7bd 100644
--- a/source/blender/makesdna/DNA_strand_types.h
+++ b/source/blender/makesdna/DNA_strand_types.h
@@ -43,14 +43,15 @@ typedef struct StrandVertex {
} StrandVertex;
typedef struct StrandCurve {
+ /* Point on the scalp mesh for the root vertex */
+ MeshSample root;
/* Start of vertex list */
unsigned int verts_begin;
/* Number of vertices in the curve */
unsigned int num_verts;
- /* Transform to object space */
- float rootmat[4][4];
} StrandCurve;
+#if 0
typedef struct StrandData {
/* Array of vertices */
StrandVertex *verts;
@@ -62,6 +63,7 @@ typedef struct StrandData {
/* Total number of curves */
int totcurves;
} StrandData;
+#endif
typedef struct StrandInfo {
/* Sample on the scalp mesh for the root vertex */
@@ -72,17 +74,16 @@ typedef struct StrandInfo {
float control_weights[4];
} StrandInfo;
-typedef struct ControlStrand {
- /* Sample on the scalp mesh for the root vertex */
- MeshSample root;
- /* Curve in root space */
- StrandCurve curve;
-} ControlStrand;
-
typedef struct Strands {
- ControlStrand *controls;
- int num_controls;
- int pad;
+ /* Array of vertices */
+ StrandVertex *verts;
+ /* Array of curves */
+ StrandCurve *curves;
+
+ /* Total number of vertices */
+ int totverts;
+ /* Total number of curves */
+ int totcurves;
struct GPUStrands *gpu_strands;
} Strands;
More information about the Bf-blender-cvs
mailing list