[Bf-blender-cvs] [dce6d75] particles_refactor: Added a new modifier NParticleBuffer. This is just a thin wrapper around the NParticleBuffer struct to act as a particle container. Eventually could utilize a better object data system, for now this is ok.

Lukas Tönne noreply at git.blender.org
Tue Apr 22 12:05:19 CEST 2014


Commit: dce6d75726978c4363cab75b5e3c516dbc37a423
Author: Lukas Tönne
Date:   Tue Jun 4 11:47:32 2013 +0200
https://developer.blender.org/rBdce6d75726978c4363cab75b5e3c516dbc37a423

Added a new modifier NParticleBuffer. This is just a thin wrapper around the NParticleBuffer struct to act as a particle container. Eventually could utilize a better object data system, for now this is ok.

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

M	source/blender/blenkernel/BKE_nparticle.h
M	source/blender/editors/space_outliner/outliner_draw.c
M	source/blender/makesdna/DNA_modifier_types.h
M	source/blender/makesdna/DNA_nparticle_types.h
M	source/blender/makesrna/intern/rna_modifier.c
M	source/blender/modifiers/MOD_modifiertypes.h
M	source/blender/modifiers/intern/MOD_nparticle.c
M	source/blender/modifiers/intern/MOD_util.c

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

diff --git a/source/blender/blenkernel/BKE_nparticle.h b/source/blender/blenkernel/BKE_nparticle.h
index c796f48..e4674af 100644
--- a/source/blender/blenkernel/BKE_nparticle.h
+++ b/source/blender/blenkernel/BKE_nparticle.h
@@ -29,6 +29,14 @@
  *  \ingroup bke
  */
 
+struct NParticleBuffer;
+
+struct NParticleBuffer *BKE_nparticle_buffer_new(void);
+void BKE_nparticle_buffer_free(struct NParticleBuffer *buf);
+struct NParticleBuffer *BKE_nparticle_buffer_copy(struct NParticleBuffer *buf);
+
+
+#if 0 /* old code */
 #include "BLI_math.h"
 #include "BLI_pagedbuffer.h"
 
@@ -44,7 +52,6 @@ struct NParticlesModifierData;
 struct NParticleDupliObject;
 
 
-#if 0 /* old code */
 BLI_INLINE int pit_get_particle_flag(struct NParticleSystem *psys, struct bPagedBufferIterator *it, NParticleFlagLayerType flag)
 {
 	return (((*PBUF_GET_DATA_POINTER(it, psys->standard_attribute[PAR_ATTR_TYPE_FLAG]->layer, NParticleFlagLayerType)) & flag) != 0);
diff --git a/source/blender/editors/space_outliner/outliner_draw.c b/source/blender/editors/space_outliner/outliner_draw.c
index 4db63a4..2d5583d 100644
--- a/source/blender/editors/space_outliner/outliner_draw.c
+++ b/source/blender/editors/space_outliner/outliner_draw.c
@@ -980,6 +980,8 @@ static void tselem_draw_icon(uiBlock *block, int xmax, float x, float y, TreeSto
 						UI_icon_draw(x, y, ICON_MOD_WIREFRAME); break;
 					case eModifierType_LaplacianDeform:
 						UI_icon_draw(x, y, ICON_MOD_MESHDEFORM); break;  /* XXX, needs own icon */
+					case eModifierType_NParticleBuffer:
+						UI_icon_draw(x, y, ICON_MOD_PARTICLES); break;
 					/* Default */
 					case eModifierType_None:
 					case eModifierType_ShapeKey:
diff --git a/source/blender/makesdna/DNA_modifier_types.h b/source/blender/makesdna/DNA_modifier_types.h
index 7c5846e..b244816 100644
--- a/source/blender/makesdna/DNA_modifier_types.h
+++ b/source/blender/makesdna/DNA_modifier_types.h
@@ -82,6 +82,7 @@ typedef enum ModifierType {
 	eModifierType_MeshCache         = 46,
 	eModifierType_LaplacianDeform   = 47,
 	eModifierType_Wireframe         = 48,
+	eModifierType_NParticleBuffer   = 49,
 	NUM_MODIFIER_TYPES
 } ModifierType;
 
@@ -1362,6 +1363,12 @@ enum {
 	MOD_WIREFRAME_CREASE        = (1 << 5),
 };
 
+/* nparticle modifier */
+typedef struct NParticleBufferModifierData {
+	ModifierData modifier;
+	
+	struct NParticleBuffer *buffer;
+} NParticleBufferModifierData;
 
 
 #endif  /* __DNA_MODIFIER_TYPES_H__ */
diff --git a/source/blender/makesdna/DNA_nparticle_types.h b/source/blender/makesdna/DNA_nparticle_types.h
index aea3480..a06b240 100644
--- a/source/blender/makesdna/DNA_nparticle_types.h
+++ b/source/blender/makesdna/DNA_nparticle_types.h
@@ -147,11 +147,11 @@ typedef struct bNodeInstanceMap {
 	ListBase lb;
 } bNodeInstanceMap;
 
-typedef struct ParticleBuffer {
+typedef struct NParticleBuffer {
 	bPagedBuffer data;
 	
 	ListBase attributes;
-} ParticleBuffer;
+} NParticleBuffer;
 
 
 typedef struct NParticleSource {
diff --git a/source/blender/makesrna/intern/rna_modifier.c b/source/blender/makesrna/intern/rna_modifier.c
index 91333af..83ec44a 100644
--- a/source/blender/makesrna/intern/rna_modifier.c
+++ b/source/blender/makesrna/intern/rna_modifier.c
@@ -244,6 +244,8 @@ static StructRNA *rna_Modifier_refine(struct PointerRNA *ptr)
 			return &RNA_LaplacianDeformModifier;
 		case eModifierType_Wireframe:
 			return &RNA_WireframeModifier;
+		case eModifierType_NParticleBuffer:
+			return &RNA_NParticleBufferModifier;
 		/* Default */
 		case eModifierType_None:
 		case eModifierType_ShapeKey:
@@ -3647,6 +3649,18 @@ static void rna_def_modifier_wireframe(BlenderRNA *brna)
 	RNA_def_property_update(prop, 0, "rna_Modifier_update");
 }
 
+static void rna_def_modifier_nparticlebuffer(BlenderRNA *brna)
+{
+
+	StructRNA *srna;
+	PropertyRNA *prop;
+
+	srna = RNA_def_struct(brna, "NParticleBufferModifier", "Modifier");
+	RNA_def_struct_ui_text(srna, "NParticle Buffer Modifier", "Particles");
+	RNA_def_struct_sdna(srna, "NParticleBufferModifierData");
+	RNA_def_struct_ui_icon(srna, ICON_MOD_PARTICLES);
+}
+
 void RNA_def_modifier(BlenderRNA *brna)
 {
 	StructRNA *srna;
@@ -3759,6 +3773,7 @@ void RNA_def_modifier(BlenderRNA *brna)
 	rna_def_modifier_meshcache(brna);
 	rna_def_modifier_laplaciandeform(brna);
 	rna_def_modifier_wireframe(brna);
+	rna_def_modifier_nparticlebuffer(brna);
 }
 
 #endif
diff --git a/source/blender/modifiers/MOD_modifiertypes.h b/source/blender/modifiers/MOD_modifiertypes.h
index 9c7c21c..4669de2 100644
--- a/source/blender/modifiers/MOD_modifiertypes.h
+++ b/source/blender/modifiers/MOD_modifiertypes.h
@@ -81,6 +81,7 @@ extern ModifierTypeInfo modifierType_UVWarp;
 extern ModifierTypeInfo modifierType_MeshCache;
 extern ModifierTypeInfo modifierType_LaplacianDeform;
 extern ModifierTypeInfo modifierType_Wireframe;
+extern ModifierTypeInfo modifierType_NParticleBuffer;
 
 /* MOD_util.c */
 void modifier_type_init(ModifierTypeInfo *types[]);
diff --git a/source/blender/modifiers/intern/MOD_nparticle.c b/source/blender/modifiers/intern/MOD_nparticle.c
index d9429de..363e2eb 100644
--- a/source/blender/modifiers/intern/MOD_nparticle.c
+++ b/source/blender/modifiers/intern/MOD_nparticle.c
@@ -30,7 +30,59 @@
  *  \ingroup modifiers
  */
 
+#include "DNA_modifier_types.h"
 
+#include "BKE_modifier.h"
+#include "BKE_nparticle.h"
+
+static void nparticle_buffer_initData(ModifierData *md) 
+{
+	NParticleBufferModifierData *pmd= (NParticleBufferModifierData *)md;
+	pmd->buffer = BKE_nparticle_buffer_new();
+}
+
+static void nparticle_buffer_freeData(ModifierData *md)
+{
+	NParticleBufferModifierData *pmd= (NParticleBufferModifierData *)md;
+	BKE_nparticle_buffer_free(pmd->buffer);
+	pmd->buffer = NULL;
+}
+
+static void nparticle_buffer_copyData(ModifierData *md, ModifierData *target)
+{
+	NParticleBufferModifierData *pmd= (NParticleBufferModifierData *)md;
+	NParticleBufferModifierData *tpmd= (NParticleBufferModifierData *)target;
+	tpmd->buffer = BKE_nparticle_buffer_copy(pmd->buffer);
+}
+
+ModifierTypeInfo modifierType_NParticleBuffer = {
+	/* name */              "Particles",
+	/* structName */        "NParticleBufferModifierData",
+	/* structSize */        sizeof(NParticleBufferModifierData),
+	/* type */              eModifierTypeType_NonGeometrical,
+	/* flags */             eModifierTypeFlag_Single	/* for now only allow single particle buffer for unambiguous access */
+                            | eModifierTypeFlag_UsesPointCache,
+
+	/* copyData */          nparticle_buffer_copyData,
+	/* deformVerts */       NULL,
+	/* deformVertsEM */     NULL,
+	/* deformMatrices */    NULL,
+	/* deformMatricesEM */  NULL,
+	/* applyModifier */     NULL,
+	/* applyModifierEM */   NULL,
+	/* initData */          nparticle_buffer_initData,
+	/* requiredDataMask */  NULL,
+	/* freeData */          nparticle_buffer_freeData,
+	/* isDisabled */        NULL,
+	/* updateDepgraph */    NULL,
+	/* dependsOnTime */     NULL,
+	/* dependsOnNormals */	NULL,
+	/* foreachObjectLink */ NULL,
+	/* foreachIDLink */     NULL,
+};
+
+
+#if 0
 #include <stddef.h>
 
 #include "MEM_guardedalloc.h"
@@ -54,7 +106,6 @@
 #include "MOD_util.h"
 
 
-#if 0
 static void npar_system_initData(ModifierData *md) 
 {
 	NParticlesModifierData *pmd= (NParticlesModifierData*) md;
diff --git a/source/blender/modifiers/intern/MOD_util.c b/source/blender/modifiers/intern/MOD_util.c
index 0cc9b8b..4a80430 100644
--- a/source/blender/modifiers/intern/MOD_util.c
+++ b/source/blender/modifiers/intern/MOD_util.c
@@ -310,5 +310,6 @@ void modifier_type_init(ModifierTypeInfo *types[])
 	INIT_TYPE(MeshCache);
 	INIT_TYPE(LaplacianDeform);
 	INIT_TYPE(Wireframe);
+	INIT_TYPE(NParticleBuffer);
 #undef INIT_TYPE
 }




More information about the Bf-blender-cvs mailing list