[Bf-blender-cvs] [0b462c66113] usd-importer-T81257-merge: USDStageReader refactor.

makowalski noreply at git.blender.org
Wed Jun 23 02:57:16 CEST 2021


Commit: 0b462c66113d6417c781483e5dcbd14e93af6e1f
Author: makowalski
Date:   Tue Jun 22 20:46:26 2021 -0400
Branches: usd-importer-T81257-merge
https://developer.blender.org/rB0b462c66113d6417c781483e5dcbd14e93af6e1f

USDStageReader refactor.

Now passing the import params and settings as arguments
to the constructor, to reduce the number of arguments
required to invoke USDStageReader::collect_readers().
The constructor now takes a stage pointer as an argument,
to simplify error checking and initalization of the
import settings. Miscellaneous additional cleanup to
simplify the code.

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

M	source/blender/io/usd/intern/usd_capi_import.cc
M	source/blender/io/usd/intern/usd_reader_stage.cc
M	source/blender/io/usd/intern/usd_reader_stage.h

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

diff --git a/source/blender/io/usd/intern/usd_capi_import.cc b/source/blender/io/usd/intern/usd_capi_import.cc
index a34e6c40369..1430c7a0671 100644
--- a/source/blender/io/usd/intern/usd_capi_import.cc
+++ b/source/blender/io/usd/intern/usd_capi_import.cc
@@ -188,10 +188,6 @@ static void import_startjob(void *customdata, short *stop, short *do_update, flo
   }
 
   BLI_path_abs(data->filename, BKE_main_blendfile_path_from_global());
-  USDStageReader *archive = new USDStageReader(data->filename);
-
-  archive->params(data->params);
-  archive->settings(data->settings);
 
   CacheFile *cache_file = static_cast<CacheFile *>(
       BKE_cachefile_add(data->bmain, BLI_path_basename(data->filename)));
@@ -205,7 +201,6 @@ static void import_startjob(void *customdata, short *stop, short *do_update, flo
   cache_file->scale = data->params.scale;
   STRNCPY(cache_file->filepath, data->filename);
 
-  data->archive = archive;
   data->settings.cache_file = cache_file;
 
   *data->do_update = true;
@@ -219,29 +214,29 @@ static void import_startjob(void *customdata, short *stop, short *do_update, flo
   *data->do_update = true;
   *data->progress = 0.1f;
 
-  Scene *scene = data->scene;
+  pxr::UsdStageRefPtr stage = pxr::UsdStage::Open(data->filename);
 
-  if (!archive->stage()) {
-    /* This happens when the USD JSON files cannot be found. When that happens,
-     * the USD library doesn't know it has the functionality to write USDA and
-     * USDC files, and creating a new UsdStage fails. */
-    WM_reportf(
-        RPT_ERROR, "USD Import: unable to find suitable USD plugin to read %s", data->filename);
+  if (!stage) {
+    WM_reportf(RPT_ERROR, "USD Import: unable to open stage to read %s", data->filename);
     data->import_ok = false;
     return;
   }
 
-  convert_to_z_up(archive->stage(), data->settings);
+  convert_to_z_up(stage, data->settings);
 
   // Set up the stage for animated data.
   if (data->params.set_frame_range) {
-    scene->r.sfra = archive->stage()->GetStartTimeCode();
-    scene->r.efra = archive->stage()->GetEndTimeCode();
+    data->scene->r.sfra = stage->GetStartTimeCode();
+    data->scene->r.efra = stage->GetEndTimeCode();
   }
 
   *data->progress = 0.15f;
 
-  archive->collect_readers(data->bmain, data->params, data->settings);
+  USDStageReader *archive = new USDStageReader(stage, data->params, data->settings);
+
+  data->archive = archive;
+
+  archive->collect_readers(data->bmain);
 
   *data->progress = 0.2f;
 
@@ -527,20 +522,21 @@ CacheArchiveHandle *USD_create_handle(struct Main * /*bmain*/,
                                       const char *filename,
                                       ListBase *object_paths)
 {
-  USDStageReader *stage_reader = new USDStageReader(filename);
+  pxr::UsdStageRefPtr stage = pxr::UsdStage::Open(filename);
 
-  if (!stage_reader->valid()) {
-    delete stage_reader;
-    return NULL;
+  if (!stage) {
+    return nullptr;
   }
 
-  blender::io::usd::ImportSettings settings;
-  convert_to_z_up(stage_reader->stage(), settings);
+  USDImportParams params{};
+
+  blender::io::usd::ImportSettings settings{};
+  convert_to_z_up(stage, settings);
 
-  stage_reader->settings(settings);
+  USDStageReader *stage_reader = new USDStageReader(stage, params, settings);
 
   if (object_paths) {
-    gather_objects_paths(stage_reader->stage()->GetPseudoRoot(), object_paths);
+    gather_objects_paths(stage->GetPseudoRoot(), object_paths);
   }
 
   return handle_from_stage_reader(stage_reader);
diff --git a/source/blender/io/usd/intern/usd_reader_stage.cc b/source/blender/io/usd/intern/usd_reader_stage.cc
index b7547b612a0..040ce842e45 100644
--- a/source/blender/io/usd/intern/usd_reader_stage.cc
+++ b/source/blender/io/usd/intern/usd_reader_stage.cc
@@ -40,18 +40,16 @@
 
 namespace blender::io::usd {
 
-USDStageReader::USDStageReader(const char *filename)
+USDStageReader::USDStageReader(pxr::UsdStageRefPtr stage,
+                               const USDImportParams &params,
+                               const ImportSettings &settings)
+    : stage_(stage), params_(params), settings_(settings)
 {
-  stage_ = pxr::UsdStage::Open(filename);
 }
 
 USDStageReader::~USDStageReader()
 {
   clear_readers();
-
-  if (stage_) {
-    stage_->Unload();
-  }
 }
 
 bool USDStageReader::valid() const
@@ -278,19 +276,18 @@ USDPrimReader *USDStageReader::collect_readers(Main *bmain, const pxr::UsdPrim &
   return reader;
 }
 
-void USDStageReader::collect_readers(Main *bmain,
-                                     const USDImportParams &params,
-                                     const ImportSettings &settings)
+void USDStageReader::collect_readers(Main *bmain)
 {
-  params_ = params;
-  settings_ = settings;
+  if (!valid()) {
+    return;
+  }
 
   clear_readers();
 
   // Iterate through stage
   pxr::UsdPrim root = stage_->GetPseudoRoot();
 
-  std::string prim_path_mask(params.prim_path_mask);
+  std::string prim_path_mask(params_.prim_path_mask);
 
   if (!prim_path_mask.empty()) {
     pxr::UsdPrim prim = stage_->GetPrimAtPath(pxr::SdfPath(prim_path_mask));
diff --git a/source/blender/io/usd/intern/usd_reader_stage.h b/source/blender/io/usd/intern/usd_reader_stage.h
index 34ca1fe24bc..a843c86045b 100644
--- a/source/blender/io/usd/intern/usd_reader_stage.h
+++ b/source/blender/io/usd/intern/usd_reader_stage.h
@@ -46,16 +46,17 @@ class USDStageReader {
   std::vector<USDPrimReader *> readers_;
 
  public:
-  USDStageReader(const char *filename);
+  USDStageReader(pxr::UsdStageRefPtr stage,
+                 const USDImportParams &params,
+                 const ImportSettings &settings);
+
   ~USDStageReader();
 
   USDPrimReader *create_reader_if_allowed(const pxr::UsdPrim &prim);
 
   USDPrimReader *create_reader(const pxr::UsdPrim &prim);
 
-  void collect_readers(struct Main *bmain,
-                       const USDImportParams &params,
-                       const ImportSettings &settings);
+  void collect_readers(struct Main *bmain);
 
   bool valid() const;
 
@@ -73,15 +74,6 @@ class USDStageReader {
     return settings_;
   }
 
-  void params(const USDImportParams &a_params)
-  {
-    params_ = a_params;
-  }
-  void settings(const ImportSettings &a_settings)
-  {
-    settings_ = a_settings;
-  }
-
   void clear_readers();
 
   const std::vector<USDPrimReader *> &readers() const



More information about the Bf-blender-cvs mailing list