[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 ¶ms,
+ 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 ¶ms,
- 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 ¶ms,
+ 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 ¶ms,
- 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