Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/source
diff options
context:
space:
mode:
authorLukas Tönne <lukas.toenne@gmail.com>2015-03-19 14:47:17 +0300
committerLukas Tönne <lukas.toenne@gmail.com>2015-03-26 16:13:39 +0300
commit3a38ed914a49dce1cb5ea41dda37bfa4f2f470bb (patch)
tree830e7c82c451a5446e2cc9cc41e3b5dd267fe900 /source
parentf65b7c8377de664198195754abf31782cc00398f (diff)
Added customdata writers/readers for missing mesh edge, poly and loop
data.
Diffstat (limited to 'source')
-rw-r--r--source/blender/pointcache/alembic/abc_mesh.cpp45
-rw-r--r--source/blender/pointcache/alembic/abc_mesh.h10
2 files changed, 47 insertions, 8 deletions
diff --git a/source/blender/pointcache/alembic/abc_mesh.cpp b/source/blender/pointcache/alembic/abc_mesh.cpp
index 97c01fc9d95..e07cd18afd2 100644
--- a/source/blender/pointcache/alembic/abc_mesh.cpp
+++ b/source/blender/pointcache/alembic/abc_mesh.cpp
@@ -42,10 +42,16 @@ namespace PTC {
using namespace Abc;
using namespace AbcGeom;
+/* CD layers that are stored in generic customdata arrays created with CD_ALLOC */
+static CustomDataMask CD_MASK_CACHE = ~( CD_MASK_MVERT | CD_MASK_MEDGE | CD_MASK_MFACE | CD_MASK_MPOLY | CD_MASK_MLOOP | CD_MASK_BMESH);
+
AbcDerivedMeshWriter::AbcDerivedMeshWriter(const std::string &name, Object *ob, DerivedMesh **dm_ptr) :
DerivedMeshWriter(ob, dm_ptr, name),
- m_vertex_data_writer("vertex_data", ~CD_MASK_BAREMESH),
- m_face_data_writer("face_data", ~CD_MASK_BAREMESH)
+ m_vert_data_writer("vertex_data", CD_MASK_CACHE),
+ m_edge_data_writer("edge_data", CD_MASK_CACHE),
+ m_face_data_writer("face_data", CD_MASK_CACHE),
+ m_poly_data_writer("poly_data", CD_MASK_CACHE),
+ m_loop_data_writer("loop_data", CD_MASK_CACHE)
{
}
@@ -313,20 +319,35 @@ void AbcDerivedMeshWriter::write_sample()
CustomData *vdata = output_dm->getVertDataLayout(output_dm);
int num_vdata = output_dm->getNumVerts(output_dm);
- m_vertex_data_writer.write_sample(vdata, num_vdata, user_props);
+ m_vert_data_writer.write_sample(vdata, num_vdata, user_props);
+
+ CustomData *edata = output_dm->getEdgeDataLayout(output_dm);
+ int num_edata = output_dm->getNumEdges(output_dm);
+ m_edge_data_writer.write_sample(edata, num_edata, user_props);
DM_ensure_tessface(output_dm);
CustomData *fdata = output_dm->getTessFaceDataLayout(output_dm);
int num_fdata = output_dm->getNumTessFaces(output_dm);
m_face_data_writer.write_sample(fdata, num_fdata, user_props);
+
+ CustomData *pdata = output_dm->getPolyDataLayout(output_dm);
+ int num_pdata = output_dm->getNumPolys(output_dm);
+ m_poly_data_writer.write_sample(pdata, num_pdata, user_props);
+
+ CustomData *ldata = output_dm->getLoopDataLayout(output_dm);
+ int num_ldata = output_dm->getNumLoops(output_dm);
+ m_loop_data_writer.write_sample(ldata, num_ldata, user_props);
}
/* ========================================================================= */
AbcDerivedMeshReader::AbcDerivedMeshReader(const std::string &name, Object *ob) :
DerivedMeshReader(ob, name),
- m_vertex_data_reader("vertex_data", ~CD_MASK_BAREMESH),
- m_face_data_reader("face_data", ~CD_MASK_BAREMESH)
+ m_vert_data_reader("vertex_data", CD_MASK_CACHE),
+ m_edge_data_reader("edge_data", CD_MASK_CACHE),
+ m_face_data_reader("face_data", CD_MASK_CACHE),
+ m_poly_data_reader("poly_data", CD_MASK_CACHE),
+ m_loop_data_reader("loop_data", CD_MASK_CACHE)
{
}
@@ -626,13 +647,25 @@ PTCReadSampleResult AbcDerivedMeshReader::read_sample(float frame)
CustomData *vdata = m_result->getVertDataLayout(m_result);
int num_vdata = totverts;
- m_vertex_data_reader.read_sample(ss, vdata, num_vdata, user_props);
+ m_vert_data_reader.read_sample(ss, vdata, num_vdata, user_props);
+
+ CustomData *edata = m_result->getEdgeDataLayout(m_result);
+ int num_edata = totedges;
+ m_edge_data_reader.read_sample(ss, edata, num_edata, user_props);
DM_ensure_tessface(m_result);
CustomData *fdata = m_result->getVertDataLayout(m_result);
int num_fdata = m_result->getNumTessFaces(m_result);
m_face_data_reader.read_sample(ss, fdata, num_fdata, user_props);
+ CustomData *pdata = m_result->getPolyDataLayout(m_result);
+ int num_pdata = totpolys;
+ m_poly_data_reader.read_sample(ss, pdata, num_pdata, user_props);
+
+ CustomData *ldata = m_result->getLoopDataLayout(m_result);
+ int num_ldata = totloops;
+ m_loop_data_reader.read_sample(ss, ldata, num_ldata, user_props);
+
// BLI_assert(DM_is_valid(m_result));
#ifdef USE_TIMING
diff --git a/source/blender/pointcache/alembic/abc_mesh.h b/source/blender/pointcache/alembic/abc_mesh.h
index 0ea76b24948..6cc098b814b 100644
--- a/source/blender/pointcache/alembic/abc_mesh.h
+++ b/source/blender/pointcache/alembic/abc_mesh.h
@@ -68,8 +68,11 @@ private:
AbcGeom::ON3fGeomParam m_param_poly_normals;
/* note: loop normals are already defined as a parameter in the schema */
- CustomDataWriter m_vertex_data_writer;
+ CustomDataWriter m_vert_data_writer;
+ CustomDataWriter m_edge_data_writer;
CustomDataWriter m_face_data_writer;
+ CustomDataWriter m_poly_data_writer;
+ CustomDataWriter m_loop_data_writer;
};
class AbcDerivedMeshReader : public DerivedMeshReader, public AbcReader {
@@ -99,8 +102,11 @@ private:
AbcGeom::IN3fGeomParam m_param_vertex_normals;
AbcGeom::IN3fGeomParam m_param_poly_normals;
- CustomDataReader m_vertex_data_reader;
+ CustomDataReader m_vert_data_reader;
+ CustomDataReader m_edge_data_reader;
CustomDataReader m_face_data_reader;
+ CustomDataReader m_poly_data_reader;
+ CustomDataReader m_loop_data_reader;
};