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-20 11:40:46 +0300
committerLukas Tönne <lukas.toenne@gmail.com>2015-03-26 16:13:40 +0300
commitdccc3e62e7f622fd57e9f413f025cf0a1b2c671d (patch)
treee80ab26550b206743dc586f4771281e3d396b9a6 /source
parent1ad78297ca5092c808a37fd06c5731fcae77f6cc (diff)
Distinguish realtime/render setting in the Object writer.
Now the derived_render mesh version is created locally when writing render results.
Diffstat (limited to 'source')
-rw-r--r--source/blender/pointcache/PTC_api.cpp4
-rw-r--r--source/blender/pointcache/PTC_api.h2
-rw-r--r--source/blender/pointcache/alembic/abc_group.cpp2
-rw-r--r--source/blender/pointcache/alembic/abc_object.cpp27
-rw-r--r--source/blender/pointcache/alembic/abc_object.h8
-rw-r--r--source/blender/pointcache/alembic/abc_reader.h1
-rw-r--r--source/blender/pointcache/alembic/abc_writer.h1
-rw-r--r--source/blender/pointcache/alembic/alembic.cpp4
-rw-r--r--source/blender/pointcache/intern/ptc_types.h2
9 files changed, 39 insertions, 12 deletions
diff --git a/source/blender/pointcache/PTC_api.cpp b/source/blender/pointcache/PTC_api.cpp
index 2c18b774633..57d64d1c437 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 fc260ace644..3f786e07356 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 4ab90636dea..a22b35ab29d 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 338c4c9ccf6..3a36fb2a644 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 cd2d15a2130..3624b523a16 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 6208a89796f..8906aa0e608 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 f8bdbf26e13..c8b6b6b2ce0 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 21df3f79079..1476d9a0ebc 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 c7c074e9f5d..cdc05a9f9b0 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;