[Bf-blender-cvs] [cca5648] alembic: Make the nested DM writer in Object writers a pointer, instead of using the do_mesh flag.
Lukas Tönne
noreply at git.blender.org
Thu Mar 26 13:55:19 CET 2015
Commit: cca564866229700e4cdefbc9296d5064c8d06473
Author: Lukas Tönne
Date: Tue Mar 24 11:26:07 2015 +0100
Branches: alembic
https://developer.blender.org/rBcca564866229700e4cdefbc9296d5064c8d06473
Make the nested DM writer in Object writers a pointer, instead of using
the do_mesh flag.
This will be more in line with how optional particle system writer will
be created.
===================================================================
M source/blender/pointcache/alembic/abc_object.cpp
M source/blender/pointcache/alembic/abc_object.h
===================================================================
diff --git a/source/blender/pointcache/alembic/abc_object.cpp b/source/blender/pointcache/alembic/abc_object.cpp
index a188a13..1332f83 100644
--- a/source/blender/pointcache/alembic/abc_object.cpp
+++ b/source/blender/pointcache/alembic/abc_object.cpp
@@ -16,6 +16,7 @@
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
+#include "abc_mesh.h"
#include "abc_object.h"
extern "C" {
@@ -35,11 +36,19 @@ AbcObjectWriter::AbcObjectWriter(const std::string &name, Scene *scene, Object *
ObjectWriter(ob, name),
m_scene(scene),
m_final_dm(NULL),
- m_dm_writer("mesh", ob, &m_final_dm),
- m_do_mesh(do_mesh),
- m_do_hair(do_hair)
+ m_dm_writer(0)
{
- m_do_mesh &= m_ob->type == OB_MESH;
+ if (do_mesh) {
+ if (m_ob->type == OB_MESH) {
+ m_dm_writer = new AbcDerivedMeshWriter("mesh", ob, &m_final_dm);
+ }
+ }
+}
+
+AbcObjectWriter::~AbcObjectWriter()
+{
+ if (m_dm_writer)
+ delete m_dm_writer;
}
void AbcObjectWriter::init_abc()
@@ -49,14 +58,10 @@ void AbcObjectWriter::init_abc()
m_abc_object = abc_archive()->add_id_object<OObject>((ID *)m_ob);
- if (m_do_mesh) {
+ if (m_dm_writer) {
/* XXX not nice */
- m_dm_writer.init(abc_archive());
- m_dm_writer.init_abc(m_abc_object);
- }
-
- if (m_do_hair) {
- /* TODO */
+ m_dm_writer->init(abc_archive());
+ m_dm_writer->init_abc(m_abc_object);
}
}
@@ -76,12 +81,12 @@ void AbcObjectWriter::write_sample()
if (!m_abc_object)
return;
- if (m_do_mesh) {
+ if (m_dm_writer) {
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_dm_writer->write_sample();
m_final_dm->release(m_final_dm);
}
@@ -92,7 +97,7 @@ void AbcObjectWriter::write_sample()
m_final_dm = mesh_get_derived_final(m_scene, m_ob, CD_MASK_BAREMESH);
if (m_final_dm) {
- m_dm_writer.write_sample();
+ m_dm_writer->write_sample();
}
}
}
diff --git a/source/blender/pointcache/alembic/abc_object.h b/source/blender/pointcache/alembic/abc_object.h
index 3b65f46..b3ae34a 100644
--- a/source/blender/pointcache/alembic/abc_object.h
+++ b/source/blender/pointcache/alembic/abc_object.h
@@ -29,7 +29,6 @@
#include "abc_reader.h"
#include "abc_schema.h"
#include "abc_writer.h"
-#include "abc_mesh.h"
struct DerivedMesh;
struct Object;
@@ -37,9 +36,12 @@ struct Scene;
namespace PTC {
+class AbcDerivedMeshWriter;
+
class AbcObjectWriter : public ObjectWriter, public AbcWriter {
public:
AbcObjectWriter(const std::string &name, Scene *scene, Object *ob, bool do_mesh, bool do_hair);
+ ~AbcObjectWriter();
void init_abc();
#if 0
@@ -53,9 +55,7 @@ private:
DerivedMesh *m_final_dm;
Abc::OObject m_abc_object;
- AbcDerivedMeshWriter m_dm_writer;
-
- bool m_do_mesh, m_do_hair;
+ AbcDerivedMeshWriter *m_dm_writer;
};
class AbcObjectReader : public ObjectReader, public AbcReader {
More information about the Bf-blender-cvs
mailing list