[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