[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