All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
usdzResolver.h
1 //
2 // Copyright 2018 Pixar
3 //
4 // Licensed under the Apache License, Version 2.0 (the "Apache License")
5 // with the following modification; you may not use this file except in
6 // compliance with the Apache License and the following modification to it:
7 // Section 6. Trademarks. is deleted and replaced with:
8 //
9 // 6. Trademarks. This License does not grant permission to use the trade
10 // names, trademarks, service marks, or product names of the Licensor
11 // and its affiliates, except as required to comply with Section 4(c) of
12 // the License and to reproduce the content of the NOTICE file.
13 //
14 // You may obtain a copy of the Apache License at
15 //
16 // http://www.apache.org/licenses/LICENSE-2.0
17 //
18 // Unless required by applicable law or agreed to in writing, software
19 // distributed under the Apache License with the above modification is
20 // distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
21 // KIND, either express or implied. See the Apache License for the specific
22 // language governing permissions and limitations under the Apache License.
23 //
24 #ifndef USD_ZIP_RESOLVER_H
25 #define USD_ZIP_RESOLVER_H
26 
27 #include "pxr/pxr.h"
28 #include "pxr/usd/ar/packageResolver.h"
29 #include "pxr/usd/ar/threadLocalScopedCache.h"
30 #include "pxr/usd/usd/zipFile.h"
31 
32 PXR_NAMESPACE_OPEN_SCOPE
33 
34 class ArAsset;
35 
40 class Usd_UsdzResolver
41  : public ArPackageResolver
42 {
43 public:
44  Usd_UsdzResolver();
45 
46  virtual std::string Resolve(
47  const std::string& packagePath,
48  const std::string& packagedPath) override;
49 
50  virtual std::shared_ptr<ArAsset> OpenAsset(
51  const std::string& packagePath,
52  const std::string& packagedPath) override;
53 
54  virtual void BeginCacheScope(
55  VtValue* cacheScopeData) override;
56 
57  virtual void EndCacheScope(
58  VtValue* cacheScopeData) override;
59 };
60 
66 class Usd_UsdzResolverCache
67 {
68 public:
69  static Usd_UsdzResolverCache& GetInstance();
70 
71  Usd_UsdzResolverCache(const Usd_UsdzResolverCache&) = delete;
72  Usd_UsdzResolverCache& operator=(const Usd_UsdzResolverCache&) = delete;
73 
74  using AssetAndZipFile = std::pair<std::shared_ptr<ArAsset>, UsdZipFile>;
75 
80  AssetAndZipFile FindOrOpenZipFile(
81  const std::string& packagePath);
82 
86  void BeginCacheScope(
87  VtValue* cacheScopeData);
88 
92  void EndCacheScope(
93  VtValue* cacheScopeData);
94 
95 private:
96  Usd_UsdzResolverCache();
97 
98  struct _Cache;
99  using _ThreadLocalCaches = ArThreadLocalScopedCache<_Cache>;
100  using _CachePtr = _ThreadLocalCaches::CachePtr;
101  _CachePtr _GetCurrentCache();
102 
103  AssetAndZipFile _OpenZipFile(const std::string& packagePath);
104 
105  _ThreadLocalCaches _caches;
106 };
107 
108 PXR_NAMESPACE_CLOSE_SCOPE
109 
110 #endif // USD_ZIP_RESOLVER_H
virtual AR_API std::shared_ptr< ArAsset > OpenAsset(const std::string &resolvedPackagePath, const std::string &resolvedPackagedPath)=0
Returns an ArAsset object for the asset at resolvedPackagedPath located in the package asset at resol...
Class for reading a zip file.
Definition: zipFile.h:56
Interface for accessing the contents of an asset.
Definition: asset.h:43
virtual AR_API void BeginCacheScope(VtValue *cacheScopeData)=0
Mark the start of a resolution caching scope.
Interface for resolving assets within package assets.
virtual AR_API void EndCacheScope(VtValue *cacheScopeData)=0
Mark the end of a resolution caching scope.
virtual AR_API std::string Resolve(const std::string &resolvedPackagePath, const std::string &packagedPath)=0
Returns the resolved path for the asset located at packagedPath in the package specified by resolvedP...
Provides a container which may hold any type, and provides introspection and iteration over array typ...
Definition: value.h:182