diff options
Diffstat (limited to 'source/blender/io/usd/intern')
-rw-r--r-- | source/blender/io/usd/intern/usd_capi_export.cc | 12 | ||||
-rw-r--r-- | source/blender/io/usd/intern/usd_capi_import.cc | 9 | ||||
-rw-r--r-- | source/blender/io/usd/intern/usd_reader_mesh.cc | 18 | ||||
-rw-r--r-- | source/blender/io/usd/intern/usd_writer_hair.cc | 2 | ||||
-rw-r--r-- | source/blender/io/usd/intern/usd_writer_mesh.cc | 11 |
5 files changed, 32 insertions, 20 deletions
diff --git a/source/blender/io/usd/intern/usd_capi_export.cc b/source/blender/io/usd/intern/usd_capi_export.cc index 8df13fd0dcd..72c20f28b62 100644 --- a/source/blender/io/usd/intern/usd_capi_export.cc +++ b/source/blender/io/usd/intern/usd_capi_export.cc @@ -62,8 +62,8 @@ struct ExportJobData { bool is_usdz_export; USDExportParams params; - short *stop; - short *do_update; + bool *stop; + bool *do_update; float *progress; bool was_canceled; @@ -223,7 +223,7 @@ static void process_usdz_textures(const ExportJobData *data, const char *path) { char texture_path[4096]; BLI_strcpy_rlen(texture_path, path); BLI_path_append(texture_path, 4096, "textures"); - BLI_path_slash_ensure(texture_path); + BLI_path_slash_ensure(texture_path, 4096); struct direntry *entries; unsigned int num_files = BLI_filelist_dir_contents(texture_path, &entries); @@ -324,8 +324,8 @@ static bool perform_usdz_conversion(const ExportJobData *data) static void export_startjob(void *customdata, /* Cannot be const, this function implements wm_jobs_start_callback. * NOLINTNEXTLINE: readability-non-const-parameter. */ - short *stop, - short *do_update, + bool *stop, + bool *do_update, float *progress) { ExportJobData *data = static_cast<ExportJobData *>(customdata); @@ -619,7 +619,7 @@ bool USD_export(bContext *C, } else { /* Fake a job context, so that we don't need NULL pointer checks while exporting. */ - short stop = 0, do_update = 0; + bool stop = false, do_update = false; float progress = 0.0f; blender::io::usd::export_startjob(job, &stop, &do_update, &progress); diff --git a/source/blender/io/usd/intern/usd_capi_import.cc b/source/blender/io/usd/intern/usd_capi_import.cc index c7c3ac51844..ca518249c91 100644 --- a/source/blender/io/usd/intern/usd_capi_import.cc +++ b/source/blender/io/usd/intern/usd_capi_import.cc @@ -276,8 +276,8 @@ struct ImportJobData { USDStageReader *archive; - short *stop; - short *do_update; + bool *stop; + bool *do_update; float *progress; char error_code; @@ -338,8 +338,7 @@ static void report_job_duration(const ImportJobData *data) std::cout << '\n'; } - -static void import_startjob(void *customdata, short *stop, short *do_update, float *progress) +static void import_startjob(void *customdata, bool *stop, bool *do_update, float *progress) { ImportJobData *data = static_cast<ImportJobData *>(customdata); @@ -703,7 +702,7 @@ bool USD_import(struct bContext *C, } else { /* Fake a job context, so that we don't need NULL pointer checks while importing. */ - short stop = 0, do_update = 0; + bool stop = false, do_update = false; float progress = 0.0f; import_startjob(job, &stop, &do_update, &progress); diff --git a/source/blender/io/usd/intern/usd_reader_mesh.cc b/source/blender/io/usd/intern/usd_reader_mesh.cc index 9c0c76a50c1..75d9330392f 100644 --- a/source/blender/io/usd/intern/usd_reader_mesh.cc +++ b/source/blender/io/usd/intern/usd_reader_mesh.cc @@ -34,6 +34,7 @@ #include <pxr/base/vt/value.h> #include <pxr/usd/sdf/types.h> #include <pxr/usd/usdGeom/mesh.h> +#include <pxr/usd/usdGeom/primvarsAPI.h> #include <pxr/usd/usdGeom/subset.h> #include <pxr/usd/usdShade/materialBindingAPI.h> #include <pxr/usd/usdSkel/bindingAPI.h> @@ -297,12 +298,13 @@ bool USDMeshReader::topology_changed(const Mesh *existing_mesh, const double mot mesh_prim_.GetFaceVertexCountsAttr().Get(&face_counts_, motionSampleTime); mesh_prim_.GetPointsAttr().Get(&positions_, motionSampleTime); + pxr::UsdGeomPrimvarsAPI primvarsAPI(mesh_prim_); /* TODO(makowalski): Reading normals probably doesn't belong in this function, * as this is not required to determine if the topology has changed. */ /* If 'normals' and 'primvars:normals' are both specified, the latter has precedence. */ - pxr::UsdGeomPrimvar primvar = mesh_prim_.GetPrimvar(usdtokens::normalsPrimvar); + pxr::UsdGeomPrimvar primvar = primvarsAPI.GetPrimvar(usdtokens::normalsPrimvar); if (primvar.HasValue()) { primvar.ComputeFlattened(&normals_, motionSampleTime); normal_interpolation_ = primvar.GetInterpolation(); @@ -386,6 +388,8 @@ void USDMeshReader::read_uvs(Mesh *mesh, const double motionSampleTime, const bo std::vector<UVSample> uv_primvars(ldata->totlayer); + pxr::UsdGeomPrimvarsAPI primvarsAPI(mesh_prim_); + if (has_uvs_) { for (int layer_idx = 0; layer_idx < ldata->totlayer; layer_idx++) { const CustomDataLayer *layer = &ldata->layers[layer_idx]; @@ -416,11 +420,11 @@ void USDMeshReader::read_uvs(Mesh *mesh, const double motionSampleTime, const bo } /* Early out if mesh doesn't have primvar. */ - if (!mesh_prim_.HasPrimvar(uv_token)) { + if (!primvarsAPI.HasPrimvar(uv_token)) { continue; } - if (pxr::UsdGeomPrimvar uv_primvar = mesh_prim_.GetPrimvar(uv_token)) { + if (pxr::UsdGeomPrimvar uv_primvar = primvarsAPI.GetPrimvar(uv_token)) { uv_primvar.ComputeFlattened(&uv_primvars[layer_idx].uvs, motionSampleTime); uv_primvars[layer_idx].interpolation = uv_primvar.GetInterpolation(); } @@ -492,7 +496,9 @@ void USDMeshReader::read_colors(Mesh *mesh, const double motionSampleTime) return; } - std::vector<pxr::UsdGeomPrimvar> primvars = mesh_prim_.GetPrimvars(); + pxr::UsdGeomPrimvarsAPI primvarsAPI(mesh_prim_.GetPrim()); + + std::vector<pxr::UsdGeomPrimvar> primvars = primvarsAPI.GetPrimvars(); /* Convert all color primvars to custom layer data. */ for (pxr::UsdGeomPrimvar pv : primvars) { @@ -894,12 +900,14 @@ Mesh *USDMeshReader::read_mesh(Mesh *existing_mesh, is_left_handed_ = true; } + pxr::UsdGeomPrimvarsAPI primvarsAPI(mesh_prim_); + std::vector<pxr::TfToken> uv_tokens; /* Currently we only handle UV primvars. */ if (read_flag & MOD_MESHSEQ_READ_UV) { - std::vector<pxr::UsdGeomPrimvar> primvars = mesh_prim_.GetPrimvars(); + std::vector<pxr::UsdGeomPrimvar> primvars = primvarsAPI.GetPrimvars(); for (pxr::UsdGeomPrimvar p : primvars) { diff --git a/source/blender/io/usd/intern/usd_writer_hair.cc b/source/blender/io/usd/intern/usd_writer_hair.cc index ae0e68ee8b1..7fbe68f9d25 100644 --- a/source/blender/io/usd/intern/usd_writer_hair.cc +++ b/source/blender/io/usd/intern/usd_writer_hair.cc @@ -41,7 +41,7 @@ void USDHairWriter::do_write(HierarchyContext &context) { /* Get untransformed vertices, there's a xform under the hair. */ float inv_mat[4][4]; - invert_m4_m4_safe(inv_mat, context.object->obmat); + invert_m4_m4_safe(inv_mat, context.object->object_to_world); ParticleSystem *psys = context.particle_system; ParticleCacheKey **cache = psys->pathcache; diff --git a/source/blender/io/usd/intern/usd_writer_mesh.cc b/source/blender/io/usd/intern/usd_writer_mesh.cc index 3d2aacb2d42..ac0501588cf 100644 --- a/source/blender/io/usd/intern/usd_writer_mesh.cc +++ b/source/blender/io/usd/intern/usd_writer_mesh.cc @@ -270,7 +270,8 @@ void USDGenericMeshWriter::write_uv_maps(const Mesh *mesh, .Set(std::string(layer->name), pxr::UsdTimeCode::Default()); } - pxr::UsdGeomPrimvar uv_coords_primvar = usd_mesh.CreatePrimvar( + pxr::UsdGeomPrimvarsAPI primvarsAPI(usd_mesh.GetPrim()); + pxr::UsdGeomPrimvar uv_coords_primvar = primvarsAPI.CreatePrimvar( primvar_name, pxr::SdfValueTypeNames->TexCoord2fArray, pxr::UsdGeomTokens->faceVarying); MLoopUV *mloopuv = static_cast<MLoopUV *>(layer->data); @@ -343,6 +344,8 @@ void USDGenericMeshWriter::write_vertex_groups(const Object *ob, std::vector<pxr::UsdGeomPrimvar> pv_groups; std::vector<pxr::VtArray<float>> pv_data; + pxr::UsdGeomPrimvarsAPI primvarsAPI(usd_mesh.GetPrim()); + // Create vertex groups primvars for (def = (bDeformGroup *)ob->defbase.first, i = 0, j = 0; def; def = def->next, i++) { if (!def) @@ -350,7 +353,7 @@ void USDGenericMeshWriter::write_vertex_groups(const Object *ob, pxr::TfToken primvar_name(pxr::TfMakeValidIdentifier(def->name)); pxr::TfToken primvar_interpolation = (as_point_groups) ? pxr::UsdGeomTokens->vertex : pxr::UsdGeomTokens->faceVarying; - pv_groups.push_back(usd_mesh.CreatePrimvar( + pv_groups.push_back(primvarsAPI.CreatePrimvar( primvar_name, pxr::SdfValueTypeNames->FloatArray, primvar_interpolation)); size_t primvar_size = 0; @@ -451,12 +454,14 @@ void USDGenericMeshWriter::write_face_maps(const Object *ob, int i; size_t mpoly_len = mesh->totpoly; + pxr::UsdGeomPrimvarsAPI primvarsAPI(usd_mesh.GetPrim()); + for (bFaceMap *fmap = (bFaceMap *)ob->fmaps.first; fmap; fmap = fmap->next) { if (!fmap) continue; pxr::TfToken primvar_name(pxr::TfMakeValidIdentifier(fmap->name)); pxr::TfToken primvar_interpolation = pxr::UsdGeomTokens->uniform; - pv_groups.push_back(usd_mesh.CreatePrimvar( + pv_groups.push_back(primvarsAPI.CreatePrimvar( primvar_name, pxr::SdfValueTypeNames->FloatArray, primvar_interpolation)); pv_data.push_back(pxr::VtArray<float>(mpoly_len)); |