[Bf-blender-cvs] [da1c800] gooseberry: New reader/writer for DerivedMesh.

Lukas Tönne noreply at git.blender.org
Mon Mar 23 13:01:12 CET 2015


Commit: da1c8006f291ddb736054fbff1c8a35e53496931
Author: Lukas Tönne
Date:   Wed Feb 25 10:15:29 2015 +0100
Branches: gooseberry
https://developer.blender.org/rBda1c8006f291ddb736054fbff1c8a35e53496931

New reader/writer for DerivedMesh.

Used as a base for existing PointCacheModifier classes, but can be used
on its own.

===================================================================

M	source/blender/pointcache/PTC_api.cpp
M	source/blender/pointcache/PTC_api.h
M	source/blender/pointcache/alembic/abc_mesh.cpp
M	source/blender/pointcache/alembic/abc_mesh.h
M	source/blender/pointcache/intern/alembic.h
M	source/blender/pointcache/intern/ptc_types.cpp
M	source/blender/pointcache/intern/ptc_types.h

===================================================================

diff --git a/source/blender/pointcache/PTC_api.cpp b/source/blender/pointcache/PTC_api.cpp
index d62f77e..d77a297 100644
--- a/source/blender/pointcache/PTC_api.cpp
+++ b/source/blender/pointcache/PTC_api.cpp
@@ -332,26 +332,41 @@ PTCReader *PTC_reader_cloth(PTCReaderArchive *_archive, Object *ob, ClothModifie
 
 /* ==== MESH ==== */
 
-PTCWriter *PTC_writer_point_cache(PTCWriterArchive *_archive, Object *ob, PointCacheModifierData *pcmd)
+PTCWriter *PTC_writer_derived_mesh(PTCWriterArchive *_archive, const char *name, Object *ob, DerivedMesh **dm_ptr)
 {
 	PTC::WriterArchive *archive = (PTC::WriterArchive *)_archive;
-	return (PTCWriter *)abc_writer_point_cache(archive, ob, pcmd);
+	return (PTCWriter *)abc_writer_derived_mesh(archive, name, ob, dm_ptr);
 }
 
-PTCReader *PTC_reader_point_cache(PTCReaderArchive *_archive, Object *ob, PointCacheModifierData *pcmd)
+PTCReader *PTC_reader_derived_mesh(PTCReaderArchive *_archive, const char *name, Object *ob)
 {
 	PTC::ReaderArchive *archive = (PTC::ReaderArchive *)_archive;
-	return (PTCReader *)abc_reader_point_cache(archive, ob, pcmd);
+	return (PTCReader *)abc_reader_derived_mesh(archive, name, ob);
 }
 
-struct DerivedMesh *PTC_reader_point_cache_acquire_result(PTCReader *_reader)
+struct DerivedMesh *PTC_reader_derived_mesh_acquire_result(PTCReader *_reader)
 {
-	PointCacheReader *reader = (PointCacheReader *)_reader;
+	DerivedMeshReader *reader = (DerivedMeshReader *)_reader;
 	return reader->acquire_result();
 }
 
-void PTC_reader_point_cache_discard_result(PTCReader *_reader)
+void PTC_reader_derived_mesh_discard_result(PTCReader *_reader)
+{
+	DerivedMeshReader *reader = (DerivedMeshReader *)_reader;
+	reader->discard_result();
+}
+
+
+PTCWriter *PTC_writer_point_cache(PTCWriterArchive *_archive, Object *ob, PointCacheModifierData *pcmd)
 {
+	PTC::WriterArchive *archive = (PTC::WriterArchive *)_archive;
+	return (PTCWriter *)abc_writer_point_cache(archive, ob, pcmd);
+}
+
+PTCReader *PTC_reader_point_cache(PTCReaderArchive *_archive, Object *ob, PointCacheModifierData *pcmd)
+{
+	PTC::ReaderArchive *archive = (PTC::ReaderArchive *)_archive;
+	return (PTCReader *)abc_reader_point_cache(archive, ob, pcmd);
 }
 
 ePointCacheModifierMode PTC_mod_point_cache_get_mode(PointCacheModifierData *pcmd)
diff --git a/source/blender/pointcache/PTC_api.h b/source/blender/pointcache/PTC_api.h
index 8fcc2a4..a65775d 100644
--- a/source/blender/pointcache/PTC_api.h
+++ b/source/blender/pointcache/PTC_api.h
@@ -109,10 +109,13 @@ typedef enum ePointCacheModifierMode {
 	MOD_POINTCACHE_MODE_WRITE,
 } ePointCacheModifierMode;
 
+struct PTCWriter *PTC_writer_derived_mesh(struct PTCWriterArchive *archive, const char *name, struct Object *ob, struct DerivedMesh **dm_ptr);
+struct PTCReader *PTC_reader_derived_mesh(struct PTCReaderArchive *archive, const char *name, struct Object *ob);
+struct DerivedMesh *PTC_reader_derived_mesh_acquire_result(struct PTCReader *reader);
+void PTC_reader_derived_mesh_discard_result(struct PTCReader *reader);
+
 struct PTCWriter *PTC_writer_point_cache(struct PTCWriterArchive *archive, struct Object *ob, struct PointCacheModifierData *pcmd);
 struct PTCReader *PTC_reader_point_cache(struct PTCReaderArchive *archive, struct Object *ob, struct PointCacheModifierData *pcmd);
-struct DerivedMesh *PTC_reader_point_cache_acquire_result(struct PTCReader *reader);
-void PTC_reader_point_cache_discard_result(struct PTCReader *reader);
 ePointCacheModifierMode PTC_mod_point_cache_get_mode(struct PointCacheModifierData *pcmd);
 /* returns the actual new mode, in case a change didn't succeed */
 ePointCacheModifierMode PTC_mod_point_cache_set_mode(struct Scene *scene, struct Object *ob, struct PointCacheModifierData *pcmd, ePointCacheModifierMode mode);
diff --git a/source/blender/pointcache/alembic/abc_mesh.cpp b/source/blender/pointcache/alembic/abc_mesh.cpp
index b0863df..a383258 100644
--- a/source/blender/pointcache/alembic/abc_mesh.cpp
+++ b/source/blender/pointcache/alembic/abc_mesh.cpp
@@ -44,15 +44,13 @@ namespace PTC {
 using namespace Abc;
 using namespace AbcGeom;
 
-AbcPointCacheWriter::AbcPointCacheWriter(AbcWriterArchive *archive, Object *ob, PointCacheModifierData *pcmd) :
-    PointCacheWriter(ob, pcmd, archive),
+AbcDerivedMeshWriter::AbcDerivedMeshWriter(AbcWriterArchive *archive, const std::string &name, Object *ob, DerivedMesh **dm_ptr) :
+    DerivedMeshWriter(ob, dm_ptr, archive),
     AbcWriter(archive)
 {
-	set_error_handler(new ModifierErrorHandler(&pcmd->modifier));
-	
 	if (archive->archive) {
 		OObject root = archive->archive.getTop();
-		m_mesh = OPolyMesh(root, m_pcmd->modifier.name, archive->frame_sampling_index());
+		m_mesh = OPolyMesh(root, name, archive->frame_sampling_index());
 		
 		OPolyMeshSchema &schema = m_mesh.getSchema();
 		OCompoundProperty geom_props = schema.getArbGeomParams();
@@ -66,7 +64,7 @@ AbcPointCacheWriter::AbcPointCacheWriter(AbcWriterArchive *archive, Object *ob,
 	}
 }
 
-AbcPointCacheWriter::~AbcPointCacheWriter()
+AbcDerivedMeshWriter::~AbcDerivedMeshWriter()
 {
 }
 
@@ -233,12 +231,12 @@ static N3fArraySample create_sample_vertex_normals(DerivedMesh *dm, std::vector<
 	return N3fArraySample(data);
 }
 
-void AbcPointCacheWriter::write_sample()
+void AbcDerivedMeshWriter::write_sample()
 {
 	if (!archive()->archive)
 		return;
 	
-	DerivedMesh *output_dm = m_pcmd->output_dm;
+	DerivedMesh *output_dm = *m_dm_ptr;
 	if (!output_dm)
 		return;
 	
@@ -294,17 +292,16 @@ void AbcPointCacheWriter::write_sample()
 	m_prop_edges_index.set(edges_index);
 }
 
+/* ========================================================================= */
 
-AbcPointCacheReader::AbcPointCacheReader(AbcReaderArchive *archive, Object *ob, PointCacheModifierData *pcmd) :
-    PointCacheReader(ob, pcmd, archive),
+AbcDerivedMeshReader::AbcDerivedMeshReader(AbcReaderArchive *archive, const std::string &name, Object *ob) :
+    DerivedMeshReader(ob, archive),
     AbcReader(archive)
 {
-	set_error_handler(new ModifierErrorHandler(&pcmd->modifier));
-	
 	if (archive->archive.valid()) {
 		IObject root = archive->archive.getTop();
-		if (root.valid() && root.getChild(m_pcmd->modifier.name)) {
-			m_mesh = IPolyMesh(root, m_pcmd->modifier.name);
+		if (root.valid() && root.getChild(name)) {
+			m_mesh = IPolyMesh(root, name);
 			
 			IPolyMeshSchema &schema = m_mesh.getSchema();
 			ICompoundProperty geom_props = schema.getArbGeomParams();
@@ -320,7 +317,7 @@ AbcPointCacheReader::AbcPointCacheReader(AbcReaderArchive *archive, Object *ob,
 	}
 }
 
-AbcPointCacheReader::~AbcPointCacheReader()
+AbcDerivedMeshReader::~AbcDerivedMeshReader()
 {
 }
 
@@ -461,7 +458,7 @@ static void apply_sample_edge_indices(DerivedMesh *dm, Int32ArraySamplePtr sampl
 	}
 }
 
-PTCReadSampleResult AbcPointCacheReader::read_sample(float frame)
+PTCReadSampleResult AbcDerivedMeshReader::read_sample(float frame)
 {
 #ifdef USE_TIMING
 	double start_time;
@@ -582,8 +579,34 @@ PTCReadSampleResult AbcPointCacheReader::read_sample(float frame)
 	return PTC_READ_SAMPLE_EXACT;
 }
 
+/* ========================================================================= */
+
+AbcPointCacheWriter::AbcPointCacheWriter(AbcWriterArchive *archive, Object *ob, PointCacheModifierData *pcmd) :
+    AbcDerivedMeshWriter(archive, pcmd->modifier.name, ob, &pcmd->output_dm)
+{
+	set_error_handler(new ModifierErrorHandler(&pcmd->modifier));
+}
+
+AbcPointCacheReader::AbcPointCacheReader(AbcReaderArchive *archive, Object *ob, PointCacheModifierData *pcmd) :
+    AbcDerivedMeshReader(archive, pcmd->modifier.name, ob)
+{
+	set_error_handler(new ModifierErrorHandler(&pcmd->modifier));
+}
+
 /* ==== API ==== */
 
+Writer *abc_writer_derived_mesh(WriterArchive *archive, const std::string &name, Object *ob, DerivedMesh **dm_ptr)
+{
+	BLI_assert(dynamic_cast<AbcWriterArchive *>(archive));
+	return new AbcDerivedMeshWriter((AbcWriterArchive *)archive, name, ob, dm_ptr);
+}
+
+Reader *abc_reader_derived_mesh(ReaderArchive *archive, const std::string &name, Object *ob)
+{
+	BLI_assert(dynamic_cast<AbcReaderArchive *>(archive));
+	return new AbcDerivedMeshReader((AbcReaderArchive *)archive, name, ob);
+}
+
 Writer *abc_writer_point_cache(WriterArchive *archive, Object *ob, PointCacheModifierData *pcmd)
 {
 	BLI_assert(dynamic_cast<AbcWriterArchive *>(archive));
diff --git a/source/blender/pointcache/alembic/abc_mesh.h b/source/blender/pointcache/alembic/abc_mesh.h
index 6dd65e7..8e51aa6 100644
--- a/source/blender/pointcache/alembic/abc_mesh.h
+++ b/source/blender/pointcache/alembic/abc_mesh.h
@@ -34,10 +34,10 @@ struct DerivedMesh;
 
 namespace PTC {
 
-class AbcPointCacheWriter : public PointCacheWriter, public AbcWriter {
+class AbcDerivedMeshWriter : public DerivedMeshWriter, public AbcWriter {
 public:
-	AbcPointCacheWriter(AbcWriterArchive *archive, Object *ob, PointCacheModifierData *pcmd);
-	~AbcPointCacheWriter();
+	AbcDerivedMeshWriter(AbcWriterArchive *archive, const std::string &name, Object *ob, DerivedMesh **dm_ptr);
+	~AbcDerivedMeshWriter();
 	
 	void write_sample();
 	
@@ -51,10 +51,10 @@ private:
 	/* note: loop normals are already defined as a parameter in the schema */
 };
 
-class AbcPointCacheReader : public PointCacheReader, public AbcReader {
+class AbcDerivedMeshReader : public DerivedMeshReader, public AbcReader {
 public:
-	AbcPointCacheReader(AbcReaderArchive *archive, Object *ob, PointCacheModifierData *pcmd);
-	~AbcPointCacheReader();
+	AbcDerivedMeshReader(AbcReaderArchive *archive, const std::string &name, Object *ob);
+	~AbcDerivedMeshReader();
 	
 	PTCReadSampleResult read_sample(float frame);
 	
@@ -68,6 +68,17 @@ private:
 	AbcGeom::IN3fGeomParam m_param_poly_normals;
 };
 
+
+class AbcPointCacheWriter : public AbcDerivedMeshWriter {
+public:
+	AbcPointCacheWriter(AbcWriterArchive *archive, Object *ob, PointCacheModifierData *pcmd);
+};
+
+class AbcPointCacheReader : public AbcDerivedMeshReader {
+public:
+	AbcPointCacheReader(AbcReaderArchive *archive, Object *ob, PointCacheModifierData *pcmd);
+};
+
 } /* namespace PTC */
 
 #endif  /* PTC_MESH_H */
diff --git a/source/blender/pointcache/intern/alembic.h b/source/blender/pointcache/intern/alembic.h
index 404bdeb..c7a0313 100644
--- a/source/blender/

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list