[Bf-blender-cvs] [aff4e02] alembic: Write out the complete dupli group in cache modifiers.

Lukas Tönne noreply at git.blender.org
Mon Mar 30 12:39:50 CEST 2015


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




More information about the Bf-blender-cvs mailing list