Provide explicit argument for asset cache ID.
This will allow assets to cache compiled results with different parameters. For example, we could cache both an RGB version of a texture and a Mono version. PiperOrigin-RevId: 811341377 Change-Id: Ifd6a4ff88661a2b38be47c02d6a666de2c202885
This commit is contained in:
committed by
Copybara-Service
parent
0baac58999
commit
922aebbeed
@@ -64,17 +64,17 @@ const std::string* mjCCache::HasAsset(const std::string& id) {
|
||||
|
||||
// inserts an asset into the cache, if asset is already in the cache, its data
|
||||
// is updated only if the timestamps disagree
|
||||
bool mjCCache::Insert(const std::string& modelname, const mjResource *resource,
|
||||
bool mjCCache::Insert(const std::string& modelname, const std::string& id, const mjResource *resource,
|
||||
std::shared_ptr<const void> data, std::size_t size) {
|
||||
std::lock_guard<std::mutex> lock(mutex_);
|
||||
|
||||
// check if asset is too large to fit in the cache
|
||||
if ((size_ + size > capacity_) &&
|
||||
lookup_.find(resource->name) == lookup_.end()) {
|
||||
lookup_.find(id) == lookup_.end()) {
|
||||
return false;
|
||||
}
|
||||
mjCAsset asset(modelname, resource, data, size);
|
||||
auto [it, inserted] = lookup_.insert({resource->name, asset});
|
||||
mjCAsset asset(modelname, id, resource, data, size);
|
||||
auto [it, inserted] = lookup_.insert({id, asset});
|
||||
mjCAsset* asset_ptr = &(it->second);
|
||||
|
||||
if (!inserted) {
|
||||
@@ -104,9 +104,9 @@ bool mjCCache::Insert(const std::string& modelname, const mjResource *resource,
|
||||
|
||||
// populate data from the cache into the given function, return true if data was
|
||||
// copied
|
||||
bool mjCCache::PopulateData(const mjResource* resource, mjCDataFunc fn) {
|
||||
bool mjCCache::PopulateData(const std::string& id, const mjResource* resource, mjCDataFunc fn) {
|
||||
std::lock_guard<std::mutex> lock(mutex_);
|
||||
auto it = lookup_.find(resource->name);
|
||||
auto it = lookup_.find(id);
|
||||
if (it == lookup_.end()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -39,9 +39,9 @@ typedef void (*mjCDeallocFunc)(const void*);
|
||||
class mjCAsset {
|
||||
friend class mjCCache;
|
||||
public:
|
||||
mjCAsset(std::string modelname, const mjResource* resource,
|
||||
mjCAsset(std::string modelname, std::string id, const mjResource* resource,
|
||||
std::shared_ptr<const void> data, std::size_t size) :
|
||||
id_(resource->name), timestamp_(resource->timestamp),
|
||||
id_(id), timestamp_(resource->timestamp),
|
||||
size_(size), data_(std::move(data)) {
|
||||
AddReference(modelname);
|
||||
}
|
||||
@@ -136,11 +136,11 @@ class mjCCache {
|
||||
|
||||
// inserts an asset into the cache, if asset is already in the cache, its data
|
||||
// is updated only if the timestamps disagree
|
||||
bool Insert(const std::string& modelname, const mjResource *resource,
|
||||
bool Insert(const std::string& modelname, const std::string& id, const mjResource *resource,
|
||||
std::shared_ptr<const void> data, std::size_t size);
|
||||
|
||||
// populate data from the cache into the given function
|
||||
bool PopulateData(const mjResource* resource, mjCDataFunc fn);
|
||||
bool PopulateData(const std::string& id, const mjResource* resource, mjCDataFunc fn);
|
||||
|
||||
// deletes the asset from the cache with the given id
|
||||
void DeleteAsset(const std::string& id);
|
||||
|
||||
@@ -513,7 +513,7 @@ void mjCMesh::CacheMesh(mjCCache* cache, const mjResource* resource) {
|
||||
const mjCMesh* mesh = static_cast<const mjCMesh*>(data);
|
||||
delete mesh;
|
||||
});
|
||||
cache->Insert("", resource, cached_data, size);
|
||||
cache->Insert("", resource->name, resource, cached_data, size);
|
||||
}
|
||||
|
||||
namespace {
|
||||
@@ -1231,7 +1231,7 @@ bool mjCMesh::LoadCachedMesh(mjCCache *cache, const mjResource* resource) {
|
||||
};
|
||||
|
||||
// check that cached asset has all data
|
||||
return cache->PopulateData(resource, process_mesh);
|
||||
return cache->PopulateData(resource->name, resource, process_mesh);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -91,7 +91,7 @@ PNGImage PNGImage::Load(const mjCBase* obj, mjResource* resource,
|
||||
};
|
||||
|
||||
// try loading from cache
|
||||
if (cache && cache->PopulateData(resource, callback)) {
|
||||
if (cache && cache->PopulateData(resource->name, resource, callback)) {
|
||||
return image;
|
||||
}
|
||||
|
||||
@@ -139,7 +139,7 @@ PNGImage PNGImage::Load(const mjCBase* obj, mjResource* resource,
|
||||
std::shared_ptr<const void> cached_data(cached_image, +[] (const void* data) {
|
||||
delete static_cast<const PNGImage*>(data);
|
||||
});
|
||||
cache->Insert("", resource, cached_data, size);
|
||||
cache->Insert("", resource->name, resource, cached_data, size);
|
||||
}
|
||||
|
||||
return image;
|
||||
|
||||
Reference in New Issue
Block a user