Files
UnrealEngine/Engine/Source/Runtime/RHI/Public/RHIResourceCollection.h
2025-05-18 13:04:45 +08:00

79 lines
1.8 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#pragma once
#include "RHIResources.h"
#include "RHITextureReference.h"
struct FRHIResourceCollectionMember
{
enum class EType : uint8
{
Texture,
TextureReference,
ShaderResourceView,
Sampler,
};
FRHIResourceCollectionMember() = default;
FRHIResourceCollectionMember(EType InType, FRHIResource* InResource)
: Resource(InResource)
, Type(InType)
{
}
FRHIResourceCollectionMember(FRHITexture* InTexture)
: FRHIResourceCollectionMember(FRHIResourceCollectionMember::EType::Texture, InTexture)
{
}
FRHIResourceCollectionMember(FRHITextureReference* InTextureReference)
: FRHIResourceCollectionMember(FRHIResourceCollectionMember::EType::TextureReference, InTextureReference)
{
}
FRHIResourceCollectionMember(FRHIShaderResourceView* InView)
: FRHIResourceCollectionMember(FRHIResourceCollectionMember::EType::ShaderResourceView, InView)
{
}
FRHIResourceCollectionMember(FRHISamplerState* InSamplerState)
: FRHIResourceCollectionMember(FRHIResourceCollectionMember::EType::Sampler, InSamplerState)
{
}
FRHIResource* Resource = nullptr;
EType Type = EType::Texture;
};
class FRHIResourceCollection : public FRHIResource
{
public:
FRHIResourceCollection(TConstArrayView<FRHIResourceCollectionMember> InMembers)
: FRHIResource(RRT_ResourceCollection)
, Members(InMembers)
{
for (const FRHIResourceCollectionMember& Member : Members)
{
if (Member.Resource)
{
Member.Resource->AddRef();
}
}
}
FRHIResourceCollection(const FRHIResourceCollection&) = delete;
~FRHIResourceCollection()
{
for (const FRHIResourceCollectionMember& Member : Members)
{
if (Member.Resource)
{
Member.Resource->Release();
}
}
}
virtual FRHIDescriptorHandle GetBindlessHandle() const
{
return FRHIDescriptorHandle();
}
TArray<FRHIResourceCollectionMember> Members;
};