Merge branch 'master' into blender2.8
authorBastien Montagne <montagne29@wanadoo.fr>
Wed, 5 Apr 2017 08:02:25 +0000 (10:02 +0200)
committerBastien Montagne <montagne29@wanadoo.fr>
Wed, 5 Apr 2017 08:02:25 +0000 (10:02 +0200)
Conflicts:
source/blender/alembic/intern/abc_exporter.h

1  2 
build_files/build_environment/install_deps.sh
source/blender/alembic/intern/abc_exporter.cc
source/blender/alembic/intern/abc_exporter.h
source/blender/alembic/intern/abc_util.cc
source/blender/alembic/intern/abc_util.h
source/blender/alembic/intern/alembic_capi.cc

index 80fee067c04301806fe45859a915adf738984d97,f9fde99acd47fc142c8d529e5ddc9584342e4a0a..cf2a3432da9b1c61934e78f159e98043464afe85
@@@ -43,7 -43,7 +45,8 @@@ struct ExportSettings 
        ExportSettings();
  
        Scene *scene;
 +      SceneLayer *sl;  // Scene layer to export; all its objects will be exported, unless selected_only=true
+       SimpleLogger logger;
  
        bool selected_only;
        bool visible_layers_only;
index ee8ec0fa68c91ad5f054babf955e0286388234e4,6c6f64e1669e2b49dbca4352134302920c1850f1..20bdeeb96a7ce8828da688deb95febbf0b7691bb
@@@ -331,14 -336,23 +336,30 @@@ void ABC_export
        job->bmain = CTX_data_main(C);
        BLI_strncpy(job->filename, filepath, 1024);
  
+       /* Alright, alright, alright....
+        *
+        * ExportJobData contains an ExportSettings containing a SimpleLogger.
+        *
+        * Since ExportJobData is a C-style struct dynamically allocated with
+        * MEM_mallocN (see above), its construtor is never called, therefore the
+        * ExportSettings constructor is not called which implies that the
+        * SimpleLogger one is not called either. SimpleLogger in turn does not call
+        * the constructor of its data members which ultimately means that its
+        * std::ostringstream member has a NULL pointer. To be able to properly use
+        * the stream's operator<<, the pointer needs to be set, therefore we have
+        * to properly construct everything. And this is done using the placement
+        * new operator as here below. It seems hackish, but I'm too lazy to
+        * do bigger refactor and maybe there is a better way which does not involve
+        * hardcore refactoring. */
+       new (&job->settings) ExportSettings();
        job->settings.scene = job->scene;
 +
 +      /* Sybren: for now we only export the active scene layer.
 +       * Later in the 2.8 development process this may be replaced by using
 +       * a specific collection for Alembic I/O, which can then be toggled
 +       * between "real" objects and cached Alembic files. */
 +      job->settings.sl = CTX_data_scene_layer(C);
 +
        job->settings.frame_start = params->frame_start;
        job->settings.frame_end = params->frame_end;
        job->settings.frame_step_xform = params->frame_step_xform;