[Bf-blender-cvs] [972e9fd] gooseberry: 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
Tue Mar 24 12:20:01 CET 2015


Commit: 972e9fd23e47a2e0c67b2a0c3976d3147b0e8dd9
Author: Lukas Tönne
Date:   Tue Mar 24 11:26:07 2015 +0100
Branches: gooseberry
https://developer.blender.org/rB972e9fd23e47a2e0c67b2a0c3976d3147b0e8dd9

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