From 36eabd2db2af45e282efeccfa33d1b457438d9fc Mon Sep 17 00:00:00 2001 From: Zousar Shaker Date: Mon, 9 Aug 2021 16:32:18 -0400 Subject: [PATCH] Allow Oodle texture plugin & module to be overridden by project configuration when building standalone texture build workers. #rb devin.doucette [CL 17107168 by Zousar Shaker in ue5-main branch] --- .../Source/Private/TextureFormatOodle.cpp | 3 +- .../Private/TextureBuildFunction.cpp | 15 ++++++- .../Public/TextureBuildFunction.h | 4 +- .../Private/TextureFormatASTC.cpp | 3 +- .../Private/TextureFormatDXT.cpp | 3 +- .../Private/TextureFormatETC2.cpp | 3 +- .../Private/TextureFormatIntelISPCTexComp.cpp | 3 +- .../Private/TextureFormatUncompressed.cpp | 3 +- .../TextureBuildWorker.Build.cs | 39 ++++++++++++------- 9 files changed, 55 insertions(+), 21 deletions(-) diff --git a/Engine/Plugins/Developer/TextureFormatOodle/Source/Private/TextureFormatOodle.cpp b/Engine/Plugins/Developer/TextureFormatOodle/Source/Private/TextureFormatOodle.cpp index de948ffb8ba2..8cdeefe621a6 100644 --- a/Engine/Plugins/Developer/TextureFormatOodle/Source/Private/TextureFormatOodle.cpp +++ b/Engine/Plugins/Developer/TextureFormatOodle/Source/Private/TextureFormatOodle.cpp @@ -202,10 +202,11 @@ class FOodleTextureBuildFunction final : public FTextureBuildFunction { FStringView GetName() const final { return TEXT("OodleTexture"); } - void GetVersion(UE::DerivedData::FBuildVersionBuilder& Builder) const final + void GetVersion(UE::DerivedData::FBuildVersionBuilder& Builder, ITextureFormat*& OutTextureFormatVersioning) const final { static FGuid Version(TEXT("e6b8884f-923a-44a1-8da1-298fb48865b2")); Builder << Version; + OutTextureFormatVersioning = FModuleManager::GetModuleChecked(TEXT("TextureFormatOodle")).GetTextureFormat(); } }; diff --git a/Engine/Source/Developer/TextureBuild/Private/TextureBuildFunction.cpp b/Engine/Source/Developer/TextureBuild/Private/TextureBuildFunction.cpp index 7dfa6b3b5785..07635d2e32eb 100644 --- a/Engine/Source/Developer/TextureBuild/Private/TextureBuildFunction.cpp +++ b/Engine/Source/Developer/TextureBuild/Private/TextureBuildFunction.cpp @@ -264,7 +264,20 @@ FGuid FTextureBuildFunction::GetVersion() const { UE::DerivedData::FBuildVersionBuilder Builder; Builder << TextureDerivedDataVersion; - GetVersion(Builder); + ITextureFormat* TextureFormat = nullptr; + GetVersion(Builder, TextureFormat); + if (TextureFormat) + { + TArray SupportedFormats; + TextureFormat->GetSupportedFormats(SupportedFormats); + TArray SupportedFormatVersions; + for (const FName& SupportedFormat : SupportedFormats) + { + SupportedFormatVersions.AddUnique(TextureFormat->GetVersion(SupportedFormat)); + } + SupportedFormatVersions.Sort(); + Builder << SupportedFormatVersions; + } return Builder.Build(); } diff --git a/Engine/Source/Developer/TextureBuild/Public/TextureBuildFunction.h b/Engine/Source/Developer/TextureBuild/Public/TextureBuildFunction.h index faae06a38a87..7cd8d69051b0 100644 --- a/Engine/Source/Developer/TextureBuild/Public/TextureBuildFunction.h +++ b/Engine/Source/Developer/TextureBuild/Public/TextureBuildFunction.h @@ -7,6 +7,8 @@ #include "DerivedDataBuildFunction.h" #include "DerivedDataBuildVersion.h" +class ITextureFormat; + class FTextureBuildFunction : public UE::DerivedData::IBuildFunction { public: @@ -15,5 +17,5 @@ public: TEXTUREBUILD_API virtual void Build(UE::DerivedData::FBuildContext& Context) const override; protected: - virtual void GetVersion(UE::DerivedData::FBuildVersionBuilder& Builder) const = 0; + virtual void GetVersion(UE::DerivedData::FBuildVersionBuilder& Builder, ITextureFormat*& OutTextureFormatVersioning) const = 0; }; diff --git a/Engine/Source/Developer/TextureFormatASTC/Private/TextureFormatASTC.cpp b/Engine/Source/Developer/TextureFormatASTC/Private/TextureFormatASTC.cpp index e34ce482b863..5c411a99c060 100644 --- a/Engine/Source/Developer/TextureFormatASTC/Private/TextureFormatASTC.cpp +++ b/Engine/Source/Developer/TextureFormatASTC/Private/TextureFormatASTC.cpp @@ -41,10 +41,11 @@ class FASTCTextureBuildFunction final : public FTextureBuildFunction { FStringView GetName() const final { return TEXT("ASTCTexture"); } - void GetVersion(UE::DerivedData::FBuildVersionBuilder& Builder) const final + void GetVersion(UE::DerivedData::FBuildVersionBuilder& Builder, ITextureFormat*& OutTextureFormatVersioning) const final { static FGuid Version(TEXT("4788dab5-b99c-479f-bc34-6d7df1cf30e3")); Builder << Version; + OutTextureFormatVersioning = FModuleManager::GetModuleChecked(TEXT("TextureFormatASTC")).GetTextureFormat(); } }; diff --git a/Engine/Source/Developer/TextureFormatDXT/Private/TextureFormatDXT.cpp b/Engine/Source/Developer/TextureFormatDXT/Private/TextureFormatDXT.cpp index 00b47aa3a223..c729eeaf517f 100644 --- a/Engine/Source/Developer/TextureFormatDXT/Private/TextureFormatDXT.cpp +++ b/Engine/Source/Developer/TextureFormatDXT/Private/TextureFormatDXT.cpp @@ -27,10 +27,11 @@ class FDXTTextureBuildFunction final : public FTextureBuildFunction { FStringView GetName() const final { return TEXT("DXTTexture"); } - void GetVersion(UE::DerivedData::FBuildVersionBuilder& Builder) const final + void GetVersion(UE::DerivedData::FBuildVersionBuilder& Builder, ITextureFormat*& OutTextureFormatVersioning) const final { static FGuid Version(TEXT("c2d5dbc5-131c-4525-a332-843230076d99")); Builder << Version; + OutTextureFormatVersioning = FModuleManager::GetModuleChecked(TEXT("TextureFormatDXT")).GetTextureFormat(); } }; diff --git a/Engine/Source/Developer/TextureFormatETC2/Private/TextureFormatETC2.cpp b/Engine/Source/Developer/TextureFormatETC2/Private/TextureFormatETC2.cpp index 80026f64e1d6..1beb9956c8fe 100644 --- a/Engine/Source/Developer/TextureFormatETC2/Private/TextureFormatETC2.cpp +++ b/Engine/Source/Developer/TextureFormatETC2/Private/TextureFormatETC2.cpp @@ -20,10 +20,11 @@ class FETC2TextureBuildFunction final : public FTextureBuildFunction { FStringView GetName() const final { return TEXT("ETC2Texture"); } - void GetVersion(UE::DerivedData::FBuildVersionBuilder& Builder) const final + void GetVersion(UE::DerivedData::FBuildVersionBuilder& Builder, ITextureFormat*& OutTextureFormatVersioning) const final { static FGuid Version(TEXT("af5192f4-351f-422f-b539-f6bd4abadfae")); Builder << Version; + OutTextureFormatVersioning = FModuleManager::GetModuleChecked(TEXT("TextureFormatETC2")).GetTextureFormat(); } }; diff --git a/Engine/Source/Developer/TextureFormatIntelISPCTexComp/Private/TextureFormatIntelISPCTexComp.cpp b/Engine/Source/Developer/TextureFormatIntelISPCTexComp/Private/TextureFormatIntelISPCTexComp.cpp index 657ffaef3164..00e60a709630 100644 --- a/Engine/Source/Developer/TextureFormatIntelISPCTexComp/Private/TextureFormatIntelISPCTexComp.cpp +++ b/Engine/Source/Developer/TextureFormatIntelISPCTexComp/Private/TextureFormatIntelISPCTexComp.cpp @@ -27,10 +27,11 @@ class FIntelISPCTexCompTextureBuildFunction final : public FTextureBuildFunction { FStringView GetName() const final { return TEXT("IntelISPCTexCompTexture"); } - void GetVersion(UE::DerivedData::FBuildVersionBuilder& Builder) const final + void GetVersion(UE::DerivedData::FBuildVersionBuilder& Builder, ITextureFormat*& OutTextureFormatVersioning) const final { static FGuid Version(TEXT("19d413ad-f529-4687-902a-3b71919cfd72")); Builder << Version; + OutTextureFormatVersioning = FModuleManager::GetModuleChecked(TEXT("TextureFormatIntelISPCTexComp")).GetTextureFormat(); } }; diff --git a/Engine/Source/Developer/TextureFormatUncompressed/Private/TextureFormatUncompressed.cpp b/Engine/Source/Developer/TextureFormatUncompressed/Private/TextureFormatUncompressed.cpp index a314c7873df3..d097584986f4 100644 --- a/Engine/Source/Developer/TextureFormatUncompressed/Private/TextureFormatUncompressed.cpp +++ b/Engine/Source/Developer/TextureFormatUncompressed/Private/TextureFormatUncompressed.cpp @@ -18,10 +18,11 @@ class FUncompressedTextureBuildFunction final : public FTextureBuildFunction { FStringView GetName() const final { return TEXT("UncompressedTexture"); } - void GetVersion(UE::DerivedData::FBuildVersionBuilder& Builder) const final + void GetVersion(UE::DerivedData::FBuildVersionBuilder& Builder, ITextureFormat*& OutTextureFormatVersioning) const final { static FGuid Version(TEXT("c04fe27a-53f6-402e-85b3-648ac6b1ad87")); Builder << Version; + OutTextureFormatVersioning = FModuleManager::GetModuleChecked(TEXT("TextureFormatUncompressed")).GetTextureFormat(); } }; diff --git a/Engine/Source/Programs/TextureBuildWorker/TextureBuildWorker.Build.cs b/Engine/Source/Programs/TextureBuildWorker/TextureBuildWorker.Build.cs index 0d12f417f453..bfe28a9244a0 100644 --- a/Engine/Source/Programs/TextureBuildWorker/TextureBuildWorker.Build.cs +++ b/Engine/Source/Programs/TextureBuildWorker/TextureBuildWorker.Build.cs @@ -12,6 +12,32 @@ public abstract class TextureBuildWorkerTarget : DerivedDataBuildWorkerTarget public TextureBuildWorkerTarget(TargetInfo Target) : base(Target) { SolutionDirectory += "/Texture"; + + var ProjectDesc = ProjectFile != null ? ProjectDescriptor.FromFile(ProjectFile) : null; + + // Determine if TextureFormatOodle is enabled. + var TextureFormatOodleUPluginFile = new FileReference("../Plugins/Developer/TextureFormatOodle/TextureFormatOodle.uplugin"); + var TextureFormatOodlePlugin = new PluginInfo(TextureFormatOodleUPluginFile, PluginType.Engine); + + bool bTextureFormatOodlePluginEnabled = + Plugins.IsPluginEnabledForTarget(TextureFormatOodlePlugin, ProjectDesc, Target.Platform, Target.Configuration, TargetType.Program); + + if (bTextureFormatOodlePluginEnabled) + { + ExtraModuleNames.Add("TextureFormatOodle"); + } + else + { + // Check for a project specific Oodle plugin + foreach (PluginReferenceDescriptor PluginReference in ProjectDesc.Plugins) + { + if (String.Compare(PluginReference.Name, "Oodle", true) == 0 && !PluginReference.bOptional) + { + ExtraModuleNames.Add("OodleDXTTextureFormat"); + break; + } + } + } } } @@ -21,18 +47,5 @@ public class TextureBuildWorker : ModuleRules { PrivateIncludePathModuleNames.Add("DerivedDataCache"); PrivateDependencyModuleNames.Add("DerivedDataBuildWorker"); - - // Determine if TextureFormatOodle is enabled. - var TextureFormatOodleUPluginFile = FileReference.Combine(new DirectoryReference(EngineDirectory), "Plugins/Developer/TextureFormatOodle/TextureFormatOodle.uplugin"); - var TextureFormatOodlePlugin = new PluginInfo(TextureFormatOodleUPluginFile, PluginType.Engine); - - bool bTextureFormatOodlePluginEnabled = - Enum.GetValues(typeof(UnrealTargetConfiguration)).Cast().Any(config - => Plugins.IsPluginEnabledForTarget(TextureFormatOodlePlugin, null, Target.Platform, config, TargetType.Program)); - - if (bTextureFormatOodlePluginEnabled) - { - PrivateDependencyModuleNames.Add("TextureFormatOodle"); - } } }