ATOM-13512 Altering IBL ImageProcessor .preset Does Not Force Assets to Rebuild (#5639)
Changes include: - Move config files from ImageProcessingAtom/Config/ folder to ImageProcessingAtom/Assets/Config/ folder so it can be watched as source depencies. - Change GetSuggestedPreset function so it can return certain preset for certain file name. - Move file mask mappings from preset to ImageBuilder.settings. But the file masks in preset can still be used. - Changed from using project config folder's imageBuilder.Settings for override to using it as json merge patch. - Expose GetFileHash function in AssetBuilderSDK api. Signed-off-by: Qing Tao <55564570+VickyAtAZ@users.noreply.github.com>
This commit is contained in:
@@ -221,6 +221,58 @@ namespace ImageProcessingAtom
|
||||
m_isShuttingDown = true;
|
||||
}
|
||||
|
||||
PresetName GetImagePreset(const AZStd::string& filepath)
|
||||
{
|
||||
// first let preset from asset info
|
||||
TextureSettings textureSettings;
|
||||
StringOutcome output = TextureSettings::LoadTextureSetting(filepath, textureSettings);
|
||||
|
||||
if (!textureSettings.m_preset.IsEmpty())
|
||||
{
|
||||
return textureSettings.m_preset;
|
||||
}
|
||||
|
||||
return BuilderSettingManager::Instance()->GetSuggestedPreset(filepath);
|
||||
}
|
||||
|
||||
void HandlePresetDependency(PresetName presetName, AZStd::vector<AssetBuilderSDK::SourceFileDependency>& sourceDependencyList)
|
||||
{
|
||||
// Reload preset if it was changed
|
||||
ImageProcessingAtom::BuilderSettingManager::Instance()->ReloadPreset(presetName);
|
||||
|
||||
AZStd::string_view filePath;
|
||||
auto presetSettings = BuilderSettingManager::Instance()->GetPreset(presetName, /*default platform*/"", &filePath);
|
||||
|
||||
AssetBuilderSDK::SourceFileDependency sourceFileDependency;
|
||||
sourceFileDependency.m_sourceDependencyType = AssetBuilderSDK::SourceFileDependency::SourceFileDependencyType::Absolute;
|
||||
|
||||
// Need to watch any possibe preset paths
|
||||
AZStd::vector<AZStd::string> possiblePresetPaths = BuilderSettingManager::Instance()->GetPossiblePresetPaths(presetName);
|
||||
for (const auto& path:possiblePresetPaths)
|
||||
{
|
||||
sourceFileDependency.m_sourceFileDependencyPath = path;
|
||||
sourceDependencyList.push_back(sourceFileDependency);
|
||||
}
|
||||
|
||||
if (presetSettings)
|
||||
{
|
||||
// handle special case here
|
||||
// Cubemap setting may reference some other presets
|
||||
if (presetSettings->m_cubemapSetting)
|
||||
{
|
||||
if (presetSettings->m_cubemapSetting->m_generateIBLDiffuse && !presetSettings->m_cubemapSetting->m_iblDiffusePreset.IsEmpty())
|
||||
{
|
||||
HandlePresetDependency(presetSettings->m_cubemapSetting->m_iblDiffusePreset, sourceDependencyList);
|
||||
}
|
||||
|
||||
if (presetSettings->m_cubemapSetting->m_generateIBLSpecular && !presetSettings->m_cubemapSetting->m_iblSpecularPreset.IsEmpty())
|
||||
{
|
||||
HandlePresetDependency(presetSettings->m_cubemapSetting->m_iblSpecularPreset, sourceDependencyList);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// this happens early on in the file scanning pass
|
||||
// this function should consistently always create the same jobs, and should do no checking whether the job is up to date or not - just be consistent.
|
||||
void ImageBuilderWorker::CreateJobs(const AssetBuilderSDK::CreateJobsRequest& request, AssetBuilderSDK::CreateJobsResponse& response)
|
||||
@@ -242,13 +294,26 @@ namespace ImageProcessingAtom
|
||||
if (ImageProcessingAtom::BuilderSettingManager::Instance()->DoesSupportPlatform(platformInfo.m_identifier))
|
||||
{
|
||||
AssetBuilderSDK::JobDescriptor descriptor;
|
||||
descriptor.m_jobKey = ext + " Atom Compile";
|
||||
descriptor.m_jobKey = "Image Compile: " + ext;
|
||||
descriptor.SetPlatformIdentifier(platformInfo.m_identifier.c_str());
|
||||
descriptor.m_critical = false;
|
||||
descriptor.m_additionalFingerprintInfo = "";
|
||||
response.m_createJobOutputs.push_back(descriptor);
|
||||
}
|
||||
}
|
||||
|
||||
// add source dependency for .assetinfo file
|
||||
AssetBuilderSDK::SourceFileDependency sourceFileDependency;
|
||||
sourceFileDependency.m_sourceDependencyType = AssetBuilderSDK::SourceFileDependency::SourceFileDependencyType::Absolute;
|
||||
sourceFileDependency.m_sourceFileDependencyPath = request.m_sourceFile;
|
||||
AZ::StringFunc::Path::ReplaceExtension(sourceFileDependency.m_sourceFileDependencyPath, TextureSettings::ExtensionName);
|
||||
response.m_sourceFileDependencyList.push_back(sourceFileDependency);
|
||||
|
||||
// add source dependencies for .preset files
|
||||
// Get the preset for this file
|
||||
auto presetName = GetImagePreset(request.m_sourceFile);
|
||||
HandlePresetDependency(presetName, response.m_sourceFileDependencyList);
|
||||
|
||||
response.m_result = AssetBuilderSDK::CreateJobsResultCode::Success;
|
||||
return;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user