2021-05-13 20:42:14 -04:00
|
|
|
// Copyright Epic Games, Inc. All Rights Reserved.
|
|
|
|
|
|
|
|
|
|
#pragma once
|
|
|
|
|
|
|
|
|
|
#include "CoreTypes.h"
|
2024-06-21 12:52:32 -04:00
|
|
|
#include "Containers/SharedString.h"
|
2021-05-13 20:42:14 -04:00
|
|
|
#include "DerivedDataBuildFunction.h"
|
2021-07-15 09:58:48 -04:00
|
|
|
#include "DerivedDataBuildVersion.h"
|
2022-08-23 12:41:58 -04:00
|
|
|
#include "DerivedDataCacheKey.h"
|
2022-07-20 12:03:45 -04:00
|
|
|
#include "Misc/Guid.h"
|
2021-05-13 20:42:14 -04:00
|
|
|
|
2021-08-09 16:32:18 -04:00
|
|
|
class ITextureFormat;
|
2022-08-23 12:41:58 -04:00
|
|
|
class ITextureTiler;
|
2022-07-20 12:03:45 -04:00
|
|
|
namespace UE { namespace DerivedData { class FBuildVersionBuilder; } }
|
2021-08-09 16:32:18 -04:00
|
|
|
|
2021-05-13 20:42:14 -04:00
|
|
|
class FTextureBuildFunction : public UE::DerivedData::IBuildFunction
|
|
|
|
|
{
|
|
|
|
|
public:
|
2021-07-15 09:58:48 -04:00
|
|
|
TEXTUREBUILD_API virtual FGuid GetVersion() const final;
|
2021-06-03 11:49:06 -04:00
|
|
|
TEXTUREBUILD_API virtual void Configure(UE::DerivedData::FBuildConfigContext& Context) const override;
|
2021-05-13 20:42:14 -04:00
|
|
|
TEXTUREBUILD_API virtual void Build(UE::DerivedData::FBuildContext& Context) const override;
|
2021-07-15 09:58:48 -04:00
|
|
|
|
|
|
|
|
protected:
|
2021-08-09 16:32:18 -04:00
|
|
|
virtual void GetVersion(UE::DerivedData::FBuildVersionBuilder& Builder, ITextureFormat*& OutTextureFormatVersioning) const = 0;
|
2021-05-13 20:42:14 -04:00
|
|
|
};
|
2022-08-23 12:41:58 -04:00
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* This function does the meat of breaking out the inputs from the build context and handing them
|
|
|
|
|
* to the tiler, then packing them back up for the build process.
|
|
|
|
|
*/
|
2024-06-21 12:52:32 -04:00
|
|
|
TEXTUREBUILD_API void GenericTextureTilingBuildFunction(UE::DerivedData::FBuildContext& Context, const ITextureTiler* Tiler, const UE::FUtf8SharedString& BuildFunctionName);
|
2022-08-23 12:41:58 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* This build function expects an implementation of ITextureTiler as its template
|
|
|
|
|
* and looks a bit awkward because IBuildFunction is required to not have any state,
|
|
|
|
|
* so we can't put the instance of the ITextureTiler on our object - hence the odd
|
|
|
|
|
* statics.
|
|
|
|
|
*/
|
|
|
|
|
template <class ITextureTilerObject>
|
|
|
|
|
class FGenericTextureTilingBuildFunction : public UE::DerivedData::IBuildFunction
|
|
|
|
|
{
|
|
|
|
|
virtual void Build(UE::DerivedData::FBuildContext& Context) const
|
|
|
|
|
{
|
|
|
|
|
ITextureTilerObject Tiler;
|
2023-03-09 14:03:35 -05:00
|
|
|
GenericTextureTilingBuildFunction(Context, &Tiler, GetName());
|
2022-08-23 12:41:58 -04:00
|
|
|
}
|
|
|
|
|
virtual void Configure(UE::DerivedData::FBuildConfigContext& Context) const
|
|
|
|
|
{
|
|
|
|
|
Context.SetCacheBucket(UE::DerivedData::FCacheBucket(UTF8TEXTVIEW("TiledTextures")));
|
|
|
|
|
}
|
|
|
|
|
virtual FGuid GetVersion() const final { return ITextureTilerObject::GetBuildFunctionVersionGuid(); }
|
2024-06-21 12:52:32 -04:00
|
|
|
const UE::FUtf8SharedString& GetName() const final
|
2022-08-23 12:41:58 -04:00
|
|
|
{
|
2024-06-21 12:52:32 -04:00
|
|
|
static UE::FUtf8SharedString Name(ITextureTilerObject::GetBuildFunctionNameStatic());
|
2022-08-23 12:41:58 -04:00
|
|
|
return Name;
|
|
|
|
|
}
|
|
|
|
|
};
|
2024-04-19 16:57:52 -04:00
|
|
|
|
2024-06-21 12:52:32 -04:00
|
|
|
TEXTUREBUILD_API void GenericTextureDetileBuildFunction(UE::DerivedData::FBuildContext& Context, const ITextureTiler* Tiler, const UE::FUtf8SharedString& BuildFunctionName);
|
2024-04-19 16:57:52 -04:00
|
|
|
|
|
|
|
|
template <class ITextureTilerObject>
|
|
|
|
|
class FGenericTextureDetileBuildFunction : public UE::DerivedData::IBuildFunction
|
|
|
|
|
{
|
|
|
|
|
virtual void Build(UE::DerivedData::FBuildContext& Context) const
|
|
|
|
|
{
|
|
|
|
|
ITextureTilerObject Tiler;
|
|
|
|
|
GenericTextureDetileBuildFunction(Context, &Tiler, GetName());
|
|
|
|
|
}
|
|
|
|
|
virtual void Configure(UE::DerivedData::FBuildConfigContext& Context) const
|
|
|
|
|
{
|
|
|
|
|
Context.SetCacheBucket(UE::DerivedData::FCacheBucket(UTF8TEXTVIEW("DetiledTextures")));
|
|
|
|
|
}
|
|
|
|
|
virtual FGuid GetVersion() const final { return ITextureTilerObject::GetBuildFunctionVersionGuid(); }
|
2024-06-21 12:52:32 -04:00
|
|
|
const UE::FUtf8SharedString& GetName() const final
|
2024-04-19 16:57:52 -04:00
|
|
|
{
|
2024-06-21 12:52:32 -04:00
|
|
|
static UE::FUtf8SharedString Name(ITextureTilerObject::GetDetileBuildFunctionNameStatic());
|
2024-04-19 16:57:52 -04:00
|
|
|
return Name;
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
2024-06-21 12:52:32 -04:00
|
|
|
TEXTUREBUILD_API void GenericTextureDecodeBuildFunction(UE::DerivedData::FBuildContext& Context, const UE::FUtf8SharedString& BuildFunctionName);
|
2024-04-19 16:57:52 -04:00
|
|
|
|
|
|
|
|
template <class ITextureFormatObject>
|
|
|
|
|
class FGenericTextureDecodeBuildFunction : public UE::DerivedData::IBuildFunction
|
|
|
|
|
{
|
|
|
|
|
virtual void Build(UE::DerivedData::FBuildContext& Context) const
|
|
|
|
|
{
|
|
|
|
|
GenericTextureDecodeBuildFunction(Context, GetName());
|
|
|
|
|
}
|
|
|
|
|
virtual void Configure(UE::DerivedData::FBuildConfigContext& Context) const
|
|
|
|
|
{
|
|
|
|
|
Context.SetCacheBucket(UE::DerivedData::FCacheBucket(UTF8TEXTVIEW("DecodedTextures")));
|
|
|
|
|
}
|
|
|
|
|
virtual FGuid GetVersion() const final { return ITextureFormatObject::GetDecodeBuildFunctionVersionGuid(); }
|
2024-06-21 12:52:32 -04:00
|
|
|
const UE::FUtf8SharedString& GetName() const final
|
2024-04-19 16:57:52 -04:00
|
|
|
{
|
2024-06-21 12:52:32 -04:00
|
|
|
static UE::FUtf8SharedString Name(ITextureFormatObject::GetDecodeBuildFunctionNameStatic());
|
2024-04-19 16:57:52 -04:00
|
|
|
return Name;
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|