[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