[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [18212] branches/bmesh/bmesh: added option for operators to not allocate flag layers
Joseph Eagar
joeedh at gmail.com
Thu Jan 1 11:50:02 CET 2009
Revision: 18212
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=18212
Author: joeedh
Date: 2009-01-01 11:49:53 +0100 (Thu, 01 Jan 2009)
Log Message:
-----------
added option for operators to not allocate flag layers
Modified Paths:
--------------
branches/bmesh/bmesh/bmesh.h
branches/bmesh/bmesh/bmesh_operators.h
branches/bmesh/bmesh/intern/bmesh_operators.c
Modified: branches/bmesh/bmesh/bmesh.h
===================================================================
--- branches/bmesh/bmesh/bmesh.h 2009-01-01 08:08:55 UTC (rev 18211)
+++ branches/bmesh/bmesh/bmesh.h 2009-01-01 10:49:53 UTC (rev 18212)
@@ -116,6 +116,7 @@
short mask, pflag;
}BMFlagLayer;
+struct BMOperator;
typedef struct BMesh
{
ListBase verts, edges, polys;
@@ -123,6 +124,7 @@
struct BLI_mempool *epool;
struct BLI_mempool *lpool;
struct BLI_mempool *ppool;
+ struct BMOperator *currentop;
struct BMVert **vtar;
struct BMEdge **edar;
struct BMLoop **lpar;
@@ -178,7 +180,7 @@
unsigned short mat_nr; /*custom data again, and get rid of the unsigned short nonsense...*/
}BMFace;
-/*stub*/
+/*stub */
void bmesh_error(void);
/*Mesh Level Ops */
Modified: branches/bmesh/bmesh/bmesh_operators.h
===================================================================
--- branches/bmesh/bmesh/bmesh_operators.h 2009-01-01 08:08:55 UTC (rev 18211)
+++ branches/bmesh/bmesh/bmesh_operators.h 2009-01-01 10:49:53 UTC (rev 18212)
@@ -37,12 +37,20 @@
typedef struct BMOperator{
int type;
- int slottype;
+ int slottype;
+ int needflag;
struct BMOpSlot slots[BMOP_MAX_SLOTS];
void (*exec)(struct BMesh *bm, struct BMOperator *op);
MemArena *arena;
}BMOperator;
+/*need to refactor code to use this*/
+typedef struct BMOpDefine {
+ int slottypes[BMOP_MAX_SLOTS];
+ int totslots;
+ int flag;
+} BMOpDefine;
+
/*API for operators*/
void BMO_Init_Op(struct BMOperator *op, int opcode);
void BMO_Exec_Op(struct BMesh *bm, struct BMOperator *op);
@@ -60,7 +68,10 @@
void BMO_Flag_To_Slot(struct BMesh *bm, struct BMOperator *op, int slotcode, int flag, int type);
void BMO_Flag_Buffer(struct BMesh *bm, struct BMOperator *op, int slotcode, int flag);
-/*defines for individual operators*/
+/*operator option flags*/
+#define NEEDFLAGS 1
+
+/*--------------------begin operator defines------------------------*/
/*split op*/
#define BMOP_SPLIT 0
#define BMOP_SPLIT_VINPUT 1
@@ -81,7 +92,8 @@
BMOP_OPSLOT_PNT_BUF,
};
-/*--------------------begin operator defines------------------------*/
+#define SPLIT_OPTIONS NEEDFLAGS
+
/*dupe op*/
#define BMOP_DUPE 1
@@ -107,6 +119,7 @@
BMOP_OPSLOT_PNT_BUF,
BMOP_OPSLOT_PNT_BUF,
};
+#define DUPE_OPTIONS NEEDFLAGS
/*delete op*/
#define BMOP_DEL 2
@@ -130,6 +143,8 @@
BMOP_OPSLOT_INT
};
+#define DEL_OPTIONS NEEDFLAGS
+
/*editmesh->bmesh op*/
#define BMOP_FROM_EDITMESH 3
#define BMOP_FROM_EDITMESH_EM 0
@@ -139,6 +154,8 @@
BMOP_OPSLOT_PNT
};
+#define FROMEDIT_OPTIONS NEEDFLAGS
+
/*bmesh->editmesh op*/
#define BMOP_TO_EDITMESH 4
#define BMOP_TO_EDITMESH_EM 0
@@ -148,6 +165,8 @@
BMOP_OPSLOT_PNT
};
+#define TOEDIT_OPTIONS NEEDFLAGS
+
#define BMOP_ESUBDIVIDE 5
#define BMOP_ESUBDIVIDE_EDGES 0
#define BMOP_ESUBDIVIDE_TOTSLOT 1
@@ -156,25 +175,38 @@
BMOP_OPSLOT_PNT_BUF
};
+#define SUBD_OPTIONS NEEDFLAGS
+
/*keep this updated!*/
#define BMOP_TOTAL_OPS 6
/*-------------------------------end operator defines-------------------------------*/
/*Following arrays are used by the init functions to init operator slot typecodes*/
-const int *BMOP_TYPEINFO[BMOP_TOTAL_OPS] = {
+static const int *BMOP_TYPEINFO[] = {
BMOP_SPLIT_TYPEINFO,
+ BMOP_DUPE_TYPEINFO,
BMOP_DEL_TYPEINFO,
BMOP_FROM_EDITMESH_TYPEINFO,
BMOP_TO_EDITMESH_TYPEINFO,
BMOP_ESUBDIVIDE_TYPEINFO
};
-const int BMOP_TYPETOTALS[BMOP_TOTAL_OPS] = {
+static const int BMOP_TYPETOTALS[] = {
BMOP_SPLIT_TOTSLOT,
+ BMOP_DUPE_TOTSLOT,
BMOP_DEL_TOTSLOT,
BMOP_FROM_EDITMESH_TOTSLOT,
BMOP_TO_EDITMESH_TOTSLOT,
BMOP_ESUBDIVIDE_TOTSLOT
};
+static const int BMOP_OPTIONS[] = {
+ SPLIT_OPTIONS,
+ DUPE_OPTIONS,
+ DEL_OPTIONS,
+ FROMEDIT_OPTIONS,
+ TOEDIT_OPTIONS,
+ SUBD_OPTIONS,
+};
+
#endif
Modified: branches/bmesh/bmesh/intern/bmesh_operators.c
===================================================================
--- branches/bmesh/bmesh/intern/bmesh_operators.c 2009-01-01 08:08:55 UTC (rev 18211)
+++ branches/bmesh/bmesh/intern/bmesh_operators.c 2009-01-01 10:49:53 UTC (rev 18212)
@@ -45,8 +45,10 @@
void BMO_push(BMesh *bm, BMOperator *op)
{
bm->stackdepth++;
+ bm->currentop = op;
+
/*add flag layer, if appropriate*/
- if(bm->stackdepth > 1)
+ if(bm->stackdepth > 1 && op->needflag)
alloc_flag_layer(bm);
}
@@ -62,7 +64,7 @@
void BMO_pop(BMesh *bm)
{
bm->stackdepth--;
- if(bm->stackdepth > 1)
+ if(bm->stackdepth > 1 && bm->currentop->needflag)
free_flag_layer(bm);
}
@@ -81,6 +83,8 @@
memset(op, 0, sizeof(BMOperator));
op->type = opcode;
+ if (BMOP_OPTIONS[opcode] & NEEDFLAGS) op->needflag = 1;
+
/*initialize the operator slot types*/
for(i = 0; i < BMOP_TYPETOTALS[opcode]; i++) {
op->slots[i].slottype = BMOP_TYPEINFO[opcode][i];
More information about the Bf-blender-cvs
mailing list