[Bf-blender-cvs] [2925288b3a0] sybren-usd-experiments: NO PUSH delayed write
Sybren A. Stüvel
noreply at git.blender.org
Wed Jun 19 17:52:23 CEST 2019
Commit: 2925288b3a05760f8b17de231d15b70416ecd30c
Author: Sybren A. Stüvel
Date: Tue Jun 18 14:31:12 2019 +0200
Branches: sybren-usd-experiments
https://developer.blender.org/rB2925288b3a05760f8b17de231d15b70416ecd30c
NO PUSH delayed write
===================================================================
M source/blender/usd/intern/abstract_hierarchy_iterator.cc
M source/blender/usd/intern/usd_exporter.cc
M source/blender/usd/intern/usd_exporter_context.h
M source/blender/usd/intern/usd_hierarchy_iterator.cc
M source/blender/usd/intern/usd_writer_abstract.cc
M source/blender/usd/intern/usd_writer_abstract.h
M source/blender/usd/intern/usd_writer_mesh.cc
M source/blender/usd/intern/usd_writer_transform.cc
===================================================================
diff --git a/source/blender/usd/intern/abstract_hierarchy_iterator.cc b/source/blender/usd/intern/abstract_hierarchy_iterator.cc
index b108f38accc..525408639aa 100644
--- a/source/blender/usd/intern/abstract_hierarchy_iterator.cc
+++ b/source/blender/usd/intern/abstract_hierarchy_iterator.cc
@@ -23,6 +23,11 @@ AbstractHierarchyIterator::~AbstractHierarchyIterator()
{
}
+const AbstractHierarchyIterator::WriterMap &AbstractHierarchyIterator::writer_map() const
+{
+ return writers;
+}
+
void AbstractHierarchyIterator::release_writers()
{
for (WriterMap::value_type it : writers) {
diff --git a/source/blender/usd/intern/usd_exporter.cc b/source/blender/usd/intern/usd_exporter.cc
index 2908f5a892b..6b15e4672ba 100644
--- a/source/blender/usd/intern/usd_exporter.cc
+++ b/source/blender/usd/intern/usd_exporter.cc
@@ -60,6 +60,13 @@ void USDExporter::operator()(float &r_progress, bool &r_was_canceled)
USDHierarchyIterator iter(m_settings.depsgraph, m_stage);
iter.iterate();
+ for (AbstractHierarchyIterator::WriterMap::value_type it : iter.writer_map()) {
+ USDAbstractWriter *writer = static_cast<USDAbstractWriter *>(it.second);
+ printf(" ==> %s\n", it.first.c_str());
+ writer->write();
+ }
+ iter.release_writers();
+
m_stage->GetRootLayer()->Save();
r_progress = 1.0;
}
diff --git a/source/blender/usd/intern/usd_exporter_context.h b/source/blender/usd/intern/usd_exporter_context.h
index 9c738cd8433..b8b0a746028 100644
--- a/source/blender/usd/intern/usd_exporter_context.h
+++ b/source/blender/usd/intern/usd_exporter_context.h
@@ -4,9 +4,11 @@
#include <pxr/usd/sdf/path.h>
#include <pxr/usd/usd/common.h>
+struct Depsgraph;
struct Object;
struct USDExporterContext {
+ Depsgraph *depsgraph;
pxr::UsdStageRefPtr stage;
pxr::SdfPath usd_path;
Object *ob_eval;
diff --git a/source/blender/usd/intern/usd_hierarchy_iterator.cc b/source/blender/usd/intern/usd_hierarchy_iterator.cc
index 5c64f42f939..d8a0a9c35f2 100644
--- a/source/blender/usd/intern/usd_hierarchy_iterator.cc
+++ b/source/blender/usd/intern/usd_hierarchy_iterator.cc
@@ -44,10 +44,8 @@ TEMP_WRITER_TYPE *USDHierarchyIterator::create_xform_writer(const std::string &n
printf("\033[32;1mCREATE\033[0m %s at %s\n", object->id.name, name.c_str());
pxr::SdfPath usd_path("/" + name);
- USDExporterContext ctx = {stage, usd_path, object, NULL};
- USDAbstractWriter *xform_writer = new USDTransformWriter(ctx);
- xform_writer->write();
- return xform_writer;
+ USDExporterContext ctx = {depsgraph, stage, usd_path, object, nullptr};
+ return new USDTransformWriter(ctx);
}
TEMP_WRITER_TYPE *USDHierarchyIterator::create_data_writer(const std::string &name,
@@ -57,8 +55,9 @@ TEMP_WRITER_TYPE *USDHierarchyIterator::create_data_writer(const std::string &na
pxr::SdfPath usd_path("/" + name);
std::string data_name(get_id_name((ID *)object->data));
- USDExporterContext ctx = {stage, usd_path.AppendPath(pxr::SdfPath(data_name)), object, NULL};
- USDAbstractWriter *data_writer = NULL;
+ USDExporterContext ctx = {
+ depsgraph, stage, usd_path.AppendPath(pxr::SdfPath(data_name)), object, nullptr};
+ USDAbstractWriter *data_writer = nullptr;
switch (ctx.ob_eval->type) {
case OB_MESH:
@@ -79,7 +78,5 @@ TEMP_WRITER_TYPE *USDHierarchyIterator::create_data_writer(const std::string &na
return nullptr;
}
- data_writer->write();
-
return data_writer;
}
diff --git a/source/blender/usd/intern/usd_writer_abstract.cc b/source/blender/usd/intern/usd_writer_abstract.cc
index b5c296a4830..b7677ff6446 100644
--- a/source/blender/usd/intern/usd_writer_abstract.cc
+++ b/source/blender/usd/intern/usd_writer_abstract.cc
@@ -3,7 +3,7 @@
#include <pxr/base/tf/stringUtils.h>
USDAbstractWriter::USDAbstractWriter(const USDExporterContext &ctx)
- : stage(ctx.stage), usd_path_(ctx.usd_path), object(ctx.ob_eval)
+ : depsgraph(ctx.depsgraph), stage(ctx.stage), usd_path_(ctx.usd_path), object(ctx.ob_eval)
{
}
diff --git a/source/blender/usd/intern/usd_writer_abstract.h b/source/blender/usd/intern/usd_writer_abstract.h
index a082e37dd34..063fd196941 100644
--- a/source/blender/usd/intern/usd_writer_abstract.h
+++ b/source/blender/usd/intern/usd_writer_abstract.h
@@ -15,6 +15,7 @@ struct Object;
class USDAbstractWriter {
protected:
+ Depsgraph *depsgraph;
pxr::UsdStageRefPtr stage;
pxr::SdfPath usd_path_;
Object *object;
diff --git a/source/blender/usd/intern/usd_writer_mesh.cc b/source/blender/usd/intern/usd_writer_mesh.cc
index 57e8e1abfda..10a04296e59 100644
--- a/source/blender/usd/intern/usd_writer_mesh.cc
+++ b/source/blender/usd/intern/usd_writer_mesh.cc
@@ -94,5 +94,6 @@ USDMeshWriter::USDMeshWriter(const USDExporterContext &ctx) : USDGenericMeshWrit
Mesh *USDMeshWriter::get_evaluated_mesh(bool &UNUSED(r_needsfree))
{
- return object->runtime.mesh_eval;
+ Object *ob_eval = DEG_get_evaluated_object(depsgraph, object);
+ return ob_eval->runtime.mesh_eval;
}
diff --git a/source/blender/usd/intern/usd_writer_transform.cc b/source/blender/usd/intern/usd_writer_transform.cc
index a4ecd8b3eb5..b51fcb9099a 100644
--- a/source/blender/usd/intern/usd_writer_transform.cc
+++ b/source/blender/usd/intern/usd_writer_transform.cc
@@ -15,20 +15,22 @@ void USDTransformWriter::do_write()
{
float parent_relative_matrix[4][4]; // The object matrix relative to the parent.
+ Object *ob_eval = DEG_get_evaluated_object(depsgraph, object);
+
// Get the object matrix relative to the parent.
- if (object->parent == NULL) {
- copy_m4_m4(parent_relative_matrix, object->obmat);
+ if (ob_eval->parent == NULL) {
+ copy_m4_m4(parent_relative_matrix, ob_eval->obmat);
}
else {
- invert_m4_m4(object->parent->imat, object->parent->obmat);
- mul_m4_m4m4(parent_relative_matrix, object->parent->imat, object->obmat);
+ invert_m4_m4(ob_eval->parent->imat, ob_eval->parent->obmat);
+ mul_m4_m4m4(parent_relative_matrix, ob_eval->parent->imat, ob_eval->obmat);
}
printf("USD-\033[32mexporting\033[0m XForm %s → %s type=%d addr = %p\n",
- object->id.name,
+ ob_eval->id.name,
usd_path_.GetString().c_str(),
- object->type,
- object);
+ ob_eval->type,
+ ob_eval);
// Write the transform relative to the parent.
pxr::UsdGeomXform xform = pxr::UsdGeomXform::Define(stage, usd_path_);
More information about the Bf-blender-cvs
mailing list