diff options
author | Julian Eisel <eiseljulian@gmail.com> | 2017-11-19 15:16:14 +0300 |
---|---|---|
committer | Julian Eisel <eiseljulian@gmail.com> | 2017-11-19 15:16:14 +0300 |
commit | 7f96323cd001bc7555d0f145027e3bbbbc1462b8 (patch) | |
tree | 842a4ac4095be5c22bd0a505612c731351839a29 /source/blender/blenkernel | |
parent | 4de142e0b7ba014a3e1e41672600aa38465f2454 (diff) | |
parent | 3133d2d58c391544a48342860120336e2a0f944e (diff) |
Merge branch 'master' into blender2.8
Diffstat (limited to 'source/blender/blenkernel')
-rw-r--r-- | source/blender/blenkernel/BKE_subsurf.h | 2 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/appdir.c | 46 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/collision.c | 12 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/subsurf_ccg.c | 9 |
4 files changed, 43 insertions, 26 deletions
diff --git a/source/blender/blenkernel/BKE_subsurf.h b/source/blender/blenkernel/BKE_subsurf.h index f52bb2ab9cb..92170325113 100644 --- a/source/blender/blenkernel/BKE_subsurf.h +++ b/source/blender/blenkernel/BKE_subsurf.h @@ -125,6 +125,8 @@ typedef struct CCGDerivedMesh { struct CCGFace **gridFaces; struct DMFlagMat *gridFlagMats; unsigned int **gridHidden; + /* Elements in arrays above. */ + unsigned int numGrid; struct { struct MultiresModifierData *mmd; diff --git a/source/blender/blenkernel/intern/appdir.c b/source/blender/blenkernel/intern/appdir.c index 6dd852c7875..8d4776dca0e 100644 --- a/source/blender/blenkernel/intern/appdir.c +++ b/source/blender/blenkernel/intern/appdir.c @@ -290,6 +290,33 @@ static bool get_path_user( } /** + * Special convenience exception for dev builds to allow overrides to the system path. + * With this, need for running 'make install' can be avoided, e.g. by symlinking SOURCE_DIR/release + * to EXECUTABLE_DIR/release, or by running Blender from source directory directly. + */ +static bool get_path_system_dev_build_exception( + char *targetpath, size_t targetpath_len, const char *relfolder) +{ + char cwd[FILE_MAX]; + + /* Try EXECUTABLE_DIR/release/folder_name. Allows symlinking release folder from source dir. */ + if (test_path(targetpath, targetpath_len, bprogdir, "release", relfolder)) { + return true; + } + /* Try CWD/release/folder_name. Allows executing Blender from any directory + * (usually source dir), even without a release dir in bprogdir. */ + if (BLI_current_working_dir(cwd, sizeof(cwd))) { + if (test_path(targetpath, targetpath_len, cwd, "release", relfolder)) { + return true; + } + } + /* never use if not existing. */ + targetpath[0] = '\0'; + + return false; +} + +/** * Returns the path of a folder within the Blender installation directory. * * \param targetpath String to return path @@ -305,7 +332,6 @@ static bool get_path_system( { char system_path[FILE_MAX]; const char *system_base_path; - char cwd[FILE_MAX]; char relfolder[FILE_MAX]; if (folder_name) { @@ -320,25 +346,9 @@ static bool get_path_system( relfolder[0] = '\0'; } - /* first allow developer only overrides to the system path - * these are only used when running blender from source */ - - /* try CWD/release/folder_name */ - if (BLI_current_working_dir(cwd, sizeof(cwd))) { - if (test_path(targetpath, targetpath_len, cwd, "release", relfolder)) { - return true; - } - } - /* try EXECUTABLE_DIR/release/folder_name */ - if (test_path(targetpath, targetpath_len, bprogdir, "release", relfolder)) { + if (get_path_system_dev_build_exception(targetpath, targetpath_len, relfolder)) { return true; } - /* never use if not existing. */ - targetpath[0] = '\0'; - - /* end developer overrides */ - - system_path[0] = '\0'; diff --git a/source/blender/blenkernel/intern/collision.c b/source/blender/blenkernel/intern/collision.c index bc50fdd5a11..a004d32847a 100644 --- a/source/blender/blenkernel/intern/collision.c +++ b/source/blender/blenkernel/intern/collision.c @@ -1148,9 +1148,10 @@ static CollPair *cloth_point_collision( return collpair; } -static void cloth_points_objcollisions_nearcheck(ClothModifierData * clmd, CollisionModifierData *collmd, - CollPair **collisions, CollPair **collisions_index, - int numresult, BVHTreeOverlap *overlap, float epsilon, double dt) +static void cloth_points_objcollisions_nearcheck( + ClothModifierData *clmd, CollisionModifierData *collmd, + CollPair **collisions, CollPair **collisions_index, + int numresult, BVHTreeOverlap *overlap, float epsilon, double dt) { int i; @@ -1164,8 +1165,9 @@ static void cloth_points_objcollisions_nearcheck(ClothModifierData * clmd, Colli } } -static int cloth_points_objcollisions_resolve(ClothModifierData * clmd, CollisionModifierData *collmd, PartDeflect *pd, - CollPair *collisions, CollPair *collisions_index, float dt) +static int cloth_points_objcollisions_resolve( + ClothModifierData *clmd, CollisionModifierData *collmd, PartDeflect *pd, + CollPair *collisions, CollPair *collisions_index, float dt) { Cloth *cloth = clmd->clothObject; int i = 0, mvert_num = clmd->clothObject->mvert_num; diff --git a/source/blender/blenkernel/intern/subsurf_ccg.c b/source/blender/blenkernel/intern/subsurf_ccg.c index d461e03fcda..2f9a7090caf 100644 --- a/source/blender/blenkernel/intern/subsurf_ccg.c +++ b/source/blender/blenkernel/intern/subsurf_ccg.c @@ -3777,10 +3777,12 @@ static void ccgDM_release(DerivedMesh *dm) if (ccgdm->gridOffset) MEM_freeN(ccgdm->gridOffset); if (ccgdm->gridFlagMats) MEM_freeN(ccgdm->gridFlagMats); if (ccgdm->gridHidden) { - int i, numGrids = dm->getNumGrids(dm); - for (i = 0; i < numGrids; i++) { - if (ccgdm->gridHidden[i]) + /* Using dm->getNumGrids(dm) accesses freed memory */ + uint numGrids = ccgdm->numGrid; + for (uint i = 0; i < numGrids; i++) { + if (ccgdm->gridHidden[i]) { MEM_freeN(ccgdm->gridHidden[i]); + } } MEM_freeN(ccgdm->gridHidden); } @@ -4084,6 +4086,7 @@ static void ccgdm_create_grids(DerivedMesh *dm) ccgdm->gridFaces = gridFaces; ccgdm->gridOffset = gridOffset; ccgdm->gridFlagMats = gridFlagMats; + ccgdm->numGrid = numGrids; } static CCGElem **ccgDM_getGridData(DerivedMesh *dm) |