diff options
author | Campbell Barton <ideasman42@gmail.com> | 2011-05-20 20:52:10 +0400 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2011-05-20 20:52:10 +0400 |
commit | 88f4087a574c2f74b3414d47dab8be97cce4bc84 (patch) | |
tree | f1440d4aa18d73c4d1449857ccabefc444d867e2 /source/blender/blenkernel/intern | |
parent | 4514be8f4ff5c87824e447c7016939363f66f78c (diff) | |
parent | 259582235c5dc211f998e2c1924faae6c9b7a87e (diff) |
svn merge -r36725:36801 https://svn.blender.org/svnroot/bf-blender/trunk/blender
Diffstat (limited to 'source/blender/blenkernel/intern')
-rw-r--r-- | source/blender/blenkernel/intern/action.c | 5 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/blender.c | 32 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/fcurve.c | 2 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/icons.c | 22 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/material.c | 3 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/multires.c | 4 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/object.c | 29 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/screen.c | 18 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/sequencer.c | 17 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/shrinkwrap.c | 2 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/subsurf_ccg.c | 11 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/world.c | 30 |
12 files changed, 127 insertions, 48 deletions
diff --git a/source/blender/blenkernel/intern/action.c b/source/blender/blenkernel/intern/action.c index 5b49d9a9841..77f56058a4f 100644 --- a/source/blender/blenkernel/intern/action.c +++ b/source/blender/blenkernel/intern/action.c @@ -831,7 +831,10 @@ void pose_remove_group (Object *ob) /* now, remove it from the pose */ BLI_freelinkN(&pose->agroups, grp); - pose->active_group= 0; + pose->active_group--; + if(pose->active_group < 0 || pose->agroups.first == NULL) { + pose->active_group= 0; + } } } diff --git a/source/blender/blenkernel/intern/blender.c b/source/blender/blenkernel/intern/blender.c index 5b79f07f84d..e794d0f6172 100644 --- a/source/blender/blenkernel/intern/blender.c +++ b/source/blender/blenkernel/intern/blender.c @@ -191,7 +191,7 @@ static void clean_paths(Main *main) /* note, this is called on Undo so any slow conversion functions here * should be avoided or check (mode!='u') */ -static void setup_app_data(bContext *C, BlendFileData *bfd, const char *filename) +static void setup_app_data(bContext *C, BlendFileData *bfd, const char *filepath) { bScreen *curscreen= NULL; Scene *curscene= NULL; @@ -295,18 +295,18 @@ static void setup_app_data(bContext *C, BlendFileData *bfd, const char *filename if(recover && bfd->filename[0] && G.relbase_valid) { /* in case of autosave or quit.blend, use original filename instead * use relbase_valid to make sure the file is saved, else we get <memory2> in the filename */ - filename= bfd->filename; + filepath= bfd->filename; } #if 0 else if (!G.relbase_valid) { /* otherwise, use an empty string as filename, rather than <memory2> */ - filename=""; + filepath=""; } #endif /* these are the same at times, should never copy to the same location */ - if(G.main->name != filename) - BLI_strncpy(G.main->name, filename, FILE_MAX); + if(G.main->name != filepath) + BLI_strncpy(G.main->name, filepath, FILE_MAX); /* baseflags, groups, make depsgraph, etc */ set_scene_bg(G.main, CTX_data_scene(C)); @@ -353,15 +353,15 @@ void BKE_userdef_free(void) BLI_freelistN(&U.addons); } -int BKE_read_file(bContext *C, const char *dir, ReportList *reports) +int BKE_read_file(bContext *C, const char *filepath, ReportList *reports) { BlendFileData *bfd; int retval= BKE_READ_FILE_OK; - if(strstr(dir, BLENDER_STARTUP_FILE)==NULL) /* dont print user-pref loading */ - printf("read blend: %s\n", dir); + if(strstr(filepath, BLENDER_STARTUP_FILE)==NULL) /* dont print user-pref loading */ + printf("read blend: %s\n", filepath); - bfd= BLO_read_from_file(dir, reports); + bfd= BLO_read_from_file(filepath, reports); if (bfd) { if(bfd->user) retval= BKE_READ_FILE_OK_USERPREFS; @@ -372,10 +372,10 @@ int BKE_read_file(bContext *C, const char *dir, ReportList *reports) retval= BKE_READ_FILE_FAIL; } else - setup_app_data(C, bfd, dir); // frees BFD + setup_app_data(C, bfd, filepath); // frees BFD } else - BKE_reports_prependf(reports, "Loading %s failed: ", dir); + BKE_reports_prependf(reports, "Loading %s failed: ", filepath); return (bfd?retval:BKE_READ_FILE_FAIL); } @@ -521,19 +521,19 @@ void BKE_write_undo(bContext *C, const char *name) /* disk save version */ if(UNDO_DISK) { static int counter= 0; - char tstr[FILE_MAXDIR+FILE_MAXFILE]; + char filepath[FILE_MAXDIR+FILE_MAXFILE]; char numstr[32]; - /* calculate current filename */ + /* calculate current filepath */ counter++; counter= counter % U.undosteps; BLI_snprintf(numstr, sizeof(numstr), "%d.blend", counter); - BLI_make_file_string("/", tstr, btempdir, numstr); + BLI_make_file_string("/", filepath, btempdir, numstr); - success= BLO_write_file(CTX_data_main(C), tstr, G.fileflags, NULL, NULL); + success= BLO_write_file(CTX_data_main(C), filepath, G.fileflags, NULL, NULL); - BLI_strncpy(curundo->str, tstr, sizeof(curundo->str)); + BLI_strncpy(curundo->str, filepath, sizeof(curundo->str)); } else { MemFile *prevfile=NULL; diff --git a/source/blender/blenkernel/intern/fcurve.c b/source/blender/blenkernel/intern/fcurve.c index b1272ee2d53..d6a9d950015 100644 --- a/source/blender/blenkernel/intern/fcurve.c +++ b/source/blender/blenkernel/intern/fcurve.c @@ -2039,7 +2039,7 @@ float evaluate_fcurve (FCurve *fcu, float evaltime) * here so that the curve can be sampled correctly */ if (fcu->flag & FCURVE_INT_VALUES) - cvalue= (float)((int)cvalue); + cvalue= floorf(cvalue + 0.5f); /* return evaluated value */ return cvalue; diff --git a/source/blender/blenkernel/intern/icons.c b/source/blender/blenkernel/intern/icons.c index 18eda831c47..9effd25c142 100644 --- a/source/blender/blenkernel/intern/icons.c +++ b/source/blender/blenkernel/intern/icons.c @@ -132,18 +132,26 @@ struct PreviewImage* BKE_previewimg_create(void) return prv_img; } -void BKE_previewimg_free(PreviewImage **prv) +void BKE_previewimg_freefunc(void *link) { - if(prv && (*prv)) { + PreviewImage *prv = (PreviewImage *)link; + if (prv) { int i; - + for (i=0; i<NUM_ICON_SIZES;++i) { - if ((*prv)->rect[i]) { - MEM_freeN((*prv)->rect[i]); - (*prv)->rect[i] = NULL; + if (prv->rect[i]) { + MEM_freeN(prv->rect[i]); + prv->rect[i] = NULL; } } - MEM_freeN((*prv)); + MEM_freeN(prv); + } +} + +void BKE_previewimg_free(PreviewImage **prv) +{ + if(prv && (*prv)) { + BKE_previewimg_freefunc(*prv); *prv = NULL; } } diff --git a/source/blender/blenkernel/intern/material.c b/source/blender/blenkernel/intern/material.c index fd58dc2dfc0..334f018efc9 100644 --- a/source/blender/blenkernel/intern/material.c +++ b/source/blender/blenkernel/intern/material.c @@ -258,9 +258,8 @@ Material *localize_material(Material *ma) man->preview = NULL; - if(ma->nodetree) { + if(ma->nodetree) man->nodetree= ntreeLocalize(ma->nodetree); - } man->gpumaterial.first= man->gpumaterial.last= NULL; diff --git a/source/blender/blenkernel/intern/multires.c b/source/blender/blenkernel/intern/multires.c index eb92c2f3868..01ef39487d6 100644 --- a/source/blender/blenkernel/intern/multires.c +++ b/source/blender/blenkernel/intern/multires.c @@ -471,7 +471,7 @@ DerivedMesh *multires_dm_create_local(Object *ob, DerivedMesh *dm, int lvl, int return multires_dm_create_from_derived(&mmd, 1, dm, ob, 0, 0); } -static DerivedMesh *subsurf_dm_create_local(Object *UNUSED(ob), DerivedMesh *dm, int lvl, int simple, int optimal) +static DerivedMesh *subsurf_dm_create_local(Object *ob, DerivedMesh *dm, int lvl, int simple, int optimal) { SubsurfModifierData smd= {{NULL}}; @@ -482,7 +482,7 @@ static DerivedMesh *subsurf_dm_create_local(Object *UNUSED(ob), DerivedMesh *dm, if(optimal) smd.flags |= eSubsurfModifierFlag_ControlEdges; - return subsurf_make_derived_from_derived(dm, &smd, 0, NULL, 0, 0); + return subsurf_make_derived_from_derived(dm, &smd, 0, NULL, 0, 0, (ob->mode & OB_MODE_EDIT)); } diff --git a/source/blender/blenkernel/intern/object.c b/source/blender/blenkernel/intern/object.c index 74b63a83dce..9b3f8713ff0 100644 --- a/source/blender/blenkernel/intern/object.c +++ b/source/blender/blenkernel/intern/object.c @@ -868,11 +868,32 @@ Lamp *copy_lamp(Lamp *la) lan->curfalloff = curvemapping_copy(la->curfalloff); -#if 0 // XXX old animation system - id_us_plus((ID *)lan->ipo); -#endif // XXX old animation system + if(la->preview) + lan->preview = BKE_previewimg_copy(la->preview); + + return lan; +} + +Lamp *localize_lamp(Lamp *la) +{ + Lamp *lan; + int a; + + lan= copy_libblock(la); + BLI_remlink(&G.main->lamp, lan); + + for(a=0; a<MAX_MTEX; a++) { + if(lan->mtex[a]) { + lan->mtex[a]= MEM_mallocN(sizeof(MTex), "localize_lamp"); + memcpy(lan->mtex[a], la->mtex[a], sizeof(MTex)); + /* free lamp decrements */ + id_us_plus((ID *)lan->mtex[a]->tex); + } + } + + lan->curfalloff = curvemapping_copy(la->curfalloff); - if (la->preview) lan->preview = BKE_previewimg_copy(la->preview); + lan->preview= NULL; return lan; } diff --git a/source/blender/blenkernel/intern/screen.c b/source/blender/blenkernel/intern/screen.c index 63e35408381..50b3e32278a 100644 --- a/source/blender/blenkernel/intern/screen.c +++ b/source/blender/blenkernel/intern/screen.c @@ -31,6 +31,7 @@ * \ingroup bke */ +#include "BLI_winstuff.h" #include <string.h> #include <stdio.h> @@ -416,3 +417,20 @@ void BKE_screen_view3d_main_sync(ListBase *screen_lb, Scene *scene) } } +/* magic zoom calculation, no idea what + * it signifies, if you find out, tell me! -zr + */ + +/* simple, its magic dude! + * well, to be honest, this gives a natural feeling zooming + * with multiple keypad presses (ton) + */ +float BKE_screen_view3d_zoom_to_fac(float camzoom) +{ + return powf(((float)M_SQRT2 + camzoom/50.0f), 2.0f) / 4.0f; +} + +float BKE_screen_view3d_zoom_from_fac(float zoomfac) +{ + return ((sqrtf(4.0f * zoomfac) - (float)M_SQRT2) * 50.0f); +} diff --git a/source/blender/blenkernel/intern/sequencer.c b/source/blender/blenkernel/intern/sequencer.c index fb72ab676b0..30abb6278a7 100644 --- a/source/blender/blenkernel/intern/sequencer.c +++ b/source/blender/blenkernel/intern/sequencer.c @@ -977,16 +977,22 @@ static float give_stripelem_index(Sequence *seq, float cfra) int sta = seq->start; int end = seq->start+seq->len-1; - if(seq->len == 0) return -1; + if (seq->type & SEQ_EFFECT) { + end = seq->enddisp; + } + + if(end < sta) { + return -1; + } if(seq->flag&SEQ_REVERSE_FRAMES) { /*reverse frame in this sequence */ - if(cfra <= sta) nr= seq->len-1; + if(cfra <= sta) nr= end - sta; else if(cfra >= end) nr= 0; else nr= end - cfra; } else { if(cfra <= sta) nr= 0; - else if(cfra >= end) nr= seq->len-1; + else if(cfra >= end) nr= end - sta; else nr= cfra - sta; } @@ -2036,8 +2042,9 @@ static ImBuf * seq_render_strip(SeqRenderData context, Sequence * seq, float cfr break; } case SEQ_EFFECT: - { - ibuf = seq_render_effect_strip_impl(context, seq, cfra); + { + ibuf = seq_render_effect_strip_impl( + context, seq, seq->start + nr); break; } case SEQ_IMAGE: diff --git a/source/blender/blenkernel/intern/shrinkwrap.c b/source/blender/blenkernel/intern/shrinkwrap.c index 653e7612a17..fcdf30be992 100644 --- a/source/blender/blenkernel/intern/shrinkwrap.c +++ b/source/blender/blenkernel/intern/shrinkwrap.c @@ -564,7 +564,7 @@ void shrinkwrapModifier_deform(ShrinkwrapModifierData *smd, Object *ob, DerivedM ssmd.subdivType = ME_CC_SUBSURF; //catmull clark ssmd.levels = smd->subsurfLevels; //levels - ss_mesh = subsurf_make_derived_from_derived(dm, &ssmd, FALSE, NULL, 0, 0); + ss_mesh = subsurf_make_derived_from_derived(dm, &ssmd, FALSE, NULL, 0, 0, (ob->mode & OB_MODE_EDIT)); if(ss_mesh) { diff --git a/source/blender/blenkernel/intern/subsurf_ccg.c b/source/blender/blenkernel/intern/subsurf_ccg.c index ae6ea6f4115..652b667499b 100644 --- a/source/blender/blenkernel/intern/subsurf_ccg.c +++ b/source/blender/blenkernel/intern/subsurf_ccg.c @@ -3025,7 +3025,7 @@ struct DerivedMesh *subsurf_make_derived_from_derived( struct DerivedMesh *dm, struct SubsurfModifierData *smd, int useRenderParams, float (*vertCos)[3], - int isFinalCalc, int editMode) + int isFinalCalc, int forEditMode, int inEditMode) { int useSimple = smd->subdivType == ME_SIMPLE_SUBSURF; int useAging = smd->flags & eSubsurfModifierFlag_DebugIncr; @@ -3033,7 +3033,7 @@ struct DerivedMesh *subsurf_make_derived_from_derived( int drawInteriorEdges = !(smd->flags & eSubsurfModifierFlag_ControlEdges); CCGDerivedMesh *result = NULL; - if(editMode) { + if(forEditMode) { int levels= (smd->modifier.scene)? get_render_subsurf_level(&smd->modifier.scene->r, smd->levels): smd->levels; smd->emCache = _getSubSurf(smd->emCache, levels, useAging, 0, @@ -3064,7 +3064,7 @@ struct DerivedMesh *subsurf_make_derived_from_derived( int useAging = smd->flags & eSubsurfModifierFlag_DebugIncr; int levels= (smd->modifier.scene)? get_render_subsurf_level(&smd->modifier.scene->r, smd->levels): smd->levels; CCGSubSurf *ss; - + /* It is quite possible there is a much better place to do this. It * depends a bit on how rigourously we expect this function to never * be called in editmode. In semi-theory we could share a single @@ -3072,8 +3072,11 @@ struct DerivedMesh *subsurf_make_derived_from_derived( * the same so we would need some way of converting them. Its probably * not worth the effort. But then why am I even writing this long * comment that no one will read? Hmmm. - zr + * + * Addendum: we can't really ensure that this is never called in edit + * mode, so now we have a parameter to verify it. - brecht */ - if(smd->emCache) { + if(!inEditMode && smd->emCache) { ccgSubSurf_free(smd->emCache); smd->emCache = NULL; } diff --git a/source/blender/blenkernel/intern/world.c b/source/blender/blenkernel/intern/world.c index 7a76e61c17b..d413177873f 100644 --- a/source/blender/blenkernel/intern/world.c +++ b/source/blender/blenkernel/intern/world.c @@ -43,6 +43,7 @@ #include "DNA_scene_types.h" #include "DNA_texture_types.h" +#include "BLI_listbase.h" #include "BLI_utildefines.h" #include "BKE_world.h" @@ -117,17 +118,36 @@ World *copy_world(World *wrld) for(a=0; a<MAX_MTEX; a++) { if(wrld->mtex[a]) { - wrldn->mtex[a]= MEM_mallocN(sizeof(MTex), "copymaterial"); + wrldn->mtex[a]= MEM_mallocN(sizeof(MTex), "copy_world"); memcpy(wrldn->mtex[a], wrld->mtex[a], sizeof(MTex)); id_us_plus((ID *)wrldn->mtex[a]->tex); } } - if (wrld->preview) wrldn->preview = BKE_previewimg_copy(wrld->preview); + if(wrld->preview) + wrldn->preview = BKE_previewimg_copy(wrld->preview); -#if 0 // XXX old animation system - id_us_plus((ID *)wrldn->ipo); -#endif // XXX old animation system + return wrldn; +} + +World *localize_world(World *wrld) +{ + World *wrldn; + int a; + + wrldn= copy_libblock(wrld); + BLI_remlink(&G.main->world, wrldn); + + for(a=0; a<MAX_MTEX; a++) { + if(wrld->mtex[a]) { + wrldn->mtex[a]= MEM_mallocN(sizeof(MTex), "localize_world"); + memcpy(wrldn->mtex[a], wrld->mtex[a], sizeof(MTex)); + /* free world decrements */ + id_us_plus((ID *)wrldn->mtex[a]->tex); + } + } + + wrldn->preview= NULL; return wrldn; } |