Files
UnrealEngine/Engine/Source/Runtime/SlateRHIRenderer/Private/SlateUpdatableBuffer.h
2025-05-18 13:04:45 +08:00

49 lines
1.3 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#pragma once
#include "CoreMinimal.h"
#include "Rendering/RenderingCommon.h"
#include "RenderingThread.h"
#include "Interfaces/ISlateRHIRendererModule.h"
#include "SlateElementVertexBuffer.h"
/**
* Represents a per instance data buffer for a custom Slate mesh element
*/
class FSlateUpdatableInstanceBuffer final : public ISlateUpdatableInstanceBuffer
{
// Owned by the render thread
struct FRenderProxy final : public ISlateUpdatableInstanceBufferRenderProxy
{
TSlateElementVertexBuffer<FVector4> InstanceBufferResource;
virtual ~FRenderProxy()
{
InstanceBufferResource.Destroy();
}
void Update(FRHICommandListImmediate& RHICmdList, FSlateInstanceBufferData& Data);
FRHIBuffer* GetRHI() const override
{
return InstanceBufferResource.VertexBufferRHI;
}
} *Proxy;
public:
FSlateUpdatableInstanceBuffer(int32 InstanceCount);
~FSlateUpdatableInstanceBuffer();
private:
// BEGIN ISlateUpdatableInstanceBuffer
virtual uint32 GetNumInstances() const override final { return NumInstances; }
virtual ISlateUpdatableInstanceBufferRenderProxy* GetRenderProxy() const override final { return Proxy; }
virtual void Update(FSlateInstanceBufferData& Data) override final;
// END ISlateUpdatableInstanceBuffer
private:
uint32 NumInstances = 0;
};