merging revisions 28564-28569 from render branch into trunk

This commit is contained in:
Joseph Eagar 2010-05-04 12:31:24 +00:00
parent cef3e3099a
commit a7cbd5008e
15 changed files with 328 additions and 89 deletions

@ -144,6 +144,12 @@ extern "C" {
uintptr_t MEM_get_mapped_memory_in_use(void);
int MEM_get_memory_blocks_in_use(void);
/*reset the peak memory statistic to zero*/
void MEM_reset_peak_memory(void);
/*get the peak memory usage in bytes, including mmap allocations*/
uintptr_t MEM_get_peak_memory(void);
#ifdef __cplusplus
}
#endif

@ -138,7 +138,7 @@ static const char *check_memlist(MemHead *memh);
static volatile int totblock= 0;
static volatile uintptr_t mem_in_use= 0, mmap_in_use= 0;
static volatile uintptr_t mem_in_use= 0, mmap_in_use= 0, peak_mem = 0;
static volatile struct localListBase _membase;
static volatile struct localListBase *membase = &_membase;
@ -293,6 +293,8 @@ static void make_memhead_header(MemHead *memh, size_t len, const char *str)
totblock++;
mem_in_use += len;
peak_mem = mem_in_use > peak_mem ? mem_in_use : peak_mem;
}
void *MEM_mallocN(size_t len, const char *str)
@ -377,6 +379,7 @@ void *MEM_mapallocN(size_t len, const char *str)
make_memhead_header(memh, len, str);
memh->mmap= 1;
mmap_in_use += len;
peak_mem = mmap_in_use > peak_mem ? mmap_in_use : peak_mem;
mem_unlock_thread();
#ifdef DEBUG_MEMCOUNTER
if(_mallocn_count==DEBUG_MEMCOUNTER_ERROR_VAL)
@ -802,6 +805,24 @@ static const char *check_memlist(MemHead *memh)
return(name);
}
uintptr_t MEM_get_peak_memory(void)
{
uintptr_t _peak_mem;
mem_lock_thread();
_peak_mem = peak_mem;
mem_unlock_thread();
return _peak_mem;
}
void MEM_reset_peak_memory(void)
{
mem_lock_thread();
peak_mem = 0;
mem_unlock_thread();
}
uintptr_t MEM_get_memory_in_use(void)
{
uintptr_t _mem_in_use;

@ -155,6 +155,9 @@ class DATA_PT_vertex_groups(DataButtonsPanel):
col.operator("object.vertex_group_add", icon='ZOOMIN', text="")
col.operator("object.vertex_group_remove", icon='ZOOMOUT', text="")
col.menu("MESH_MT_vertex_group_specials", icon='DOWNARROW_HLT', text="")
if group:
col.operator("object.vertex_group_move", icon='TRIA_UP', text="").direction = 'UP'
col.operator("object.vertex_group_move", icon='TRIA_DOWN', text="").direction = 'DOWN'
if group:
row = layout.row()

@ -2950,7 +2950,7 @@ void psys_cache_edit_paths(Scene *scene, Object *ob, PTCacheEdit *edit, float cf
float birthtime = 0.0, dietime = 0.0;
float t, time = 0.0, keytime = 0.0, frs_sec;
float hairmat[4][4], rotmat[3][3], prev_tangent[3];
int k,i;
int k, i;
int steps = (int)pow(2.0, (double)pset->draw_step);
int totpart = edit->totpoint, recalc_set=0;
float sel_col[3];
@ -3097,17 +3097,26 @@ void psys_cache_edit_paths(Scene *scene, Object *ob, PTCacheEdit *edit, float cf
/* selection coloring in edit mode */
if(pset->brushtype==PE_BRUSH_WEIGHT){
if(k==0)
float t2;
if(k==0) {
weight_to_rgb(pind.hkey[1]->weight, ca->col, ca->col+1, ca->col+2);
else if(k >= steps - 1)
weight_to_rgb(pind.hkey[0]->weight, ca->col, ca->col+1, ca->col+2);
else
weight_to_rgb((1.0f - keytime) * pind.hkey[0]->weight + keytime * pind.hkey[1]->weight, ca->col, ca->col+1, ca->col+2);
} else {
float w1[3], w2[3];
keytime = (t - (*pind.ekey[0]->time))/((*pind.ekey[1]->time) - (*pind.ekey[0]->time));
weight_to_rgb(pind.hkey[0]->weight, w1, w1+1, w1+2);
weight_to_rgb(pind.hkey[1]->weight, w2, w2+1, w2+2);
interp_v3_v3v3(ca->col, w1, w2, keytime);
}
/* at the moment this is only used for weight painting.
* will need to move out of this check if its used elsewhere. */
pind.hkey[0] = pind.hkey[1];
pind.hkey[1]++;
t2 = birthtime + ((float)(k+1)/(float)steps) * (dietime - birthtime);
while (pind.hkey[1]->time < t2) pind.hkey[1]++;
pind.hkey[0] = pind.hkey[1] - 1;
}
else {
if((ekey + (pind.ekey[0] - point->keys))->flag & PEK_SELECT){

@ -2221,6 +2221,12 @@ static void lib_link_pose(FileData *fd, Object *ob, bPose *pose)
/* always rebuild to match proxy or lib changes */
rebuild= ob->proxy || (ob->id.lib==NULL && arm->id.lib);
if (ob->proxy && pose->proxy_act_bone[0]) {
Bone *bone = get_named_bone(arm, pose->proxy_act_bone);
if (bone)
arm->act_bone = bone;
}
for (pchan = pose->chanbase.first; pchan; pchan=pchan->next) {
lib_link_constraints(fd, (ID *)ob, &pchan->constraints);
@ -11579,7 +11585,6 @@ static void expand_object(FileData *fd, Main *mainvar, Object *ob)
PartEff *paf;
int a;
expand_doit(fd, mainvar, ob->data);
for (md=ob->modifiers.first; md; md=md->next) {

@ -1266,6 +1266,14 @@ static void write_objects(WriteData *wd, ListBase *idbase)
write_sensors(wd, &ob->sensors);
write_controllers(wd, &ob->controllers);
write_actuators(wd, &ob->actuators);
if (ob->type == OB_ARMATURE) {
bArmature *arm = ob->data;
if (arm && ob->pose && arm->act_bone) {
strcpy(ob->pose->proxy_act_bone, arm->act_bone->name);
}
}
write_pose(wd, ob->pose);
write_defgroups(wd, &ob->defbase);
write_constraints(wd, &ob->constraints);

@ -196,6 +196,7 @@ void OBJECT_OT_vertex_group_clean(struct wmOperatorType *ot);
void OBJECT_OT_vertex_group_mirror(struct wmOperatorType *ot);
void OBJECT_OT_vertex_group_set_active(struct wmOperatorType *ot);
void OBJECT_OT_vertex_group_sort(struct wmOperatorType *ot);
void OBJECT_OT_vertex_group_move(struct wmOperatorType *ot);
void OBJECT_OT_game_property_new(struct wmOperatorType *ot);
void OBJECT_OT_game_property_remove(struct wmOperatorType *ot);

@ -176,6 +176,7 @@ void ED_operatortypes_object(void)
WM_operatortype_append(OBJECT_OT_vertex_group_mirror);
WM_operatortype_append(OBJECT_OT_vertex_group_set_active);
WM_operatortype_append(OBJECT_OT_vertex_group_sort);
WM_operatortype_append(OBJECT_OT_vertex_group_move);
WM_operatortype_append(OBJECT_OT_game_property_new);
WM_operatortype_append(OBJECT_OT_game_property_remove);

@ -122,6 +122,72 @@ void ED_vgroup_data_create(ID *id)
}
}
int ED_vgroup_give_parray(ID *id, MDeformVert ***dvert_arr, int *dvert_tot)
{
if(id) {
switch(GS(id->name)) {
case ID_ME:
{
Mesh *me = (Mesh *)id;
*dvert_tot= me->totvert;
if (!me->edit_mesh) {
int i;
*dvert_arr= MEM_mallocN(sizeof(void*)*me->totvert, "vgroup parray from me");
for (i=0; i<me->totvert; i++) {
(*dvert_arr)[i] = me->dvert + i;
}
} else {
EditMesh *em = me->edit_mesh;
EditVert *eve;
int i;
if (!CustomData_has_layer(&em->vdata, CD_MDEFORMVERT)) {
*dvert_tot = 0;
*dvert_arr = NULL;
return 0;
}
i = 0;
for (eve=em->verts.first; eve; eve=eve->next) i++;
*dvert_arr= MEM_mallocN(sizeof(void*)*i, "vgroup parray from me");
*dvert_tot = i;
i = 0;
for (eve=em->verts.first; eve; eve=eve->next, i++) {
(*dvert_arr)[i] = CustomData_em_get(&em->vdata, eve->data, CD_MDEFORMVERT);
}
}
return 1;
}
case ID_LT:
{
int i=0;
Lattice *lt= (Lattice *)id;
lt= (lt->editlatt)? lt->editlatt: lt;
*dvert_tot= lt->pntsu*lt->pntsv*lt->pntsw;
*dvert_arr= MEM_mallocN(sizeof(void*)*(*dvert_tot), "vgroup parray from me");
for (i=0; i<*dvert_tot; i++) {
(*dvert_arr)[i] = lt->dvert + i;
}
return 1;
}
}
}
*dvert_arr= NULL;
*dvert_tot= 0;
return 0;
}
/* returns true if the id type supports weights */
int ED_vgroup_give_array(ID *id, MDeformVert **dvert_arr, int *dvert_tot)
{
@ -153,20 +219,22 @@ int ED_vgroup_give_array(ID *id, MDeformVert **dvert_arr, int *dvert_tot)
/* matching index only */
int ED_vgroup_copy_array(Object *ob, Object *ob_from)
{
MDeformVert *dvert_array_from, *dvf;
MDeformVert *dvert_array, *dv;
MDeformVert **dvert_array_from, **dvf;
MDeformVert **dvert_array, **dv;
int dvert_tot_from;
int dvert_tot;
int i;
int totdef_from= BLI_countlist(&ob_from->defbase);
int totdef= BLI_countlist(&ob->defbase);
ED_vgroup_give_array(ob_from->data, &dvert_array_from, &dvert_tot_from);
ED_vgroup_give_array(ob->data, &dvert_array, &dvert_tot);
ED_vgroup_give_parray(ob_from->data, &dvert_array_from, &dvert_tot_from);
ED_vgroup_give_parray(ob->data, &dvert_array, &dvert_tot);
if(ob==ob_from || dvert_tot==0 || (dvert_tot != dvert_tot_from) || dvert_array_from==NULL || dvert_array==NULL)
if(ob==ob_from || dvert_tot==0 || (dvert_tot != dvert_tot_from) || dvert_array_from==NULL || dvert_array==NULL) {
if (dvert_array) MEM_freeN(dvert_array);
if (dvert_array_from) MEM_freeN(dvert_array_from);
return 0;
}
/* do the copy */
BLI_freelistN(&ob->defbase);
@ -187,15 +255,18 @@ int ED_vgroup_copy_array(Object *ob, Object *ob_from)
dv= dvert_array;
for(i=0; i<dvert_tot; i++, dvf++, dv++) {
if(dv->dw)
MEM_freeN(dv->dw);
if((*dv)->dw)
MEM_freeN((*dv)->dw);
*dv= *dvf;
*(*dv)= *(*dvf);
if(dv->dw)
dv->dw= MEM_dupallocN(dv->dw);
if((*dv)->dw)
(*dv)->dw= MEM_dupallocN((*dv)->dw);
}
MEM_freeN(dvert_array);
MEM_freeN(dvert_array_from);
return 1;
}
@ -537,7 +608,7 @@ static void vgroup_duplicate(Object *ob)
bDeformGroup *dg, *cdg;
char name[32], s[32];
MDeformWeight *org, *cpy;
MDeformVert *dvert, *dvert_array=NULL;
MDeformVert *dvert, **dvert_array=NULL;
int i, idg, icdg, dvert_tot=0;
dg = BLI_findlink(&ob->defbase, (ob->actdef-1));
@ -570,13 +641,13 @@ static void vgroup_duplicate(Object *ob)
ob->actdef = BLI_countlist(&ob->defbase);
icdg = (ob->actdef-1);
ED_vgroup_give_array(ob->data, &dvert_array, &dvert_tot);
ED_vgroup_give_parray(ob->data, &dvert_array, &dvert_tot);
if(!dvert_array)
return;
for(i = 0; i < dvert_tot; i++) {
dvert = dvert_array+i;
dvert = dvert_array[i];
org = defvert_find_index(dvert, idg);
if(org) {
float weight = org->weight;
@ -585,16 +656,18 @@ static void vgroup_duplicate(Object *ob)
cpy->weight = weight;
}
}
MEM_freeN(dvert_array);
}
static void vgroup_normalize(Object *ob)
{
bDeformGroup *dg;
MDeformWeight *dw;
MDeformVert *dvert, *dvert_array=NULL;
MDeformVert *dvert, **dvert_array=NULL;
int i, def_nr, dvert_tot=0;
ED_vgroup_give_array(ob->data, &dvert_array, &dvert_tot);
ED_vgroup_give_parray(ob->data, &dvert_array, &dvert_tot);
dg = BLI_findlink(&ob->defbase, (ob->actdef-1));
@ -604,7 +677,7 @@ static void vgroup_normalize(Object *ob)
def_nr= ob->actdef-1;
for(i = 0; i < dvert_tot; i++) {
dvert = dvert_array+i;
dvert = dvert_array[i];
dw = defvert_find_index(dvert, def_nr);
if(dw) {
weight_max = MAX2(dw->weight, weight_max);
@ -613,7 +686,7 @@ static void vgroup_normalize(Object *ob)
if(weight_max > 0.0f) {
for(i = 0; i < dvert_tot; i++) {
dvert = dvert_array+i;
dvert = dvert_array[i];
dw = defvert_find_index(dvert, def_nr);
if(dw) {
dw->weight /= weight_max;
@ -624,16 +697,18 @@ static void vgroup_normalize(Object *ob)
}
}
}
if (dvert_array) MEM_freeN(dvert_array);
}
static void vgroup_levels(Object *ob, float offset, float gain)
{
bDeformGroup *dg;
MDeformWeight *dw;
MDeformVert *dvert, *dvert_array=NULL;
MDeformVert *dvert, **dvert_array=NULL;
int i, def_nr, dvert_tot=0;
ED_vgroup_give_array(ob->data, &dvert_array, &dvert_tot);
ED_vgroup_give_parray(ob->data, &dvert_array, &dvert_tot);
dg = BLI_findlink(&ob->defbase, (ob->actdef-1));
@ -641,7 +716,7 @@ static void vgroup_levels(Object *ob, float offset, float gain)
def_nr= ob->actdef-1;
for(i = 0; i < dvert_tot; i++) {
dvert = dvert_array+i;
dvert = dvert_array[i];
dw = defvert_find_index(dvert, def_nr);
if(dw) {
dw->weight = gain * (dw->weight + offset);
@ -650,17 +725,19 @@ static void vgroup_levels(Object *ob, float offset, float gain)
}
}
}
if (dvert_array) MEM_freeN(dvert_array);
}
/* TODO - select between groups */
static void vgroup_normalize_all(Object *ob, int lock_active)
{
MDeformWeight *dw, *dw_act;
MDeformVert *dvert, *dvert_array=NULL;
MDeformVert *dvert, **dvert_array=NULL;
int i, dvert_tot=0;
float tot_weight;
ED_vgroup_give_array(ob->data, &dvert_array, &dvert_tot);
ED_vgroup_give_parray(ob->data, &dvert_array, &dvert_tot);
if(dvert_array) {
if(lock_active) {
@ -672,7 +749,7 @@ static void vgroup_normalize_all(Object *ob, int lock_active)
tot_weight= 0.0f;
dw_act= NULL;
dvert = dvert_array+i;
dvert = dvert_array[i];
j= dvert->totweight;
while(j--) {
@ -710,7 +787,7 @@ static void vgroup_normalize_all(Object *ob, int lock_active)
for(i = 0; i < dvert_tot; i++) {
int j;
tot_weight= 0.0f;
dvert = dvert_array+i;
dvert = dvert_array[i];
j= dvert->totweight;
while(j--) {
@ -731,6 +808,8 @@ static void vgroup_normalize_all(Object *ob, int lock_active)
}
}
}
if (dvert_array) MEM_freeN(dvert_array);
}
@ -738,10 +817,10 @@ static void vgroup_invert(Object *ob, int auto_assign, int auto_remove)
{
bDeformGroup *dg;
MDeformWeight *dw;
MDeformVert *dvert, *dvert_array=NULL;
MDeformVert *dvert, **dvert_array=NULL;
int i, def_nr, dvert_tot=0;
ED_vgroup_give_array(ob->data, &dvert_array, &dvert_tot);
ED_vgroup_give_parray(ob->data, &dvert_array, &dvert_tot);
dg = BLI_findlink(&ob->defbase, (ob->actdef-1));
@ -750,7 +829,7 @@ static void vgroup_invert(Object *ob, int auto_assign, int auto_remove)
for(i = 0; i < dvert_tot; i++) {
dvert = dvert_array+i;
dvert = dvert_array[i];
if(auto_assign) {
dw= defvert_verify_index(dvert, def_nr);
@ -768,6 +847,8 @@ static void vgroup_invert(Object *ob, int auto_assign, int auto_remove)
}
}
}
if (dvert_array) MEM_freeN(dvert_array);
}
static void vgroup_blend(Object *ob)
@ -858,10 +939,10 @@ static void vgroup_clean(Object *ob, float eul, int keep_single)
{
bDeformGroup *dg;
MDeformWeight *dw;
MDeformVert *dvert, *dvert_array=NULL;
MDeformVert *dvert, **dvert_array=NULL;
int i, def_nr, dvert_tot=0;
ED_vgroup_give_array(ob->data, &dvert_array, &dvert_tot);
ED_vgroup_give_parray(ob->data, &dvert_array, &dvert_tot);
/* only the active group */
dg = BLI_findlink(&ob->defbase, (ob->actdef-1));
@ -869,7 +950,7 @@ static void vgroup_clean(Object *ob, float eul, int keep_single)
def_nr= ob->actdef-1;
for(i = 0; i < dvert_tot; i++) {
dvert = dvert_array+i;
dvert = dvert_array[i];
dw= defvert_find_index(dvert, def_nr);
@ -880,21 +961,23 @@ static void vgroup_clean(Object *ob, float eul, int keep_single)
}
}
}
if (dvert_array) MEM_freeN(dvert_array);
}
static void vgroup_clean_all(Object *ob, float eul, int keep_single)
{
MDeformWeight *dw;
MDeformVert *dvert, *dvert_array=NULL;
MDeformVert *dvert, **dvert_array=NULL;
int i, dvert_tot=0;
ED_vgroup_give_array(ob->data, &dvert_array, &dvert_tot);
ED_vgroup_give_parray(ob->data, &dvert_array, &dvert_tot);
if(dvert_array) {
for(i = 0; i < dvert_tot; i++) {
int j;
dvert = dvert_array+i;
dvert = dvert_array[i];
j= dvert->totweight;
while(j--) {
@ -910,6 +993,8 @@ static void vgroup_clean_all(Object *ob, float eul, int keep_single)
}
}
}
if (dvert_array) MEM_freeN(dvert_array);
}
void ED_vgroup_mirror(Object *ob, int mirror_weights, int flip_vgroups)
@ -1920,41 +2005,38 @@ void OBJECT_OT_vertex_group_set_active(wmOperatorType *ot)
ot->prop= prop;
}
static int vgroup_sort(void *def_a_ptr, void *def_b_ptr)
/*creates the name_array parameter for vgroup_do_remap, call this before fiddling
with the order of vgroups then call vgroup_do_remap after*/
static char *vgroup_init_remap(Object *ob)
{
bDeformGroup *def_a= (bDeformGroup *)def_a_ptr;
bDeformGroup *def_b= (bDeformGroup *)def_b_ptr;
return strcmp(def_a->name, def_b->name);
}
#define DEF_GROUP_SIZE (sizeof(((bDeformGroup *)NULL)->name))
static int vertex_group_sort_exec(bContext *C, wmOperator *op)
{
Object *ob= CTX_data_pointer_get_type(C, "object", &RNA_Object).data;
bDeformGroup *def;
int def_tot = BLI_countlist(&ob->defbase);
char *name_array= MEM_mallocN(MAX_VGROUP_NAME * sizeof(char) * def_tot, "sort vgroups");
char *name;
char *name_array= MEM_mallocN(DEF_GROUP_SIZE * sizeof(char) * def_tot, "sort vgroups");
int *sort_map_update= MEM_mallocN(DEF_GROUP_SIZE * sizeof(int) * def_tot + 1, "sort vgroups"); /* needs a dummy index at the start*/
int *sort_map= sort_map_update + 1;
int i;
MDeformVert *dvert= NULL;
int dvert_tot;
name= name_array;
for(def = ob->defbase.first; def; def=def->next){
BLI_strncpy(name, def->name, DEF_GROUP_SIZE);
name += DEF_GROUP_SIZE;
for(def = ob->defbase.first; def; def=def->next) {
BLI_strncpy(name, def->name, MAX_VGROUP_NAME);
name += MAX_VGROUP_NAME;
}
BLI_sortlist(&ob->defbase, vgroup_sort);
return name_array;
}
static int vgroup_do_remap(Object *ob, char *name_array, wmOperator *op)
{
MDeformVert *dvert= NULL;
bDeformGroup *def;
int def_tot = BLI_countlist(&ob->defbase);
int *sort_map_update= MEM_mallocN(MAX_VGROUP_NAME * sizeof(int) * def_tot + 1, "sort vgroups"); /* needs a dummy index at the start*/
int *sort_map= sort_map_update + 1;
char *name;
int i;
name= name_array;
for(def= ob->defbase.first, i=0; def; def=def->next, i++){
sort_map[i]= BLI_findstringindex(&ob->defbase, name, offsetof(bDeformGroup, name));
name += DEF_GROUP_SIZE;
name += MAX_VGROUP_NAME;
}
if(ob->mode == OB_MODE_EDIT) {
@ -1975,8 +2057,12 @@ static int vertex_group_sort_exec(bContext *C, wmOperator *op)
}
}
else {
int dvert_tot=0;
ED_vgroup_give_array(ob->data, &dvert, &dvert_tot);
while(dvert_tot--) {
/*create as necassary*/
while(dvert && dvert_tot--) {
if(dvert->totweight)
defvert_remap(dvert, sort_map);
dvert++;
@ -1988,21 +2074,45 @@ static int vertex_group_sort_exec(bContext *C, wmOperator *op)
sort_map[i]++;
sort_map_update[0]= 0;
vgroup_remap_update_users(ob, sort_map_update);
ob->actdef= sort_map_update[ob->actdef];
MEM_freeN(name_array);
MEM_freeN(sort_map_update);
DAG_id_flush_update(&ob->id, OB_RECALC_DATA);
WM_event_add_notifier(C, NC_GEOM|ND_DATA, ob);
return OPERATOR_FINISHED;
}
#undef DEF_GROUP_SIZE
static int vgroup_sort(void *def_a_ptr, void *def_b_ptr)
{
bDeformGroup *def_a= (bDeformGroup *)def_a_ptr;
bDeformGroup *def_b= (bDeformGroup *)def_b_ptr;
return strcmp(def_a->name, def_b->name);
}
static int vertex_group_sort_exec(bContext *C, wmOperator *op)
{
Object *ob= CTX_data_pointer_get_type(C, "object", &RNA_Object).data;
char *name_array;
int ret;
/*init remapping*/
name_array = vgroup_init_remap(ob);
/*sort vgroup names*/
BLI_sortlist(&ob->defbase, vgroup_sort);
/*remap vgroup data to map to correct names*/
ret = vgroup_do_remap(ob, name_array, op);
if (ret != OPERATOR_CANCELLED) {
DAG_id_flush_update(&ob->id, OB_RECALC_DATA);
WM_event_add_notifier(C, NC_GEOM|ND_DATA, ob);
}
if (name_array) MEM_freeN(name_array);
return ret;
}
void OBJECT_OT_vertex_group_sort(wmOperatorType *ot)
{
@ -2017,3 +2127,63 @@ void OBJECT_OT_vertex_group_sort(wmOperatorType *ot)
/* flags */
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
}
static int vgroup_move_exec(bContext *C, wmOperator *op)
{
Object *ob= CTX_data_pointer_get_type(C, "object", &RNA_Object).data;
bDeformGroup *def;
char *name_array;
int dir= RNA_enum_get(op->ptr, "direction"), ret;
def = BLI_findlink(&ob->defbase, ob->actdef - 1);
if (!def) {
return OPERATOR_CANCELLED;
}
name_array = vgroup_init_remap(ob);
if (dir == 1) { /*up*/
void *prev = def->prev;
BLI_remlink(&ob->defbase, def);
BLI_insertlinkbefore(&ob->defbase, prev, def);
} else { /*down*/
void *next = def->next;
BLI_remlink(&ob->defbase, def);
BLI_insertlinkafter(&ob->defbase, next, def);
}
ret = vgroup_do_remap(ob, name_array, op);
if (name_array) MEM_freeN(name_array);
if (ret != OPERATOR_CANCELLED) {
DAG_id_flush_update(&ob->id, OB_RECALC_DATA);
WM_event_add_notifier(C, NC_GEOM|ND_DATA, ob);
}
return ret;
}
void OBJECT_OT_vertex_group_move(wmOperatorType *ot)
{
static EnumPropertyItem vgroup_slot_move[] = {
{1, "UP", 0, "Up", ""},
{-1, "DOWN", 0, "Down", ""},
{0, NULL, 0, NULL, NULL}
};
/* identifiers */
ot->name= "Move Vertex Group";
ot->idname= "OBJECT_OT_vertex_group_move";
/* api callbacks */
ot->poll= vertex_group_poll;
ot->exec= vgroup_move_exec;
/* flags */
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
RNA_def_enum(ot->srna, "direction", vgroup_slot_move, 0, "Direction", "Direction to move, UP or DOWN");
}

@ -455,15 +455,17 @@ static void render_freejob(void *rjv)
static void make_renderinfo_string(RenderStats *rs, Scene *scene, char *str)
{
char info_time_str[32]; // used to be extern to header_info.c
uintptr_t mem_in_use, mmap_in_use;
float megs_used_memory, mmap_used_memory;
uintptr_t mem_in_use, mmap_in_use, peak_memory;
float megs_used_memory, mmap_used_memory, megs_peak_memory;
char *spos= str;
mem_in_use= MEM_get_memory_in_use();
mmap_in_use= MEM_get_mapped_memory_in_use();
peak_memory = MEM_get_peak_memory();
megs_used_memory= (mem_in_use-mmap_in_use)/(1024.0*1024.0);
mmap_used_memory= (mmap_in_use)/(1024.0*1024.0);
megs_peak_memory = (peak_memory)/(1024.0*1024.0);
if(scene->lay & 0xFF000000)
spos+= sprintf(spos, "Localview | ");
@ -477,7 +479,7 @@ static void make_renderinfo_string(RenderStats *rs, Scene *scene, char *str)
spos+= sprintf(spos, "Fra:%d Ve:%d Fa:%d ", (scene->r.cfra), rs->totvert, rs->totface);
if(rs->tothalo) spos+= sprintf(spos, "Ha:%d ", rs->tothalo);
if(rs->totstrand) spos+= sprintf(spos, "St:%d ", rs->totstrand);
spos+= sprintf(spos, "La:%d Mem:%.2fM (%.2fM) ", rs->totlamp, megs_used_memory, mmap_used_memory);
spos+= sprintf(spos, "La:%d Mem:%.2fM (%.2fM, combined peak %.2fM) ", rs->totlamp, megs_used_memory, mmap_used_memory, megs_peak_memory);
if(rs->curfield)
spos+= sprintf(spos, "Field %d ", rs->curfield);

@ -3828,7 +3828,7 @@ static void draw_new_particle_system(Scene *scene, View3D *v3d, RegionView3D *rv
float *cd2=0,*cdata2=0;
/* setup gl flags */
if(ob_dt > OB_WIRE) {
if (1) { //ob_dt > OB_WIRE) {
glEnableClientState(GL_NORMAL_ARRAY);
if(part->draw&PART_DRAW_MAT_COL)
@ -3838,13 +3838,13 @@ static void draw_new_particle_system(Scene *scene, View3D *v3d, RegionView3D *rv
glColorMaterial(GL_FRONT_AND_BACK, GL_DIFFUSE);
glEnable(GL_COLOR_MATERIAL);
}
else {
/*else {
glDisableClientState(GL_NORMAL_ARRAY);
glDisable(GL_COLOR_MATERIAL);
glDisable(GL_LIGHTING);
UI_ThemeColor(TH_WIRE);
}
}*/
if(totchild && (part->draw&PART_DRAW_PARENT)==0)
totpart=0;
@ -3858,7 +3858,7 @@ static void draw_new_particle_system(Scene *scene, View3D *v3d, RegionView3D *rv
if(path->steps > 0) {
glVertexPointer(3, GL_FLOAT, sizeof(ParticleCacheKey), path->co);
if(ob_dt > OB_WIRE) {
if(1) { //ob_dt > OB_WIRE) {
glNormalPointer(GL_FLOAT, sizeof(ParticleCacheKey), path->vel);
if(part->draw&PART_DRAW_MAT_COL)
glColorPointer(3, GL_FLOAT, sizeof(ParticleCacheKey), path->col);
@ -3874,7 +3874,7 @@ static void draw_new_particle_system(Scene *scene, View3D *v3d, RegionView3D *rv
path=cache[a];
glVertexPointer(3, GL_FLOAT, sizeof(ParticleCacheKey), path->co);
if(ob_dt > OB_WIRE) {
if(1) { //ob_dt > OB_WIRE) {
glNormalPointer(GL_FLOAT, sizeof(ParticleCacheKey), path->vel);
if(part->draw&PART_DRAW_MAT_COL)
glColorPointer(3, GL_FLOAT, sizeof(ParticleCacheKey), path->col);
@ -3885,7 +3885,7 @@ static void draw_new_particle_system(Scene *scene, View3D *v3d, RegionView3D *rv
/* restore & clean up */
if(ob_dt > OB_WIRE) {
if(1) { //ob_dt > OB_WIRE) {
if(part->draw&PART_DRAW_MAT_COL)
glDisable(GL_COLOR_ARRAY);
glDisable(GL_COLOR_MATERIAL);

@ -344,6 +344,7 @@ typedef struct bPose {
void *ikparam; /* IK solver parameters, structure depends on iksolver */
bAnimVizSettings avs; /* settings for visualisation of bone animation */
char proxy_act_bone[32]; /*proxy active bone name*/
} bPose;

@ -83,6 +83,7 @@ typedef struct ModifierData {
struct ModifierData *next, *prev;
int type, mode;
int stackindex, pad;
char name[32];
/* XXX for timing info set by caller... solve later? (ton) */

@ -62,6 +62,7 @@ typedef struct bDeformGroup {
struct bDeformGroup *next, *prev;
char name[32];
} bDeformGroup;
#define MAX_VGROUP_NAME 32
/**
* The following illustrates the orientation of the

@ -137,11 +137,20 @@ static int default_break(void *unused) {return G.afbreek == 1;}
static void stats_background(void *unused, RenderStats *rs)
{
uintptr_t mem_in_use= MEM_get_memory_in_use();
float megs_used_memory= mem_in_use/(1024.0*1024.0);
char str[400], *spos= str;
spos+= sprintf(spos, "Fra:%d Mem:%.2fM ", rs->cfra, megs_used_memory);
uintptr_t mem_in_use, mmap_in_use, peak_memory;
float megs_used_memory, mmap_used_memory, megs_peak_memory;
mem_in_use= MEM_get_memory_in_use();
mmap_in_use= MEM_get_mapped_memory_in_use();
peak_memory = MEM_get_peak_memory();
megs_used_memory= (mem_in_use-mmap_in_use)/(1024.0*1024.0);
mmap_used_memory= (mmap_in_use)/(1024.0*1024.0);
megs_peak_memory = (peak_memory)/(1024.0*1024.0);
spos+= sprintf(spos, "Fra:%d Mem:%.2fM (%.2fM, combined peak %.2fM) ", rs->cfra,
megs_used_memory, mmap_used_memory, megs_peak_memory);
if(rs->curfield)
spos+= sprintf(spos, "Field %d ", rs->curfield);
@ -2727,6 +2736,7 @@ void RE_BlenderFrame(Render *re, Scene *scene, SceneRenderLayer *srl, unsigned i
scene->r.cfra= frame;
if(render_initialize_from_scene(re, scene, srl, lay, 0, 0)) {
MEM_reset_peak_memory();
do_render_all_options(re);
}