diff options
Diffstat (limited to 'source/base/StarAssets.cpp')
-rw-r--r-- | source/base/StarAssets.cpp | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/source/base/StarAssets.cpp b/source/base/StarAssets.cpp index d0b77f5..6bd9c09 100644 --- a/source/base/StarAssets.cpp +++ b/source/base/StarAssets.cpp @@ -844,9 +844,14 @@ shared_ptr<Assets::AssetData> Assets::loadImage(AssetPath const& path) const { as<ImageData>(loadAsset(AssetId{AssetType::Image, {path.basePath, path.subPath, {}}})); if (!source) return {}; - List<ImageOperation> operations = path.directives.transformed(imageOperationFromString); StringMap<ImageConstPtr> references; - for (auto const& ref : imageOperationReferences(operations)) { + StringList referencePaths; + path.directives.forEach([&](auto const& entry) { + addImageOperationReferences(entry.operation, referencePaths); + }); // TODO: This can definitely be better, was changed quickly to support the new Directives. + + + for (auto const& ref : referencePaths) { auto components = AssetPath::split(ref); validatePath(components, true, false); auto refImage = as<ImageData>(loadAsset(AssetId{AssetType::Image, move(components)})); @@ -857,8 +862,11 @@ shared_ptr<Assets::AssetData> Assets::loadImage(AssetPath const& path) const { return unlockDuring([&]() { auto newData = make_shared<ImageData>(); - newData->image = make_shared<Image>(processImageOperations( - operations, *source->image, [&](String const& ref) { return references.get(ref).get(); })); + Image newImage = *source->image; + path.directives.forEach([&](auto const& entry) { + processImageOperation(entry.operation, newImage, [&](String const& ref) { return references.get(ref).get(); }); + }); + newData->image = make_shared<Image>(move(newImage)); return newData; }); |