diff options
author | Lukas Tönne <lukas.toenne@gmail.com> | 2015-03-20 11:40:46 +0300 |
---|---|---|
committer | Lukas Tönne <lukas.toenne@gmail.com> | 2015-03-26 16:13:40 +0300 |
commit | dccc3e62e7f622fd57e9f413f025cf0a1b2c671d (patch) | |
tree | e80ab26550b206743dc586f4771281e3d396b9a6 /source | |
parent | 1ad78297ca5092c808a37fd06c5731fcae77f6cc (diff) |
Distinguish realtime/render setting in the Object writer.
Now the derived_render mesh version is created locally when writing
render results.
Diffstat (limited to 'source')
-rw-r--r-- | source/blender/pointcache/PTC_api.cpp | 4 | ||||
-rw-r--r-- | source/blender/pointcache/PTC_api.h | 2 | ||||
-rw-r--r-- | source/blender/pointcache/alembic/abc_group.cpp | 2 | ||||
-rw-r--r-- | source/blender/pointcache/alembic/abc_object.cpp | 27 | ||||
-rw-r--r-- | source/blender/pointcache/alembic/abc_object.h | 8 | ||||
-rw-r--r-- | source/blender/pointcache/alembic/abc_reader.h | 1 | ||||
-rw-r--r-- | source/blender/pointcache/alembic/abc_writer.h | 1 | ||||
-rw-r--r-- | source/blender/pointcache/alembic/alembic.cpp | 4 | ||||
-rw-r--r-- | source/blender/pointcache/intern/ptc_types.h | 2 |
9 files changed, 39 insertions, 12 deletions
diff --git a/source/blender/pointcache/PTC_api.cpp b/source/blender/pointcache/PTC_api.cpp index 2c18b774633..57d64d1c437 100644 --- a/source/blender/pointcache/PTC_api.cpp +++ b/source/blender/pointcache/PTC_api.cpp @@ -331,9 +331,9 @@ PTCWriter *PTC_writer_cache_modifier_render(const char *name, Scene *scene, Obje /* ==== OBJECT ==== */ -PTCWriter *PTC_writer_object(const char *name, Object *ob) +PTCWriter *PTC_writer_object(const char *name, Scene *scene, Object *ob) { - return (PTCWriter *)PTC::Factory::alembic->create_writer_object(name, ob); + return (PTCWriter *)PTC::Factory::alembic->create_writer_object(name, scene, ob); } PTCReader *PTC_reader_object(const char *name, Object *ob) diff --git a/source/blender/pointcache/PTC_api.h b/source/blender/pointcache/PTC_api.h index fc260ace644..3f786e07356 100644 --- a/source/blender/pointcache/PTC_api.h +++ b/source/blender/pointcache/PTC_api.h @@ -95,7 +95,7 @@ struct PTCWriter *PTC_writer_from_rna(struct Scene *scene, struct PointerRNA *pt struct PTCReader *PTC_reader_from_rna(struct Scene *scene, struct PointerRNA *ptr); /* Object */ -struct PTCWriter *PTC_writer_object(const char *name, struct Object *ob); +struct PTCWriter *PTC_writer_object(const char *name, struct Scene *scene, struct Object *ob); struct PTCReader *PTC_reader_object(const char *name, struct Object *ob); /* Group */ diff --git a/source/blender/pointcache/alembic/abc_group.cpp b/source/blender/pointcache/alembic/abc_group.cpp index 4ab90636dea..a22b35ab29d 100644 --- a/source/blender/pointcache/alembic/abc_group.cpp +++ b/source/blender/pointcache/alembic/abc_group.cpp @@ -127,7 +127,7 @@ void AbcDupligroupWriter::write_sample_object(Object *ob) { AbcWriter *ob_writer = find_id_writer((ID *)ob); if (!ob_writer) { - ob_writer = new AbcObjectWriter(ob->id.name, ob); + ob_writer = new AbcObjectWriter(ob->id.name, m_scene, ob); ob_writer->init(abc_archive()); m_id_writers.insert(IDWriterPair((ID *)ob, ob_writer)); } diff --git a/source/blender/pointcache/alembic/abc_object.cpp b/source/blender/pointcache/alembic/abc_object.cpp index 338c4c9ccf6..3a36fb2a644 100644 --- a/source/blender/pointcache/alembic/abc_object.cpp +++ b/source/blender/pointcache/alembic/abc_object.cpp @@ -31,9 +31,11 @@ namespace PTC { using namespace Abc; using namespace AbcGeom; -AbcObjectWriter::AbcObjectWriter(const std::string &name, Object *ob) : +AbcObjectWriter::AbcObjectWriter(const std::string &name, Scene *scene, Object *ob) : ObjectWriter(ob, name), - m_dm_writer("mesh", ob, &ob->derivedFinal) + m_scene(scene), + m_final_dm(NULL), + m_dm_writer("mesh", ob, &m_final_dm) { } @@ -65,7 +67,26 @@ void AbcObjectWriter::write_sample() if (!m_abc_object) return; - m_dm_writer.write_sample(); + if (m_ob->type == OB_MESH) { + if (abc_archive()->use_render()) { + m_final_dm = mesh_create_derived_render(m_scene, m_ob, CD_MASK_BAREMESH); + + if (m_final_dm) { + m_dm_writer.write_sample(); + + m_final_dm->release(m_final_dm); + } + } + else { + m_final_dm = m_ob->derivedFinal; + if (!m_final_dm) + m_final_dm = mesh_get_derived_final(m_scene, m_ob, CD_MASK_BAREMESH); + + if (m_final_dm) { + m_dm_writer.write_sample(); + } + } + } } diff --git a/source/blender/pointcache/alembic/abc_object.h b/source/blender/pointcache/alembic/abc_object.h index cd2d15a2130..3624b523a16 100644 --- a/source/blender/pointcache/alembic/abc_object.h +++ b/source/blender/pointcache/alembic/abc_object.h @@ -31,13 +31,15 @@ #include "abc_writer.h" #include "abc_mesh.h" +struct DerivedMesh; struct Object; +struct Scene; namespace PTC { class AbcObjectWriter : public ObjectWriter, public AbcWriter { public: - AbcObjectWriter(const std::string &name, Object *ob); + AbcObjectWriter(const std::string &name, Scene *scene, Object *ob); void init_abc(); #if 0 @@ -47,8 +49,10 @@ public: void write_sample(); private: - Abc::OObject m_abc_object; + Scene *m_scene; + DerivedMesh *m_final_dm; + Abc::OObject m_abc_object; AbcDerivedMeshWriter m_dm_writer; }; diff --git a/source/blender/pointcache/alembic/abc_reader.h b/source/blender/pointcache/alembic/abc_reader.h index 6208a89796f..8906aa0e608 100644 --- a/source/blender/pointcache/alembic/abc_reader.h +++ b/source/blender/pointcache/alembic/abc_reader.h @@ -44,6 +44,7 @@ public: static AbcReaderArchive *open(Scene *scene, const std::string &filename, ErrorHandler *error_handler); + bool use_render() const { return m_use_render; } void use_render(bool enable) { m_use_render = enable; } Abc::IObject root(); diff --git a/source/blender/pointcache/alembic/abc_writer.h b/source/blender/pointcache/alembic/abc_writer.h index f8bdbf26e13..c8b6b6b2ce0 100644 --- a/source/blender/pointcache/alembic/abc_writer.h +++ b/source/blender/pointcache/alembic/abc_writer.h @@ -48,6 +48,7 @@ public: static AbcWriterArchive *open(Scene *scene, const std::string &filename, ErrorHandler *error_handler); + bool use_render() const { return m_use_render; } void use_render(bool enable) { m_use_render = enable; } Abc::OObject root(); diff --git a/source/blender/pointcache/alembic/alembic.cpp b/source/blender/pointcache/alembic/alembic.cpp index 21df3f79079..1476d9a0ebc 100644 --- a/source/blender/pointcache/alembic/alembic.cpp +++ b/source/blender/pointcache/alembic/alembic.cpp @@ -47,9 +47,9 @@ class AbcFactory : public Factory { return AbcReaderArchive::open(scene, name, error_handler); } - Writer *create_writer_object(const std::string &name, Object *ob) + Writer *create_writer_object(const std::string &name, Scene *scene, Object *ob) { - return new AbcObjectWriter(name, ob); + return new AbcObjectWriter(name, scene, ob); } Reader *create_reader_object(const std::string &name, Object *ob) diff --git a/source/blender/pointcache/intern/ptc_types.h b/source/blender/pointcache/intern/ptc_types.h index c7c074e9f5d..cdc05a9f9b0 100644 --- a/source/blender/pointcache/intern/ptc_types.h +++ b/source/blender/pointcache/intern/ptc_types.h @@ -197,7 +197,7 @@ struct Factory { virtual WriterArchive *open_writer_archive(Scene *scene, const std::string &name, ErrorHandler *error_handler) = 0; virtual ReaderArchive *open_reader_archive(Scene *scene, const std::string &name, ErrorHandler *error_handler) = 0; - virtual Writer *create_writer_object(const std::string &name, Object *ob) = 0; + virtual Writer *create_writer_object(const std::string &name, Scene *scene, Object *ob) = 0; virtual Reader *create_reader_object(const std::string &name, Object *ob) = 0; virtual Writer *create_writer_group(const std::string &name, Group *group) = 0; |