Commit: aff4e02df2757fbc4e9cc3b8acef18a5bc8c75f7
Author: Lukas Tönne
Date:   Mon Mar 30 10:13:13 2015 +0200
Branches: alembic
https://developer.blender.org/rBaff4e02df2757fbc4e9cc3b8acef18a5bc8c75f7

Write out the complete dupli group in cache modifiers.

Theoretically we could write a stitcher that writes only the parts of
the data affected by a modifier and simply copies the rest, but this
is much more involved and not necessary at this point.

===================================================================

M       source/blender/blenkernel/BKE_cache_library.h
M       source/blender/blenkernel/intern/cache_library.c
M       source/blender/editors/io/io_cache_library.c
M       source/blender/makesdna/DNA_cache_library_types.h

===================================================================

diff --git a/source/blender/blenkernel/BKE_cache_library.h 
b/source/blender/blenkernel/BKE_cache_library.h
index 61ec8ac..0fdfadb 100644
--- a/source/blender/blenkernel/BKE_cache_library.h
+++ b/source/blender/blenkernel/BKE_cache_library.h
@@ -37,6 +37,7 @@
 struct ListBase;
 struct Main;
 struct bContext;
+struct Group;
 struct Object;
 struct Scene;
 struct EvaluationContext;
@@ -120,6 +121,7 @@ typedef struct CacheBakeContext {
        struct Main *bmain;
        struct Scene *scene;
        int startframe, endframe;
+       struct Group *group;
        
        short *stop;
        short *do_update;
@@ -195,6 +197,6 @@ struct CacheModifier *BKE_cache_modifier_copy(struct 
CacheLibrary *cachelib, str
 
 void BKE_cache_modifier_foreachIDLink(struct CacheLibrary *cachelib, struct 
CacheModifier *md, CacheModifier_IDWalkFunc walk, void *userdata);
 
-void BKE_cache_modifier_bake(const struct bContext *C, struct CacheLibrary 
*cachelib, struct CacheModifier *md, struct Scene *scene, int startframe, int 
endframe);
+void BKE_cache_modifier_bake(const struct bContext *C, struct Group *group, 
struct CacheLibrary *cachelib, struct CacheModifier *md, struct Scene *scene, 
int startframe, int endframe);
 
 #endif
diff --git a/source/blender/blenkernel/intern/cache_library.c 
b/source/blender/blenkernel/intern/cache_library.c
index 705862f..872d74e 100644
--- a/source/blender/blenkernel/intern/cache_library.c
+++ b/source/blender/blenkernel/intern/cache_library.c
@@ -956,7 +956,7 @@ static void cache_modifier_bake_endjob(void 
*UNUSED(customdata))
        BKE_spacedata_draw_locks(false);
 }
 
-void BKE_cache_modifier_bake(const bContext *C, CacheLibrary *cachelib, 
CacheModifier *md, Scene *scene, int startframe, int endframe)
+void BKE_cache_modifier_bake(const bContext *C, Group *group, CacheLibrary 
*cachelib, CacheModifier *md, Scene *scene, int startframe, int endframe)
 {
        CacheBakeContext *ctx;
        wmJob *wm_job;
@@ -985,6 +985,7 @@ void BKE_cache_modifier_bake(const bContext *C, 
CacheLibrary *cachelib, CacheMod
        ctx->scene = scene;
        ctx->startframe = startframe;
        ctx->endframe = endframe;
+       ctx->group = group;
        
        WM_jobs_customdata_set(wm_job, ctx, cache_modifier_bake_freejob);
        WM_jobs_timer(wm_job, 0.1, NC_SCENE|ND_FRAME, NC_SCENE|ND_FRAME);
@@ -1007,23 +1008,23 @@ static void hairsim_bake_do(CacheBakeContext *ctx, 
short *stop, short *do_update
                             struct PTCWriterArchive *archive, 
EvaluationContext *eval_ctx)
 {
        Scene *scene = ctx->scene;
-       struct PTCWriter *writer = NULL;
+       struct PTCWriter *writer;
        
        if ((*stop) || (G.is_break))
                return;
        
-//     writer = PTC_writer_dupligroup(ctx->group->id.name, &ctx->eval_ctx, 
scene, ctx->group, ctx->cachelib);
-//     PTC_writer_init(ctx->writer, archive);
-       
-       PTC_bake(ctx->bmain, scene, eval_ctx, writer, ctx->startframe, 
ctx->endframe, stop, do_update, progress);
-       
+       writer = PTC_writer_dupligroup(ctx->group->id.name, eval_ctx, scene, 
ctx->group, ctx->cachelib);
        if (writer) {
+               PTC_writer_init(writer, archive);
+               
+               PTC_bake(ctx->bmain, scene, eval_ctx, writer, ctx->startframe, 
ctx->endframe, stop, do_update, progress);
+               
                PTC_writer_free(writer);
                writer = NULL;
        }
 }
 
-static void hairsim_bake(HairSimCacheModifier *UNUSED(md), CacheLibrary 
*cachelib, CacheBakeContext *ctx)
+static void hairsim_bake(HairSimCacheModifier *hsmd, CacheLibrary *cachelib, 
CacheBakeContext *ctx)
 {
        Scene *scene = ctx->scene;
        const int origframe = scene->r.cfra;
@@ -1035,7 +1036,7 @@ static void hairsim_bake(HairSimCacheModifier 
*UNUSED(md), CacheLibrary *cacheli
        
        scene->r.framelen = 1.0f;
        
-       BKE_cache_archive_path(cachelib->filepath, (ID *)cachelib, 
cachelib->id.lib, filename, sizeof(filename));
+       BKE_cache_archive_path(hsmd->modifier.filepath, (ID *)cachelib, 
cachelib->id.lib, filename, sizeof(filename));
        archive = PTC_open_writer_archive(scene, filename);
        
        if (archive) {
diff --git a/source/blender/editors/io/io_cache_library.c 
b/source/blender/editors/io/io_cache_library.c
index 0acf246..2e974a6 100644
--- a/source/blender/editors/io/io_cache_library.c
+++ b/source/blender/editors/io/io_cache_library.c
@@ -77,7 +77,7 @@
 static int ED_cache_library_active_object_poll(bContext *C)
 {
        Object *ob = CTX_data_active_object(C);
-       if (!ob || !ob->cache_library)
+       if (!(ob && (ob->transflag & OB_DUPLIGROUP) && ob->dup_group && 
ob->cache_library))
                return false;
        
        return true;
@@ -85,6 +85,8 @@ static int ED_cache_library_active_object_poll(bContext *C)
 
 static int ED_cache_modifier_poll(bContext *C)
 {
+       if (!ED_cache_library_active_object_poll(C))
+               return false;
        if (!CTX_data_pointer_get_type(C, "cache_modifier", 
&RNA_CacheLibraryModifier).data)
                return false;
        
@@ -650,6 +652,7 @@ void CACHELIBRARY_OT_remove_modifier(struct wmOperatorType 
*ot)
 static int cache_library_modifier_bake_exec(bContext *C, wmOperator 
*UNUSED(op))
 {
        Scene *scene = CTX_data_scene(C);
+       Object *ob = CTX_data_active_object(C);
        PointerRNA md_ptr = CTX_data_pointer_get_type(C, "cache_modifier", 
&RNA_CacheLibraryModifier);
        CacheModifier *md = md_ptr.data;
        CacheLibrary *cachelib = md_ptr.id.data;
@@ -661,7 +664,7 @@ static int cache_library_modifier_bake_exec(bContext *C, 
wmOperator *UNUSED(op))
        startframe = scene->r.sfra;
        endframe = scene->r.efra;
        
-       BKE_cache_modifier_bake(C, cachelib, md, scene, startframe, endframe);
+       BKE_cache_modifier_bake(C, ob->dup_group, cachelib, md, scene, 
startframe, endframe);
        
        return OPERATOR_FINISHED;
 }
diff --git a/source/blender/makesdna/DNA_cache_library_types.h 
b/source/blender/makesdna/DNA_cache_library_types.h
index 3a816e9..4dd683a 100644
--- a/source/blender/makesdna/DNA_cache_library_types.h
+++ b/source/blender/makesdna/DNA_cache_library_types.h
@@ -115,9 +115,7 @@ typedef enum eCacheModifier_Type {
 } eCacheModifier_Type;
 
 typedef struct HairSimCacheModifier {
-       CacheModifier md;
-       
-       
+       CacheModifier modifier;
 } HairSimCacheModifier;
 
 #endif

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to