// Copyright Epic Games, Inc. All Rights Reserved. #pragma once #include "CoreMinimal.h" #include #include "TG_RenderModeManager.generated.h" class UTextureGraphBase; UENUM() enum class ERenderModes : uint8 { PBRMetalness UMETA(DisplayName = "PBR Metalness"), Albedo UMETA(DisplayName = "Albedo"), Normal UMETA(DisplayName = "Normal"), Displacement UMETA(DisplayName = "Displacement"), Roughness UMETA(DisplayName = "Roughness"), Specular UMETA(DisplayName = "Specular"), Metalness UMETA(DisplayName = "Metalness"), LayerMask UMETA(DisplayName = "Layer Mask"), ActiveMask UMETA(DisplayName = "Active Mask"), UV UMETA(DisplayName = "D: UV"), WorldNormals UMETA(DisplayName = "D: WorldNormals"), WorldTangents UMETA(DisplayName = "D: WorldTangents"), WorldPosition UMETA(DisplayName = "D: WorldPosition"), WorldUVMask UMETA(DisplayName = "D: WorldUVMask"), Default = PBRMetalness UMETA(DisplayName = "Default") }; class RenderMaterial_BP; typedef std::shared_ptr RenderMaterial_BPPtr; typedef std::shared_ptr RenderMaterialPtr; typedef std::shared_ptr TiledBlobPtr; typedef TMap MaterialMap; class TG_RenderModeManager { protected: FName _lastRenderMode; /// Last used render mode (used for unbinding) FName _currentRenderMode; /// Currently applied render mode TMap _renderModeMaterials; TArray _renderModesString; void InitializeDefaultMaterials(int totalTargets, UTextureGraphBase* TextureGraph); RenderMaterial_BPPtr GetTargetRenderModeMaterial(int targetId, FName renderMode); void BindBlobToMaterial(RenderMaterialPtr renderMaterial, TiledBlobPtr blobToBind, const FName& targetName); virtual void UpdateRenderMode(UTextureGraphBase* TextureGraph); public: TG_RenderModeManager(); virtual ~TG_RenderModeManager(); virtual void ChangeRenderMode(FName NewRenderMode, UTextureGraphBase* TextureGraph); void Clear(); bool IsCurrentRenderModelLit(int targetId = 0); ////////////////////////////////////////////////////////////////////////// //// Inline Functions ////////////////////////////////////////////////////////////////////////// FORCEINLINE FName GetCurrentRenderMode() { return _currentRenderMode; } FORCEINLINE FName GetLastRenderMode() { return _lastRenderMode; } };