[Bf-blender-cvs] [751d235] fracture_modifier: crash fix with FM and forcefields

2016-12-19 Thread Martin Felke
Commit: 751d2354c2e3da4e39ed98460127c526e9d0b288
Author: Martin Felke
Date:   Mon Dec 19 22:34:49 2016 +0100
Branches: fracture_modifier
https://developer.blender.org/rB751d2354c2e3da4e39ed98460127c526e9d0b288

crash fix with FM and forcefields

===

M   source/blender/blenkernel/intern/rigidbody.c

===

diff --git a/source/blender/blenkernel/intern/rigidbody.c 
b/source/blender/blenkernel/intern/rigidbody.c
index 43c2aa5..a3cf18d 100644
--- a/source/blender/blenkernel/intern/rigidbody.c
+++ b/source/blender/blenkernel/intern/rigidbody.c
@@ -3510,7 +3510,7 @@ static void rigidbody_update_sim_ob(Scene *scene, 
RigidBodyWorld *rbw, Object *o
pdDoEffectors(effectors, NULL, effector_weights, 
, eff_force, NULL);
if ((rbo->flag & RBO_FLAG_KINEMATIC) && (thresh < 
len_squared_v3(eff_force)))
{
-   activateRigidbody(rbo, NULL, NULL, NULL);
+   activateRigidbody(rbo, rbw, mi, ob);

RB_body_apply_central_force(rbo->physics_object, eff_force);
}
else if (rbo->flag & RBO_FLAG_KINEMATIC)

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [76c4f0e] blender2.8: Fix parameter error (changes by Mike Erwin)

2016-12-19 Thread Antonio Vazquez
Commit: 76c4f0ec6c61bdc33ae908849f632771a1f997c0
Author: Antonio Vazquez
Date:   Mon Dec 19 22:36:56 2016 +0100
Branches: blender2.8
https://developer.blender.org/rB76c4f0ec6c61bdc33ae908849f632771a1f997c0

Fix parameter error (changes by Mike Erwin)

===

M   source/blender/editors/screen/area.c

===

diff --git a/source/blender/editors/screen/area.c 
b/source/blender/editors/screen/area.c
index 19224ed..fe73495 100644
--- a/source/blender/editors/screen/area.c
+++ b/source/blender/editors/screen/area.c
@@ -2019,7 +2019,7 @@ void ED_region_panels(const bContext *C, ARegion *ar, 
const char *context, int c
UI_view2d_view_restore(C);
glEnable(GL_BLEND);
VertexFormat* format = immVertexFormat();
-   unsigned pos = add_attrib(format, "pos", GL_FLOAT, 2, 
KEEP_FLOAT);
+   unsigned pos = add_attrib(format, "pos", COMP_I32, 2, 
CONVERT_INT_TO_FLOAT);
immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
immUniformThemeColor((ar->type->regionid == RGN_TYPE_PREVIEW) ? 
TH_PREVIEW_BACK : TH_BACK);
immRecti(pos, 0, 0, BLI_rcti_size_x(>winrct), 
BLI_rcti_size_y(>winrct) + 1);

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [f41b14d] readfile_doversions_after_linking: Proper handling of IDs in do_versions_after_liblink.

2016-12-19 Thread Bastien Montagne
Commit: f41b14d4f5f084ccaf1bec7c0bdec57dd7ae1fa2
Author: Bastien Montagne
Date:   Mon Dec 19 19:42:44 2016 +0100
Branches: readfile_doversions_after_linking
https://developer.blender.org/rBf41b14d4f5f084ccaf1bec7c0bdec57dd7ae1fa2

Proper handling of IDs in do_versions_after_liblink.

Basic idea is to store fileversion in Library datablock, and split again
Main by libraries after lib linking, do_versions_after_liblink on
those separated Mains, and merge again.

This allows to still have correct versions for each data-block in that
second do_versions step.

===

M   source/blender/blenloader/intern/readfile.c
M   source/blender/makesdna/DNA_ID.h

===

diff --git a/source/blender/blenloader/intern/readfile.c 
b/source/blender/blenloader/intern/readfile.c
index 2bbdd73..f568a74 100644
--- a/source/blender/blenloader/intern/readfile.c
+++ b/source/blender/blenloader/intern/readfile.c
@@ -531,6 +531,8 @@ void blo_split_main(ListBase *mainlist, Main *main)
for (Library *lib = main->library.first; lib; lib = lib->id.next, i++) {
Main *libmain = BKE_main_new();
libmain->curlib = lib;
+   libmain->versionfile = lib->versionfile;
+   libmain->subversionfile = lib->subversionfile;
BLI_addtail(mainlist, libmain);
lib->temp_index = i;
lib_main_array[i] = libmain;
@@ -562,6 +564,10 @@ static void read_file_version(FileData *fd, Main *main)
break;
}
}
+   if (main->curlib) {
+   main->curlib->versionfile = main->versionfile;
+   main->curlib->subversionfile = main->subversionfile;
+   }
 }
 
 #ifdef USE_GHASH_BHEAD
@@ -8373,8 +8379,10 @@ static void do_versions(FileData *fd, Library *lib, Main 
*main)
/* don't forget to set version number in BKE_blender_version.h! */
 }
 
-static void do_versions_after_linking(FileData *fd, Main *main)
+static void do_versions_after_linking(Main *main)
 {
+// printf("%s for %s (%s), %d.%d\n", __func__, main->curlib ? 
main->curlib->name : main->name,
+//main->curlib ? "LIB" : "MAIN", main->versionfile, 
main->subversionfile);
 }
 
 static void lib_link_all(FileData *fd, Main *main)
@@ -8577,7 +8585,16 @@ BlendFileData *blo_read_file_internal(FileData *fd, 
const char *filepath)

lib_link_all(fd, bfd->main);
 
-   do_versions_after_linking(fd, bfd->main);
+   /* Skip in undo case. */
+   if (fd->memfile == NULL) {
+   /* Yep, second splitting... but this is a very cheap operation, 
so no big deal. */
+   blo_split_main(, bfd->main);
+   for (Main *mainvar = mainlist.first; mainvar; mainvar = 
mainvar->next) {
+   BLI_assert(mainvar->versionfile != 0);
+   do_versions_after_linking(mainvar);
+   }
+   blo_join_main();
+   }
 
BKE_main_id_tag_all(bfd->main, LIB_TAG_NEW, false);
 
@@ -10112,6 +10129,32 @@ Main *BLO_library_link_begin(Main *mainvar, 
BlendHandle **bh, const char *filepa
return library_link_begin(mainvar, , filepath);
 }
 
+static void split_main_newid(Main *mainptr, Main *main_newid)
+{
+   /* We only copy the necessary subset of data in this temp main. */
+   main_newid->versionfile = mainptr->versionfile;
+   main_newid->subversionfile = mainptr->subversionfile;
+   BLI_strncpy(main_newid->name, mainptr->name, sizeof(main_newid->name));
+   main_newid->curlib = mainptr->curlib;
+
+   ListBase *lbarray[MAX_LIBARRAY];
+   ListBase *lbarray_newid[MAX_LIBARRAY];
+   int i = set_listbasepointers(mainptr, lbarray);
+   set_listbasepointers(main_newid, lbarray_newid);
+   while (i--) {
+   BLI_listbase_clear(lbarray_newid[i]);
+
+   for (ID *id = lbarray[i]->first, *idnext; id; id = idnext) {
+   idnext = id->next;
+
+   if (id->tag & LIB_TAG_NEW) {
+   BLI_remlink(lbarray[i], id);
+   BLI_addtail(lbarray_newid[i], id);
+   }
+   }
+   }
+}
+
 /* scene and v3d may be NULL. */
 static void library_link_end(Main *mainl, FileData **fd, const short flag, 
Scene *scene, View3D *v3d)
 {
@@ -10140,12 +10183,25 @@ static void library_link_end(Main *mainl, FileData 
**fd, const short flag, Scene
 
blo_join_main((*fd)->mainlist);
mainvar = (*fd)->mainlist->first;
-   MEM_freeN((*fd)->mainlist);
mainl = NULL; /* blo_join_main free's mainl, cant use anymore */
 
lib_link_all(*fd, mainvar);
 
-   do_versions_after_linking(*fd, mainvar);
+   /* Yep, second splitting... but this is a very cheap operation, so no 
big deal. */
+   

[Bf-blender-cvs] [3404f7d] readfile_doversions_after_linking: Initial resurrection of `do_versions_after_linking()`.

2016-12-19 Thread Bastien Montagne
Commit: 3404f7d098de6046020488dc4d0d32076129084a
Author: Bastien Montagne
Date:   Mon Dec 19 16:46:48 2016 +0100
Branches: readfile_doversions_after_linking
https://developer.blender.org/rB3404f7d098de6046020488dc4d0d32076129084a

Initial resurrection of `do_versions_after_linking()`.

===

M   source/blender/blenloader/intern/readfile.c

===

diff --git a/source/blender/blenloader/intern/readfile.c 
b/source/blender/blenloader/intern/readfile.c
index a154d28..2bbdd73 100644
--- a/source/blender/blenloader/intern/readfile.c
+++ b/source/blender/blenloader/intern/readfile.c
@@ -8373,14 +8373,9 @@ static void do_versions(FileData *fd, Library *lib, Main 
*main)
/* don't forget to set version number in BKE_blender_version.h! */
 }
 
-#if 0 // XXX: disabled for now... we still don't have this in the right place 
in the loading code for it to work
-static void do_versions_after_linking(FileData *fd, Library *lib, Main *main)
+static void do_versions_after_linking(FileData *fd, Main *main)
 {
-   /* old Animation System (using IPO's) needs to be converted to the new 
Animato system */
-   if (main->versionfile < 250)
-   do_versions_ipos_to_animato(main);
 }
-#endif
 
 static void lib_link_all(FileData *fd, Main *main)
 {
@@ -8582,7 +8577,8 @@ BlendFileData *blo_read_file_internal(FileData *fd, const 
char *filepath)

lib_link_all(fd, bfd->main);
 
-   //do_versions_after_linking(fd, NULL, bfd->main); // XXX: not here (or 
even in this function at all)! this causes crashes on many files - Aligorith 
(July 04, 2010)
+   do_versions_after_linking(fd, bfd->main);
+
BKE_main_id_tag_all(bfd->main, LIB_TAG_NEW, false);
 
lib_verify_nodetree(bfd->main, true);
@@ -10149,6 +10145,8 @@ static void library_link_end(Main *mainl, FileData 
**fd, const short flag, Scene
 
lib_link_all(*fd, mainvar);
 
+   do_versions_after_linking(*fd, mainvar);
+
BKE_main_id_tag_all(mainvar, LIB_TAG_NEW, false);
 
lib_verify_nodetree(mainvar, false);

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [9d2b6b5] render-layers: Fixup on BKE_scene_objects_Iterator_next

2016-12-19 Thread Dalai Felinto
Commit: 9d2b6b56ac64d3d26f758c5bf0391f21734c3f2d
Author: Dalai Felinto
Date:   Mon Dec 19 18:13:47 2016 +0100
Branches: render-layers
https://developer.blender.org/rB9d2b6b56ac64d3d26f758c5bf0391f21734c3f2d

Fixup on BKE_scene_objects_Iterator_next

===

M   source/blender/blenkernel/intern/collection.c

===

diff --git a/source/blender/blenkernel/intern/collection.c 
b/source/blender/blenkernel/intern/collection.c
index 0305753..58533c2 100644
--- a/source/blender/blenkernel/intern/collection.c
+++ b/source/blender/blenkernel/intern/collection.c
@@ -319,36 +319,53 @@ void BKE_scene_objects_Iterator_begin(Iterator *iter, 
void *data_in)
iter->current = sc->objects.first;
 }
 
+/* gets the next unique object */
+static LinkData *object_base_next(GSet *gs, LinkData *link)
+{
+   if (link == NULL) {
+   return NULL;
+   }
+
+   LinkData *link_next = link->next;
+   if (link_next) {
+   Object *ob = link_next->data;
+   if (!BLI_gset_haskey(gs, ob)) {
+   BLI_gset_add(gs, ob);
+   return link_next;
+   }
+   else {
+   return object_base_next(gs, link_next);
+   }
+   }
+   return NULL;
+}
+
 void BKE_scene_objects_Iterator_next(Iterator *iter)
 {
SceneObjectsIteratorData *data = iter->data;
+   LinkData *link = object_base_next(data->visited, data->link);
 
-   if (data->link->next) {
-   data->link = data->link->next;
-   iter->current = data->link->data;
+   if (link) {
+   data->link = link;
+   iter->current = link->data;
}
else {
-   //TODO redo logic
-   while (data->scene_collection_iter.valid) {
+   do {
+   
BKE_scene_collections_Iterator_next(>scene_collection_iter);
SceneCollection *sc = 
data->scene_collection_iter.current;
-   if (sc->objects.first) {
-   data->link = sc->objects.first;
+   /* get the first unique object of this collection */
+   LinkData *new_link = object_base_next(data->visited, 
sc->objects.first);
+   if (new_link) {
+   data->link = new_link;
iter->current = data->link->data;
break;
}
-   
BKE_scene_collections_Iterator_next(>scene_collection_iter);
-   }
+   } while (data->scene_collection_iter.valid);
 
if (!data->scene_collection_iter.valid) {
iter->valid = false;
}
}
-
-#if 0 // TODO
-   if (!BLI_gset_haskey(visited, ob)) {  \
-   BLI_gset_add(visited, ob);
-   }
-#endif
 }
 
 void BKE_scene_objects_Iterator_end(Iterator *iter)

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [29961ad] render-layers: From review: blo_do_versions_280_after_linking > blo_do_versions_after_linking_280

2016-12-19 Thread Dalai Felinto
Commit: 29961ad597ce24be8c522587fa9362f84f6730fc
Author: Dalai Felinto
Date:   Fri Dec 16 15:51:17 2016 +0100
Branches: render-layers
https://developer.blender.org/rB29961ad597ce24be8c522587fa9362f84f6730fc

>From review: blo_do_versions_280_after_linking > 
>blo_do_versions_after_linking_280

===

M   source/blender/blenloader/intern/readfile.c
M   source/blender/blenloader/intern/readfile.h
M   source/blender/blenloader/intern/versioning_280.c

===

diff --git a/source/blender/blenloader/intern/readfile.c 
b/source/blender/blenloader/intern/readfile.c
index 2b14b04..c63dcd3 100644
--- a/source/blender/blenloader/intern/readfile.c
+++ b/source/blender/blenloader/intern/readfile.c
@@ -8047,7 +8047,7 @@ static void do_versions(FileData *fd, Library *lib, Main 
*main)
 
 static void do_versions_after_linking(FileData *fd, Library *lib, Main *main)
 {
-   blo_do_versions_280_after_linking(fd, lib, main);
+   blo_do_versions_after_linking_280(fd, lib, main);
 }
 
 static void lib_link_all(FileData *fd, Main *main)
diff --git a/source/blender/blenloader/intern/readfile.h 
b/source/blender/blenloader/intern/readfile.h
index 796a514..daa49d0 100644
--- a/source/blender/blenloader/intern/readfile.h
+++ b/source/blender/blenloader/intern/readfile.h
@@ -172,7 +172,7 @@ void blo_do_versions_250(struct FileData *fd, struct 
Library *lib, struct Main *
 void blo_do_versions_260(struct FileData *fd, struct Library *lib, struct Main 
*main);
 void blo_do_versions_270(struct FileData *fd, struct Library *lib, struct Main 
*main);
 void blo_do_versions_280(struct FileData *fd, struct Library *lib, struct Main 
*main);
-void blo_do_versions_280_after_linking(struct FileData *fd, struct Library 
*lib, struct Main *main);
+void blo_do_versions_after_linking_280(struct FileData *fd, struct Library 
*lib, struct Main *main);
 
 #endif
 
diff --git a/source/blender/blenloader/intern/versioning_280.c 
b/source/blender/blenloader/intern/versioning_280.c
index ae39173..1835801 100644
--- a/source/blender/blenloader/intern/versioning_280.c
+++ b/source/blender/blenloader/intern/versioning_280.c
@@ -46,7 +46,7 @@
 
 #include "MEM_guardedalloc.h"
 
-void blo_do_versions_280_after_linking(FileData *fd, Library *UNUSED(lib), 
Main *main)
+void blo_do_versions_after_linking_280(FileData *fd, Library *UNUSED(lib), 
Main *main)
 {
if (!MAIN_VERSION_ATLEAST(main, 280, 0)) {
if (!DNA_struct_elem_find(fd->filesdna, "Scene", "ListBase", 
"render_layers")) {

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [a3fd427] render-layers: From review: curly brackets reinforcement

2016-12-19 Thread Dalai Felinto
Commit: a3fd4274cf20341c7ab6ed38f3e62adb6d83892d
Author: Dalai Felinto
Date:   Fri Dec 16 16:04:47 2016 +0100
Branches: render-layers
https://developer.blender.org/rBa3fd4274cf20341c7ab6ed38f3e62adb6d83892d

>From review: curly brackets reinforcement

(even though the other related functions are not following this rule ... How I 
miss a code refactor dev!)

===

M   source/blender/blenkernel/intern/context.c

===

diff --git a/source/blender/blenkernel/intern/context.c 
b/source/blender/blenkernel/intern/context.c
index c9454f8..3e9505e 100644
--- a/source/blender/blenkernel/intern/context.c
+++ b/source/blender/blenkernel/intern/context.c
@@ -903,10 +903,12 @@ SceneLayer *CTX_data_scene_layer(const bContext *C)
 {
SceneLayer *sl;
 
-   if (ctx_data_pointer_verify(C, "render_layer", (void *)))
+   if (ctx_data_pointer_verify(C, "render_layer", (void *))) {
return sl;
-   else
+   }
+   else {
return C->data.render_layer;
+   }
 }
 
 int CTX_data_mode_enum(const bContext *C)

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [60aa0b5] render-layers: Reworked logic of iterators

2016-12-19 Thread Dalai Felinto
Commit: 60aa0b5b155aad774f85bdd6bc5d497157d568cb
Author: Dalai Felinto
Date:   Mon Dec 19 17:52:09 2016 +0100
Branches: render-layers
https://developer.blender.org/rB60aa0b5b155aad774f85bdd6bc5d497157d568cb

Reworked logic of iterators

otherwise I could not get different iterators based on a flag (SELECT), which 
is used everywhere in object_relations.c
The alternative would be to split every function in object_relations.c into 
_all, and _selected

===

M   source/blender/blenkernel/BKE_collection.h
M   source/blender/blenkernel/BKE_layer.h
M   source/blender/blenkernel/intern/collection.c
M   source/blender/blenkernel/intern/layer.c
M   source/blender/blenlib/BLI_iterator.h
M   source/blender/blenlib/CMakeLists.txt
D   source/blender/blenlib/intern/BLI_iterator.c
M   source/blender/editors/object/object_relations.c

===

diff --git a/source/blender/blenkernel/BKE_collection.h 
b/source/blender/blenkernel/BKE_collection.h
index 3185f82..2b037f5 100644
--- a/source/blender/blenkernel/BKE_collection.h
+++ b/source/blender/blenkernel/BKE_collection.h
@@ -38,6 +38,7 @@ extern "C" {
 struct Iterator;
 struct SceneCollection;
 struct Object;
+struct ObjectBase;
 struct Scene;
 
 struct SceneCollection *BKE_collection_add(struct Scene *scene, struct 
SceneCollection *sc_parent, const char *name);
@@ -54,8 +55,13 @@ void BKE_scene_collections_callback(struct Scene *scene, 
BKE_scene_collections_C
 void BKE_scene_objects_callback(struct Scene *scene, BKE_scene_objects_Cb 
callback, void *data);
 
 /* iterators */
-void BKE_scene_objects_Iterator_begin(struct Iterator *iter, void *data);
-void BKE_scene_collections_Iterator_begin(struct Iterator *iter, void *data);
+void BKE_scene_collections_Iterator_begin(struct Iterator *iter, void 
*data_in);
+void BKE_scene_collections_Iterator_next(struct Iterator *iter);
+void BKE_scene_collections_Iterator_end(struct Iterator *iter);
+
+void BKE_scene_objects_Iterator_begin(struct Iterator *iter, void *data_in);
+void BKE_scene_objects_Iterator_next(struct Iterator *iter);
+void BKE_scene_objects_Iterator_end(struct Iterator *iter);
 
 typedef struct SceneCollectionIterData {
struct SceneCollection *sc;
@@ -63,27 +69,22 @@ typedef struct SceneCollectionIterData {
 } SceneCollectionIterData;
 
 #define FOREACH_SCENE_COLLECTION(scene, _sc)  \
-   ITER_BEGIN(BKE_scene_collections_Iterator_begin, scene, _sc)
+   ITER_BEGIN(BKE_scene_collections_Iterator_begin,
  \
+  BKE_scene_collections_Iterator_next, 
  \
+  BKE_scene_collections_Iterator_end,  
  \
+  scene, _sc)
 
 #define FOREACH_SCENE_COLLECTION_END  \
ITER_END
 
 #define FOREACH_SCENE_OBJECT(scene, _ob)  \
-{ \
-   GSet *visited = BLI_gset_ptr_new(__func__); 
  \
-   SceneCollection *sc;
  \
-   FOREACH_SCENE_COLLECTION(scene, sc) 
  \
-   for (LinkData *link = sc->objects.first; link; link = link->next) { 
  \
-   _ob = link->data;   
  \
-   if (!BLI_gset_haskey(visited, ob)) {
  \
-   BLI_gset_add(visited, ob);
+   ITER_BEGIN(BKE_scene_objects_Iterator_begin,
  \
+   BKE_scene_objects_Iterator_next,
  \
+   BKE_scene_objects_Iterator_end, 
  \
+   scene, _ob)
 
 #define FOREACH_SCENE_OBJECT_END  \
-} \
-} \
-   FOREACH_SCENE_COLLECTION_END
  \
-   BLI_gset_free(visited, NULL);   
  \
-}
+   ITER_END
 
 #ifdef __cplusplus
 }
diff --git a/source/blender/blenkernel/BKE_layer.h 
b/source/blender/blenkernel/BKE_layer.h
index acfad81..090ab34 100644
--- a/source/blender/blenkernel/BKE_layer.h
+++ b/source/blender/blenkernel/BKE_layer.h
@@ -27,6 +27,8 @@
  *  \ingroup bke
  */
 
+#include "BKE_collection.h"
+
 #ifdef __cplusplus
 extern "C" {
 #endif
@@ -72,6 +74,45 @@ void BKE_collection_unlink(struct SceneLayer *sl, struct 
LayerCollection *lc);
 
 void BKE_collection_override_datablock_add(struct LayerCollection *lc, const 
char *data_path, struct ID *id);
 
+/* iterators */
+
+void 

[Bf-blender-cvs] [57a5f2e] render-layers: Iterator util function

2016-12-19 Thread Dalai Felinto
Commit: 57a5f2ef443d79d4394cf028a422392f1b7c1515
Author: Dalai Felinto
Date:   Fri Dec 16 18:22:05 2016 +0100
Branches: render-layers
https://developer.blender.org/rB57a5f2ef443d79d4394cf028a422392f1b7c1515

Iterator util function

===

M   source/blender/blenkernel/BKE_collection.h
M   source/blender/blenkernel/intern/collection.c
M   source/blender/blenkernel/intern/library_query.c
A   source/blender/blenlib/BLI_iterator.h
M   source/blender/blenlib/CMakeLists.txt
A   source/blender/blenlib/intern/BLI_iterator.c
M   source/blender/editors/object/object_relations.c

===

diff --git a/source/blender/blenkernel/BKE_collection.h 
b/source/blender/blenkernel/BKE_collection.h
index 0d3f190..61d53da 100644
--- a/source/blender/blenkernel/BKE_collection.h
+++ b/source/blender/blenkernel/BKE_collection.h
@@ -27,10 +27,13 @@
  *  \ingroup bke
  */
 
+#include "BLI_iterator.h"
+
 #ifdef __cplusplus
 extern "C" {
 #endif
 
+struct Iterator;
 struct SceneCollection;
 struct Object;
 struct Scene;
@@ -45,6 +48,15 @@ void BKE_collection_object_remove(struct Scene *scene, 
struct SceneCollection *s
 typedef void (*BKE_scene_objects_Cb)(struct Object *ob, void *data);
 void BKE_scene_objects_callback(struct Scene *scene, BKE_scene_objects_Cb 
callback, void *data);
 
+/* iterators */
+void BKE_scene_objects_Iterator_begin(struct Iterator *iter, void *data);
+
+#define SCENE_OBJECTS_BEGIN(scene, _ob)   \
+   ITER_BEGIN(BKE_scene_objects_Iterator_begin, scene, _ob)
+
+#define SCENE_OBJECTS_END \
+   ITER_END
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/source/blender/blenkernel/intern/collection.c 
b/source/blender/blenkernel/intern/collection.c
index 4562583..8a7393b 100644
--- a/source/blender/blenkernel/intern/collection.c
+++ b/source/blender/blenkernel/intern/collection.c
@@ -25,6 +25,7 @@
  */
 
 #include "BLI_blenlib.h"
+#include "BLI_iterator.h"
 #include "BLI_listbase.h"
 #include "BLT_translation.h"
 
@@ -248,3 +249,52 @@ void BKE_scene_objects_callback(Scene *scene, 
BKE_scene_objects_Cb callback, voi
collection_objects_callback(sc, object_tag_clear, NULL);
collection_objects_callback(sc, callback, data);
 }
+
+
+/* -- */
+/* Iteractors */
+
+/* sequence strip iterator:
+ * - builds a full array, recursively into meta strips
+ */
+
+static void scene_objects_count(Object *UNUSED(ob), void *data)
+{
+   int *tot = data;
+   (*tot)++;
+}
+
+static void scene_objects_build_array(Object *ob, void *data)
+{
+   Object ***array = data;
+   **array = ob;
+   (*array)++;
+}
+
+static void scene_objects_array(Scene *scene, Object ***objects_array, int 
*tot)
+{
+   Object **array;
+
+   *objects_array = NULL;
+   *tot = 0;
+
+   if (scene == NULL)
+   return;
+
+   BKE_scene_objects_callback(scene, scene_objects_count, tot);
+
+   if (*tot == 0)
+   return;
+
+   *objects_array = array = MEM_mallocN(sizeof(Object *) * (*tot), 
"ObjectsArray");
+   BKE_scene_objects_callback(scene, scene_objects_build_array, );
+}
+
+/*
+ * Only use this in non-performance critical situations
+ * (it iterates over all scene collections twice)
+ */
+void BKE_scene_objects_Iterator_begin(Iterator *iter, void *data)
+{
+   scene_objects_array(data, (Object ***)>array, >tot);
+}
diff --git a/source/blender/blenkernel/intern/library_query.c 
b/source/blender/blenkernel/intern/library_query.c
index a161d9c..1601348 100644
--- a/source/blender/blenkernel/intern/library_query.c
+++ b/source/blender/blenkernel/intern/library_query.c
@@ -68,6 +68,7 @@
 #include "BLI_linklist_stack.h"
 
 #include "BKE_animsys.h"
+#include "BKE_collection.h"
 #include "BKE_constraint.h"
 #include "BKE_fcurve.h"
 #include "BKE_library.h"
@@ -385,6 +386,15 @@ void BKE_library_foreach_ID_link(ID *id, 
LibraryIDLinkCallback callback, void *u
CALLBACK_INVOKE(base->object, 
IDWALK_USER);
}
 
+   {
+   Object* ob;
+   SCENE_OBJECTS_BEGIN(scene, ob)
+   {
+   CALLBACK_INVOKE(ob, 
IDWALK_USER);
+   }
+   SCENE_OBJECTS_END
+   }
+
for (TimeMarker *marker = scene->markers.first; 
marker; marker = marker->next) {
CALLBACK_INVOKE(marker->camera, 
IDWALK_NOP);
}
diff --git a/source/blender/blenlib/BLI_iterator.h 

[Bf-blender-cvs] [d4cebc9] render-layers: Use FOREACH_OBJECT_FLAG in more places

2016-12-19 Thread Dalai Felinto
Commit: d4cebc998bb7679ed8c35e6ae220695f3421d311
Author: Dalai Felinto
Date:   Mon Dec 19 17:57:45 2016 +0100
Branches: render-layers
https://developer.blender.org/rBd4cebc998bb7679ed8c35e6ae220695f3421d311

Use FOREACH_OBJECT_FLAG in more places

===

M   source/blender/editors/object/object_relations.c

===

diff --git a/source/blender/editors/object/object_relations.c 
b/source/blender/editors/object/object_relations.c
index a03f121..bd4c07d 100644
--- a/source/blender/editors/object/object_relations.c
+++ b/source/blender/editors/object/object_relations.c
@@ -1978,27 +1978,25 @@ static void single_obdata_users(Main *bmain, Scene 
*scene, const int flag)
}
 }
 
-static void single_object_action_users(Scene *scene, const int flag)
+static void single_object_action_users(Scene *scene, SceneLayer *sl, const int 
flag)
 {
Object *ob;
-   Base *base;
 
-   for (base = FIRSTBASE; base; base = base->next) {
-   ob = base->object;
-   if (!ID_IS_LINKED_DATABLOCK(ob) && (flag == 0 || (base->flag & 
SELECT)) ) {
+   FOREACH_OBJECT_FLAG(scene, sl, flag, ob)
+   if (!ID_IS_LINKED_DATABLOCK(ob)) {
DAG_id_tag_update(>id, OB_RECALC_DATA);
BKE_animdata_copy_id_action(>id, false);
}
-   }
+   FOREACH_OBJECT_FLAG_END
 }
 
 static void single_mat_users(Main *bmain, Scene *scene, SceneLayer *sl, const 
int flag, const bool do_textures)
 {
-   Object *ob;
Material *ma, *man;
Tex *tex;
int a, b;
 
+   Object *ob;
FOREACH_OBJECT_FLAG(scene, sl, flag, ob)
if (!ID_IS_LINKED_DATABLOCK(ob)) {
for (a = 1; a <= ob->totcol; a++) {
@@ -2133,7 +2131,7 @@ void ED_object_single_users(Main *bmain, Scene *scene, 
const bool full, const bo
 
if (full) {
single_obdata_users(bmain, scene, 0);
-   single_object_action_users(scene, 0);
+   single_object_action_users(scene, NULL, 0);
single_mat_users_expand(bmain);
single_tex_users_expand(bmain);
}
@@ -2431,7 +2429,7 @@ static int make_single_user_exec(bContext *C, wmOperator 
*op)
single_mat_users(scene, flag, true);
 #endif
if (RNA_boolean_get(op->ptr, "animation")) {
-   single_object_action_users(scene, flag);
+   single_object_action_users(scene, sl, flag);
}
 
BKE_main_id_clear_newpoins(bmain);

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [f59b6ff] render-layers: Using an iterator to go over objects, and use this for library_query

2016-12-19 Thread Dalai Felinto
Commit: f59b6ff4108f66e066ba85d15bc2c8c59913b643
Author: Dalai Felinto
Date:   Mon Dec 19 14:07:21 2016 +0100
Branches: render-layers
https://developer.blender.org/rBf59b6ff4108f66e066ba85d15bc2c8c59913b643

Using an iterator to go over objects, and use this for library_query

This is not the ideal iterator (it loops over the scene collection tree 3x).
One solution (I want to discuss with Bastien Montagne @mont29) is whether to 
store the *parent of a SceneCollection to help with that. That would speed 
things up, and cost less memory.

We do not even need to store it in the file, since it can be re-generated at 
read time

===

M   source/blender/blenkernel/BKE_collection.h
M   source/blender/blenkernel/intern/collection.c
M   source/blender/blenkernel/intern/library_query.c
M   source/blender/blenlib/BLI_ghash.h
M   source/blender/editors/object/object_relations.c

===

diff --git a/source/blender/blenkernel/BKE_collection.h 
b/source/blender/blenkernel/BKE_collection.h
index 61d53da..3185f82 100644
--- a/source/blender/blenkernel/BKE_collection.h
+++ b/source/blender/blenkernel/BKE_collection.h
@@ -27,7 +27,9 @@
  *  \ingroup bke
  */
 
+#include "BLI_ghash.h"
 #include "BLI_iterator.h"
+#include "DNA_listBase.h"
 
 #ifdef __cplusplus
 extern "C" {
@@ -46,17 +48,43 @@ void BKE_collection_object_add(struct Scene *scene, struct 
SceneCollection *sc,
 void BKE_collection_object_remove(struct Scene *scene, struct SceneCollection 
*sc, struct Object *object);
 
 typedef void (*BKE_scene_objects_Cb)(struct Object *ob, void *data);
+typedef void (*BKE_scene_collections_Cb)(struct SceneCollection *ob, void 
*data);
+
+void BKE_scene_collections_callback(struct Scene *scene, 
BKE_scene_collections_Cb callback, void *data);
 void BKE_scene_objects_callback(struct Scene *scene, BKE_scene_objects_Cb 
callback, void *data);
 
 /* iterators */
 void BKE_scene_objects_Iterator_begin(struct Iterator *iter, void *data);
+void BKE_scene_collections_Iterator_begin(struct Iterator *iter, void *data);
+
+typedef struct SceneCollectionIterData {
+   struct SceneCollection *sc;
+   struct SceneCollectionIterData *parent;
+} SceneCollectionIterData;
 
-#define SCENE_OBJECTS_BEGIN(scene, _ob)   \
-   ITER_BEGIN(BKE_scene_objects_Iterator_begin, scene, _ob)
+#define FOREACH_SCENE_COLLECTION(scene, _sc)  \
+   ITER_BEGIN(BKE_scene_collections_Iterator_begin, scene, _sc)
 
-#define SCENE_OBJECTS_END \
+#define FOREACH_SCENE_COLLECTION_END  \
ITER_END
 
+#define FOREACH_SCENE_OBJECT(scene, _ob)  \
+{ \
+   GSet *visited = BLI_gset_ptr_new(__func__); 
  \
+   SceneCollection *sc;
  \
+   FOREACH_SCENE_COLLECTION(scene, sc) 
  \
+   for (LinkData *link = sc->objects.first; link; link = link->next) { 
  \
+   _ob = link->data;   
  \
+   if (!BLI_gset_haskey(visited, ob)) {
  \
+   BLI_gset_add(visited, ob);
+
+#define FOREACH_SCENE_OBJECT_END  \
+} \
+} \
+   FOREACH_SCENE_COLLECTION_END
  \
+   BLI_gset_free(visited, NULL);   
  \
+}
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/source/blender/blenkernel/intern/collection.c 
b/source/blender/blenkernel/intern/collection.c
index 8a7393b..81d8d26 100644
--- a/source/blender/blenkernel/intern/collection.c
+++ b/source/blender/blenkernel/intern/collection.c
@@ -25,6 +25,7 @@
  */
 
 #include "BLI_blenlib.h"
+#include "BLI_ghash.h"
 #include "BLI_iterator.h"
 #include "BLI_listbase.h"
 #include "BLT_translation.h"
@@ -199,102 +200,56 @@ void BKE_collection_object_remove(struct Scene 
*UNUSED(scene), struct SceneColle
 * also remove all reference to ob in the filter_objects */
 }
 
-/*
- * Tag util functions to make sure the same object is not called twice
- */
-
-static void object_tag(Object *ob)
-{
-   ob->flag |= BA_TEMP_TAG;
-}
-
-static void object_tag_clear(Object *ob, void *UNUSED(data))
-{
-   ob->flag &= ~BA_TEMP_TAG;
-}
-
-static bool object_tag_test(Object *ob)
-{
-   return (ob->flag & BA_TEMP_TAG) != 0;
-}
+/* -- */
+/* Iteractors 

[Bf-blender-cvs] [75b7a25] render-layers: From review: do_versions_after_linking skipped on undo

2016-12-19 Thread Dalai Felinto
Commit: 75b7a25014ca1896515af32abcccbb26a59edf74
Author: Dalai Felinto
Date:   Fri Dec 16 15:53:23 2016 +0100
Branches: render-layers
https://developer.blender.org/rB75b7a25014ca1896515af32abcccbb26a59edf74

>From review: do_versions_after_linking skipped on undo

===

M   source/blender/blenloader/intern/readfile.c

===

diff --git a/source/blender/blenloader/intern/readfile.c 
b/source/blender/blenloader/intern/readfile.c
index c63dcd3..bd0ef05 100644
--- a/source/blender/blenloader/intern/readfile.c
+++ b/source/blender/blenloader/intern/readfile.c
@@ -8248,7 +8248,12 @@ BlendFileData *blo_read_file_internal(FileData *fd, 
const char *filepath)
blo_join_main();

lib_link_all(fd, bfd->main);
-   do_versions_after_linking(fd, NULL, bfd->main);
+
+   /* skip undo case */
+   if (fd->memfile == NULL) {
+   do_versions_after_linking(fd, NULL, bfd->main);
+   }
+
lib_verify_nodetree(bfd->main, true);
fix_relpaths_library(fd->relabase, bfd->main); /* make all relative 
paths, relative to the open blend file */

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [0da8957] render-layers: From review: move nodetree syncing of layers to util function

2016-12-19 Thread Dalai Felinto
Commit: 0da8957bc59bd06afc416e24ebe1d0597751fd32
Author: Dalai Felinto
Date:   Fri Dec 16 16:03:00 2016 +0100
Branches: render-layers
https://developer.blender.org/rB0da8957bc59bd06afc416e24ebe1d0597751fd32

>From review: move nodetree syncing of layers to util function

===

M   source/blender/blenkernel/BKE_node.h
M   source/blender/blenkernel/intern/layer.c
M   source/blender/blenkernel/intern/node.c
M   source/blender/blenkernel/intern/scene.c

===

diff --git a/source/blender/blenkernel/BKE_node.h 
b/source/blender/blenkernel/BKE_node.h
index 546f0d9..d23766b 100644
--- a/source/blender/blenkernel/BKE_node.h
+++ b/source/blender/blenkernel/BKE_node.h
@@ -687,6 +687,15 @@ bool BKE_node_tree_iter_step(struct NodeTreeIterStore 
*ntreeiter,
 }
 /** \} */
 
+
+/*  */
+/** \name Node Tree
+ */
+
+void BKE_nodetree_remove_layer_n(struct bNodeTree *ntree, struct Scene *scene, 
const int layer_index);
+
+/** \} */
+
 /*  */
 /** \name Shader Nodes
  */
diff --git a/source/blender/blenkernel/intern/layer.c 
b/source/blender/blenkernel/intern/layer.c
index a1d1e96..5f4aadf 100644
--- a/source/blender/blenkernel/intern/layer.c
+++ b/source/blender/blenkernel/intern/layer.c
@@ -90,15 +90,7 @@ bool BKE_scene_layer_remove(Main *bmain, Scene *scene, 
SceneLayer *sl)
 
for (Scene *sce = bmain->scene.first; sce; sce = sce->id.next) {
if (sce->nodetree) {
-   bNode *node;
-   for (node = sce->nodetree->nodes.first; node; node = 
node->next) {
-   if (node->type == CMP_NODE_R_LAYERS && (Scene 
*)node->id == scene) {
-   if (node->custom1 == act)
-   node->custom1 = 0;
-   else if (node->custom1 > act)
-   node->custom1--;
-   }
-   }
+   BKE_nodetree_remove_layer_n(sce->nodetree, scene, act);
}
}
 
diff --git a/source/blender/blenkernel/intern/node.c 
b/source/blender/blenkernel/intern/node.c
index f16e8f3..cb3bc39 100644
--- a/source/blender/blenkernel/intern/node.c
+++ b/source/blender/blenkernel/intern/node.c
@@ -3775,3 +3775,20 @@ bool BKE_node_tree_iter_step(struct NodeTreeIterStore 
*ntreeiter,
 
return true;
 }
+
+/*  */
+/* NodeTree kernel functions */
+
+void BKE_nodetree_remove_layer_n(bNodeTree *ntree, Scene *scene, const int 
layer_index)
+{
+   for (bNode *node = ntree->nodes.first; node; node = node->next) {
+   if (node->type == CMP_NODE_R_LAYERS && (Scene *)node->id == 
scene) {
+   if (node->custom1 == layer_index) {
+   node->custom1 = 0;
+   }
+   else if (node->custom1 > layer_index) {
+   node->custom1--;
+   }
+   }
+   }
+}
diff --git a/source/blender/blenkernel/intern/scene.c 
b/source/blender/blenkernel/intern/scene.c
index e634fea..d850798 100644
--- a/source/blender/blenkernel/intern/scene.c
+++ b/source/blender/blenkernel/intern/scene.c
@@ -2131,15 +2131,7 @@ bool BKE_scene_remove_render_layer(Main *bmain, Scene 
*scene, SceneRenderLayer *
 
for (sce = bmain->scene.first; sce; sce = sce->id.next) {
if (sce->nodetree) {
-   bNode *node;
-   for (node = sce->nodetree->nodes.first; node; node = 
node->next) {
-   if (node->type == CMP_NODE_R_LAYERS && (Scene 
*)node->id == scene) {
-   if (node->custom1 == act)
-   node->custom1 = 0;
-   else if (node->custom1 > act)
-   node->custom1--;
-   }
-   }
+   BKE_nodetree_remove_layer_n(sce->nodetree, scene, act);
}
}

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [3f9432b] render-layers: From review: use typedef for callbacks

2016-12-19 Thread Dalai Felinto
Commit: 3f9432b76ac98ae2c86cce1fa3ad043a3d6b0b71
Author: Dalai Felinto
Date:   Fri Dec 16 15:50:08 2016 +0100
Branches: render-layers
https://developer.blender.org/rB3f9432b76ac98ae2c86cce1fa3ad043a3d6b0b71

>From review: use typedef for callbacks

===

M   source/blender/blenkernel/BKE_collection.h
M   source/blender/blenkernel/intern/collection.c

===

diff --git a/source/blender/blenkernel/BKE_collection.h 
b/source/blender/blenkernel/BKE_collection.h
index 846f7f1..0d3f190 100644
--- a/source/blender/blenkernel/BKE_collection.h
+++ b/source/blender/blenkernel/BKE_collection.h
@@ -41,7 +41,9 @@ struct SceneCollection *BKE_collection_master(struct Scene 
*scene);
 void BKE_collection_master_free(struct Scene *scene);
 void BKE_collection_object_add(struct Scene *scene, struct SceneCollection 
*sc, struct Object *object);
 void BKE_collection_object_remove(struct Scene *scene, struct SceneCollection 
*sc, struct Object *object);
-void BKE_scene_objects_callback(struct Scene *scene, void (*callback)(struct 
Object *_ob, void *_data), void *data);
+
+typedef void (*BKE_scene_objects_Cb)(struct Object *ob, void *data);
+void BKE_scene_objects_callback(struct Scene *scene, BKE_scene_objects_Cb 
callback, void *data);
 
 #ifdef __cplusplus
 }
diff --git a/source/blender/blenkernel/intern/collection.c 
b/source/blender/blenkernel/intern/collection.c
index 1f19330..4562583 100644
--- a/source/blender/blenkernel/intern/collection.c
+++ b/source/blender/blenkernel/intern/collection.c
@@ -220,7 +220,7 @@ static bool object_tag_test(Object *ob)
 /*
  * Recursively calls the callback function for the objects in a SceneCollection
  */
-static void collection_objects_callback(SceneCollection *sc, void 
(*callback)(struct Object *_ob, void *_data), void *data)
+static void collection_objects_callback(SceneCollection *sc, 
BKE_scene_objects_Cb callback, void *data)
 {
for (LinkData *link= sc->objects.first; link; link = link->next) {
if (object_tag_test(link->data)) {
@@ -242,7 +242,7 @@ static void collection_objects_callback(SceneCollection 
*sc, void (*callback)(st
  * Recursively calls the callback function for the objects in a Scene
  * The same object
  */
-void BKE_scene_objects_callback(Scene *scene, void (*callback)(struct Object 
*_ob, void *_data), void *data)
+void BKE_scene_objects_callback(Scene *scene, BKE_scene_objects_Cb callback, 
void *data)
 {
SceneCollection *sc = BKE_collection_master(scene);
collection_objects_callback(sc, object_tag_clear, NULL);

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [59fbc6d] render-layers: Merge remote-tracking branch 'origin/blender2.8' into render-layers

2016-12-19 Thread Dalai Felinto
Commit: 59fbc6db8d4e9f380500d528c31f8360c05b16f1
Author: Dalai Felinto
Date:   Fri Dec 16 14:46:17 2016 +0100
Branches: render-layers
https://developer.blender.org/rB59fbc6db8d4e9f380500d528c31f8360c05b16f1

Merge remote-tracking branch 'origin/blender2.8' into render-layers

===



===



___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [bd42987] master: Fix (unreported) linked datablocks going through do_versions several times.

2016-12-19 Thread Bastien Montagne
Commit: bd42987399f1e2decf259cce21a91e39c7a0a50d
Author: Bastien Montagne
Date:   Mon Dec 19 16:28:41 2016 +0100
Branches: master
https://developer.blender.org/rBbd42987399f1e2decf259cce21a91e39c7a0a50d

Fix (unreported) linked datablocks going through do_versions several times.

When linking data-blocks from same library in several steps, the already
linked data-blocks of same lib would go again through versionning code...

Note: only fixed for libraries, I can't imagine how this could happen
with local data...

===

M   source/blender/blenloader/intern/readfile.c
M   source/blender/makesdna/DNA_ID.h

===

diff --git a/source/blender/blenloader/intern/readfile.c 
b/source/blender/blenloader/intern/readfile.c
index 03c5d08..a154d28 100644
--- a/source/blender/blenloader/intern/readfile.c
+++ b/source/blender/blenloader/intern/readfile.c
@@ -8112,7 +8112,10 @@ static BHead *read_libblock(FileData *fd, Main *main, 
BHead *bhead, const short
if (bhead->code == ID_ID) {
return blo_nextbhead(fd, bhead);
}
-   
+
+   /* That way, we know which datablock needs do_versions (required 
currently for linking). */
+   id->tag |= LIB_TAG_NEW;
+
/* need a name for the mallocN, just for debugging and sane prints on 
leaks */
allocname = dataname(GS(id->name));

@@ -8578,7 +8581,10 @@ BlendFileData *blo_read_file_internal(FileData *fd, 
const char *filepath)
blo_join_main();

lib_link_all(fd, bfd->main);
+
//do_versions_after_linking(fd, NULL, bfd->main); // XXX: not here (or 
even in this function at all)! this causes crashes on many files - Aligorith 
(July 04, 2010)
+   BKE_main_id_tag_all(bfd->main, LIB_TAG_NEW, false);
+
lib_verify_nodetree(bfd->main, true);
fix_relpaths_library(fd->relabase, bfd->main); /* make all relative 
paths, relative to the open blend file */

@@ -10142,6 +10148,9 @@ static void library_link_end(Main *mainl, FileData 
**fd, const short flag, Scene
mainl = NULL; /* blo_join_main free's mainl, cant use anymore */
 
lib_link_all(*fd, mainvar);
+
+   BKE_main_id_tag_all(mainvar, LIB_TAG_NEW, false);
+
lib_verify_nodetree(mainvar, false);
fix_relpaths_library(G.main->name, mainvar); /* make all relative 
paths, relative to the open blend file */
 
@@ -10212,6 +10221,32 @@ static int mainvar_id_tag_any_check(Main *mainvar, 
const short tag)
return false;
 }
 
+static void split_main_newid(Main *mainptr, Main *main_newid)
+{
+   /* We only copy the necessary subset of data in this temp main. */
+   main_newid->versionfile = mainptr->versionfile;
+   main_newid->subversionfile = mainptr->subversionfile;
+   BLI_strncpy(main_newid->name, mainptr->name, sizeof(main_newid->name));
+   main_newid->curlib = mainptr->curlib;
+
+   ListBase *lbarray[MAX_LIBARRAY];
+   ListBase *lbarray_newid[MAX_LIBARRAY];
+   int i = set_listbasepointers(mainptr, lbarray);
+   set_listbasepointers(main_newid, lbarray_newid);
+   while (i--) {
+   BLI_listbase_clear(lbarray_newid[i]);
+
+   for (ID *id = lbarray[i]->first, *idnext; id; id = idnext) {
+   idnext = id->next;
+
+   if (id->tag & LIB_TAG_NEW) {
+   BLI_remlink(lbarray[i], id);
+   BLI_addtail(lbarray_newid[i], id);
+   }
+   }
+   }
+}
+
 static void read_libraries(FileData *basefd, ListBase *mainlist)
 {
Main *mainl = mainlist->first;
@@ -10381,14 +10416,19 @@ static void read_libraries(FileData *basefd, ListBase 
*mainlist)
}

/* do versions, link, and free */
+   Main main_newid = {0};
for (mainptr = mainl->next; mainptr; mainptr = mainptr->next) {
-   /* some mains still have to be read, then
-* versionfile is still zero! */
+   /* some mains still have to be read, then versionfile is still 
zero! */
if (mainptr->versionfile) {
+   /* We need to split out IDs already existing, or they 
will go again through do_versions - bad, very bad! */
+   split_main_newid(mainptr, _newid);
+
if (mainptr->curlib->filedata) // can be zero... with 
shift+f1 append
-   do_versions(mainptr->curlib->filedata, 
mainptr->curlib, mainptr);
+   do_versions(mainptr->curlib->filedata, 
mainptr->curlib, _newid);
else
-   do_versions(basefd, NULL, mainptr);
+   do_versions(basefd, NULL, _newid);
+
+   add_main_to_main(mainptr, _newid);
}

 

[Bf-blender-cvs] [e30d94b] master: Cleanup: rename paramenter to right name

2016-12-19 Thread Antonio Vazquez
Commit: e30d94bb3bdb333a514f0771e63ff2543c0a1969
Author: Antonio Vazquez
Date:   Mon Dec 19 12:28:51 2016 +0100
Branches: master
https://developer.blender.org/rBe30d94bb3bdb333a514f0771e63ff2543c0a1969

Cleanup: rename paramenter to right name

===

M   source/blender/blenkernel/BKE_gpencil.h

===

diff --git a/source/blender/blenkernel/BKE_gpencil.h 
b/source/blender/blenkernel/BKE_gpencil.h
index ab8b83f..3378f4a 100644
--- a/source/blender/blenkernel/BKE_gpencil.h
+++ b/source/blender/blenkernel/BKE_gpencil.h
@@ -104,7 +104,7 @@ void BKE_gpencil_layer_delete(struct bGPdata *gpd, struct 
bGPDlayer *gpl);
 
 struct bGPDbrush *BKE_gpencil_brush_getactive(struct ToolSettings *ts);
 void BKE_gpencil_brush_setactive(struct ToolSettings *ts, struct bGPDbrush 
*active);
-void BKE_gpencil_brush_delete(struct ToolSettings *ts, struct bGPDbrush 
*palette);
+void BKE_gpencil_brush_delete(struct ToolSettings *ts, struct bGPDbrush 
*brush);
 
 struct bGPDpalette *BKE_gpencil_palette_getactive(struct bGPdata *gpd);
 void BKE_gpencil_palette_setactive(struct bGPdata *gpd, struct bGPDpalette 
*active);

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs