String Asset::GetCachePath() const { AssetDatabase* db = GetSubsystem<AssetDatabase>(); String cachePath = db->GetCachePath(); cachePath += guid_; return cachePath; }
bool Asset::CheckCacheFile() { if (importer_.Null()) return true; FileSystem* fs = GetSubsystem<FileSystem>(); AssetDatabase* db = GetSubsystem<AssetDatabase>(); String cachePath = db->GetCachePath(); String cacheFile = cachePath + guid_; unsigned modifiedTime = fs->GetLastModifiedTime(path_); if (importer_->RequiresCacheFile()) { if (!fs->FileExists(cacheFile) || fs->GetLastModifiedTime(cacheFile) < modifiedTime) return false; } if (fs->GetLastModifiedTime(GetDotAssetFilename()) < modifiedTime) { return false; } return true; }
bool TextureImporter::Import() { AssetDatabase* db = GetSubsystem<AssetDatabase>(); ResourceCache* cache = GetSubsystem<ResourceCache>(); String cachePath = db->GetCachePath(); FileSystem* fileSystem = GetSubsystem<FileSystem>(); String compressedPath = cachePath + "DDS/" + asset_->GetRelativePath() + ".dds"; if (fileSystem->FileExists(compressedPath)) fileSystem->Delete(compressedPath); SharedPtr<Image> image = cache->GetTempResource<Image>(asset_->GetPath()); if (image.Null()) return false; if (compressTextures_ && !image->IsCompressed()) { fileSystem->CreateDirs(cachePath, "DDS/" + Atomic::GetPath(asset_->GetRelativePath())); float resizefactor; float width = image->GetWidth(); float height = image->GetHeight(); if (width > compressedSize_ || height > compressedSize_) { if (width >= height) { resizefactor = compressedSize_ / width; } else { resizefactor = compressedSize_ / height; } image->Resize(width*resizefactor, height*resizefactor); } if (image->SaveDDS(compressedPath)) { Renderer * renderer = GetSubsystem<Renderer>(); renderer->ReloadTextures(); } } // todo, proper proportions image->Resize(64, 64); // not sure entirely what we want to do here, though if the cache file doesn't exist // will reimport image->SavePNG(cachePath + asset_->GetGUID()); // save thumbnail image->SavePNG(cachePath + asset_->GetGUID() + "_thumbnail.png"); return true; }
bool BuildWindows::CheckIncludeResourceFile(const String& resourceDir, const String& fileName) { // #623 BEGIN TODO: Skip files that have a converted version in the cache AssetDatabase* db = GetSubsystem<AssetDatabase>(); String cachePath = db->GetCachePath(); if (resourceDir != cachePath) { String ext = GetExtension(fileName); if (ext == ".jpg" || ext == ".png" || ext == ".tga") { FileSystem* fileSystem = GetSubsystem<FileSystem>(); String compressedPath = cachePath + "DDS/" + fileName + ".dds"; if (fileSystem->FileExists(compressedPath)) return false; } } // #623 END TODO return BuildBase::CheckIncludeResourceFile(resourceDir, fileName); }
void BuildWindows::Initialize() { ToolSystem* tsystem = GetSubsystem<ToolSystem>(); Project* project = tsystem->GetProject(); Vector<String> defaultResourcePaths; GetDefaultResourcePaths(defaultResourcePaths); for (unsigned i = 0; i < defaultResourcePaths.Size(); i++) { AddResourceDir(defaultResourcePaths[i]); } BuildDefaultResourceEntries(); // Include the project resources and cache separately AddProjectResourceDir(project->GetResourcePath()); AssetDatabase* db = GetSubsystem<AssetDatabase>(); String cachePath = db->GetCachePath(); AddProjectResourceDir(cachePath); BuildProjectResourceEntries(); }
void BuildAndroid::Initialize() { ToolSystem* tsystem = GetSubsystem<ToolSystem>(); Project* project = tsystem->GetProject(); Vector<String> defaultResourcePaths; GetDefaultResourcePaths(defaultResourcePaths); for (unsigned i = 0; i < defaultResourcePaths.Size(); i++) { AddResourceDir(defaultResourcePaths[i]); } BuildDefaultResourceEntries(); // TODO: smart filtering of cache String projectResources = project->GetResourcePath(); AddProjectResourceDir(projectResources); AssetDatabase* db = GetSubsystem<AssetDatabase>(); String cachePath = db->GetCachePath(); AddProjectResourceDir(cachePath); BuildProjectResourceEntries(); }