[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