[Bf-blender-cvs] [f092792] gooseberry: Distinguish realtime/render setting in the Object writer.

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


Commit: f0927922842274760cf598b86e57e14580f57119
Author: Lukas Tönne
Date:   Fri Mar 20 09:40:46 2015 +0100
Branches: gooseberry
https://developer.blender.org/rBf0927922842274760cf598b86e57e14580f57119

Distinguish realtime/render setting in the Object writer.

Now the derived_render mesh version is created locally when writing
render results.

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

M	source/blender/pointcache/PTC_api.cpp
M	source/blender/pointcache/PTC_api.h
M	source/blender/pointcache/alembic/abc_group.cpp
M	source/blender/pointcache/alembic/abc_object.cpp
M	source/blender/pointcache/alembic/abc_object.h
M	source/blender/pointcache/alembic/abc_reader.h
M	source/blender/pointcache/alembic/abc_writer.h
M	source/blender/pointcache/alembic/alembic.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 2c18b77..57d64d1 100644
--- a/source/blender/pointcache/PTC_api.cpp
+++ b/source/blender/pointcache/PTC_api.cpp
@@ -331,9 +331,9 @@ PTCWriter *PTC_writer_cache_modifier_render(const char *name, Scene *scene, Obje
 
 /* ==== OBJECT ==== */
 
-PTCWriter *PTC_writer_object(const char *name, Object *ob)
+PTCWriter *PTC_writer_object(const char *name, Scene *scene, Object *ob)
 {
-	return (PTCWriter *)PTC::Factory::alembic->create_writer_object(name, ob);
+	return (PTCWriter *)PTC::Factory::alembic->create_writer_object(name, scene, ob);
 }
 
 PTCReader *PTC_reader_object(const char *name, Object *ob)
diff --git a/source/blender/pointcache/PTC_api.h b/source/blender/pointcache/PTC_api.h
index fc260ac..3f786e0 100644
--- a/source/blender/pointcache/PTC_api.h
+++ b/source/blender/pointcache/PTC_api.h
@@ -95,7 +95,7 @@ struct PTCWriter *PTC_writer_from_rna(struct Scene *scene, struct PointerRNA *pt
 struct PTCReader *PTC_reader_from_rna(struct Scene *scene, struct PointerRNA *ptr);
 
 /* Object */
-struct PTCWriter *PTC_writer_object(const char *name, struct Object *ob);
+struct PTCWriter *PTC_writer_object(const char *name, struct Scene *scene, struct Object *ob);
 struct PTCReader *PTC_reader_object(const char *name, struct Object *ob);
 
 /* Group */
diff --git a/source/blender/pointcache/alembic/abc_group.cpp b/source/blender/pointcache/alembic/abc_group.cpp
index 4ab9063..a22b35a 100644
--- a/source/blender/pointcache/alembic/abc_group.cpp
+++ b/source/blender/pointcache/alembic/abc_group.cpp
@@ -127,7 +127,7 @@ void AbcDupligroupWriter::write_sample_object(Object *ob)
 {
 	AbcWriter *ob_writer = find_id_writer((ID *)ob);
 	if (!ob_writer) {
-		ob_writer = new AbcObjectWriter(ob->id.name, ob);
+		ob_writer = new AbcObjectWriter(ob->id.name, m_scene, ob);
 		ob_writer->init(abc_archive());
 		m_id_writers.insert(IDWriterPair((ID *)ob, ob_writer));
 	}
diff --git a/source/blender/pointcache/alembic/abc_object.cpp b/source/blender/pointcache/alembic/abc_object.cpp
index 338c4c9..3a36fb2 100644
--- a/source/blender/pointcache/alembic/abc_object.cpp
+++ b/source/blender/pointcache/alembic/abc_object.cpp
@@ -31,9 +31,11 @@ namespace PTC {
 using namespace Abc;
 using namespace AbcGeom;
 
-AbcObjectWriter::AbcObjectWriter(const std::string &name, Object *ob) :
+AbcObjectWriter::AbcObjectWriter(const std::string &name, Scene *scene, Object *ob) :
     ObjectWriter(ob, name),
-    m_dm_writer("mesh", ob, &ob->derivedFinal)
+    m_scene(scene),
+    m_final_dm(NULL),
+    m_dm_writer("mesh", ob, &m_final_dm)
 {
 }
 
@@ -65,7 +67,26 @@ void AbcObjectWriter::write_sample()
 	if (!m_abc_object)
 		return;
 	
-	m_dm_writer.write_sample();
+	if (m_ob->type == OB_MESH) {
+		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_final_dm->release(m_final_dm);
+			}
+		}
+		else {
+			m_final_dm = m_ob->derivedFinal;
+			if (!m_final_dm)
+				m_final_dm = mesh_get_derived_final(m_scene, m_ob, CD_MASK_BAREMESH);
+			
+			if (m_final_dm) {
+				m_dm_writer.write_sample();
+			}
+		}
+	}
 }
 
 
diff --git a/source/blender/pointcache/alembic/abc_object.h b/source/blender/pointcache/alembic/abc_object.h
index cd2d15a..3624b52 100644
--- a/source/blender/pointcache/alembic/abc_object.h
+++ b/source/blender/pointcache/alembic/abc_object.h
@@ -31,13 +31,15 @@
 #include "abc_writer.h"
 #include "abc_mesh.h"
 
+struct DerivedMesh;
 struct Object;
+struct Scene;
 
 namespace PTC {
 
 class AbcObjectWriter : public ObjectWriter, public AbcWriter {
 public:
-	AbcObjectWriter(const std::string &name, Object *ob);
+	AbcObjectWriter(const std::string &name, Scene *scene, Object *ob);
 	
 	void init_abc();
 #if 0
@@ -47,8 +49,10 @@ public:
 	void write_sample();
 	
 private:
-	Abc::OObject m_abc_object;
+	Scene *m_scene;
+	DerivedMesh *m_final_dm;
 	
+	Abc::OObject m_abc_object;
 	AbcDerivedMeshWriter m_dm_writer;
 };
 
diff --git a/source/blender/pointcache/alembic/abc_reader.h b/source/blender/pointcache/alembic/abc_reader.h
index 6208a89..8906aa0 100644
--- a/source/blender/pointcache/alembic/abc_reader.h
+++ b/source/blender/pointcache/alembic/abc_reader.h
@@ -44,6 +44,7 @@ public:
 	
 	static AbcReaderArchive *open(Scene *scene, const std::string &filename, ErrorHandler *error_handler);
 	
+	bool use_render() const { return m_use_render; }
 	void use_render(bool enable) { m_use_render = enable; }
 	
 	Abc::IObject root();
diff --git a/source/blender/pointcache/alembic/abc_writer.h b/source/blender/pointcache/alembic/abc_writer.h
index f8bdbf2..c8b6b6b 100644
--- a/source/blender/pointcache/alembic/abc_writer.h
+++ b/source/blender/pointcache/alembic/abc_writer.h
@@ -48,6 +48,7 @@ public:
 	
 	static AbcWriterArchive *open(Scene *scene, const std::string &filename, ErrorHandler *error_handler);
 	
+	bool use_render() const { return m_use_render; }
 	void use_render(bool enable) { m_use_render = enable; }
 	
 	Abc::OObject root();
diff --git a/source/blender/pointcache/alembic/alembic.cpp b/source/blender/pointcache/alembic/alembic.cpp
index 21df3f7..1476d9a 100644
--- a/source/blender/pointcache/alembic/alembic.cpp
+++ b/source/blender/pointcache/alembic/alembic.cpp
@@ -47,9 +47,9 @@ class AbcFactory : public Factory {
 		return AbcReaderArchive::open(scene, name, error_handler);
 	}
 	
-	Writer *create_writer_object(const std::string &name, Object *ob)
+	Writer *create_writer_object(const std::string &name, Scene *scene, Object *ob)
 	{
-		return new AbcObjectWriter(name, ob);
+		return new AbcObjectWriter(name, scene, ob);
 	}
 
 	Reader *create_reader_object(const std::string &name, Object *ob)
diff --git a/source/blender/pointcache/intern/ptc_types.h b/source/blender/pointcache/intern/ptc_types.h
index c7c074e..cdc05a9 100644
--- a/source/blender/pointcache/intern/ptc_types.h
+++ b/source/blender/pointcache/intern/ptc_types.h
@@ -197,7 +197,7 @@ struct Factory {
 	virtual WriterArchive *open_writer_archive(Scene *scene, const std::string &name, ErrorHandler *error_handler) = 0;
 	virtual ReaderArchive *open_reader_archive(Scene *scene, const std::string &name, ErrorHandler *error_handler) = 0;
 	
-	virtual Writer *create_writer_object(const std::string &name, Object *ob) = 0;
+	virtual Writer *create_writer_object(const std::string &name, Scene *scene, Object *ob) = 0;
 	virtual Reader *create_reader_object(const std::string &name, Object *ob) = 0;
 	
 	virtual Writer *create_writer_group(const std::string &name, Group *group) = 0;




More information about the Bf-blender-cvs mailing list