Updated the code to invoke the USD asset resolver for texture import and export. This removes the assumption that assets are specified as file system paths. Added logic to allow importing textures from paths that are not package relative. The new heuristics will attempt to import files that don't exist on the file system, but which can be resolved with the USD asset resolver, to allow importing textures from URIs.
43 lines
1.3 KiB
C++
43 lines
1.3 KiB
C++
/* SPDX-License-Identifier: GPL-2.0-or-later
|
|
* Copyright 2021 Blender Foundation. All rights reserved. */
|
|
|
|
#include "usd_common.h"
|
|
#include "usd.h"
|
|
|
|
#include <pxr/usd/ar/resolver.h>
|
|
#include <pxr/base/plug/registry.h>
|
|
|
|
#include "BKE_appdir.h"
|
|
#include "BLI_path_util.h"
|
|
#include "BLI_string.h"
|
|
|
|
#include "WM_api.h"
|
|
#include "WM_types.h"
|
|
|
|
namespace blender::io::usd {
|
|
|
|
void ensure_usd_plugin_path_registered()
|
|
{
|
|
/* if PXR_PYTHON_SUPPORT_ENABLED is defined, we *must* be dynamic and
|
|
the plugins are placed relative to the USD shared library hence no
|
|
hinting is required. */
|
|
#ifndef PXR_PYTHON_SUPPORT_ENABLED
|
|
static bool plugin_path_registered = false;
|
|
if (plugin_path_registered) {
|
|
return;
|
|
}
|
|
plugin_path_registered = true;
|
|
|
|
/* Tell USD which directory to search for its JSON files. If 'datafiles/usd'
|
|
* does not exist, the USD library will not be able to read or write any files. */
|
|
const char *blender_usd_datafiles = BKE_appdir_folder_id(BLENDER_DATAFILES, "usd");
|
|
if (blender_usd_datafiles) {
|
|
const std::string blender_usd_data_folder = blender_usd_datafiles;
|
|
/* The trailing slash indicates to the USD library that the path is a directory. */
|
|
pxr::PlugRegistry::GetInstance().RegisterPlugins(blender_usd_data_folder + "/");
|
|
}
|
|
#endif
|
|
}
|
|
|
|
} // namespace blender::io::usd
|