[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