[Bf-blender-cvs] [465819a] gooseberry: Customdata caching for CD_ORIGSPACE_MLOOP.

Lukas Tönne noreply at git.blender.org
Wed Mar 25 18:58:11 CET 2015


Commit: 465819af4f6ae15394ca90c985a070fe25adacd7
Author: Lukas Tönne
Date:   Wed Mar 25 18:57:52 2015 +0100
Branches: gooseberry
https://developer.blender.org/rB465819af4f6ae15394ca90c985a070fe25adacd7

Customdata caching for CD_ORIGSPACE_MLOOP.

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

M	source/blender/pointcache/alembic/abc_customdata.cpp

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

diff --git a/source/blender/pointcache/alembic/abc_customdata.cpp b/source/blender/pointcache/alembic/abc_customdata.cpp
index 7451870..0b9c3c3 100644
--- a/source/blender/pointcache/alembic/abc_customdata.cpp
+++ b/source/blender/pointcache/alembic/abc_customdata.cpp
@@ -177,6 +177,22 @@ void write_sample<CD_ORCO>(CustomDataWriter *writer, OCompoundProperty &parent,
 	prop.set(OV3fArrayProperty::sample_type((V3f *)data, num_data));
 }
 
+template <>
+void write_sample<CD_ORIGSPACE_MLOOP>(CustomDataWriter *writer, OCompoundProperty &parent, const std::string &name, void *data, int num_data)
+{
+	OCompoundProperty prop = writer->add_compound_property<OCompoundProperty>(name, parent);
+	
+	OV2fArrayProperty prop_uv = writer->add_array_property<OV2fArrayProperty>(name+":uv", prop);
+	
+	OrigSpaceLoop *ospaceloop = (OrigSpaceLoop *)data;
+	std::vector<V2f> uv_data;
+	uv_data.reserve(num_data);
+	for (int i = 0; i < num_data; ++i) {
+		uv_data.push_back(V2f(ospaceloop->uv[0], ospaceloop->uv[1]));
+	}
+	prop_uv.set(V2fArraySample(uv_data));
+}
+
 /* ------------------------------------------------------------------------- */
 
 template <CustomDataType CDTYPE>
@@ -344,6 +360,30 @@ PTCReadSampleResult read_sample<CD_ORCO>(CustomDataReader *reader, ICompoundProp
 	return PTC_READ_SAMPLE_EXACT;
 }
 
+template <>
+PTCReadSampleResult read_sample<CD_ORIGSPACE_MLOOP>(CustomDataReader *reader, ICompoundProperty &parent, const ISampleSelector &ss, const std::string &name, void *data, int num_data)
+{
+	ICompoundProperty prop = reader->add_compound_property<ICompoundProperty>(name, parent);
+	
+	IV2fArrayProperty uv_prop = reader->add_array_property<IV2fArrayProperty>(name+":uv", prop);
+	
+	V2fArraySamplePtr sample = uv_prop.getValue(ss);
+	
+	if (sample->size() != num_data)
+		return PTC_READ_SAMPLE_INVALID;
+	
+	OrigSpaceLoop *ospace = (OrigSpaceLoop *)data;
+	const V2f *sample_data = (const V2f *)sample->getData();
+	for (int i = 0; i < num_data; ++i) {
+		copy_v2_v2(ospace->uv, sample_data->getValue());
+		
+		++sample_data;
+		++ospace;
+	}
+	
+	return PTC_READ_SAMPLE_EXACT;
+}
+
 /* ========================================================================= */
 
 /* recursive template that handles dispatch by CD layer type */




More information about the Bf-blender-cvs mailing list